Lua Obfuscator [Updated]

Run Settings
LanguageLua
Language Version
Run Command
local a={ normalobfus=false, hardobfus=false, grass=false } input = io.read("*a") local b={ optional="local IilillliiILl = 'L25923U24X27924W27927C27C24Z25027C25D25F26026725H27F27C25H25S25V26525W24Z25327C25U26626725U25S27M27V27925E25H27J26725Y24Z25127W26125S25F28A27C26428126124Z24Z27C26625E27N27925X25W25V25G28928B27927P25E26224Z25427W26625F26625G25H27K27T28X24X25Z27K25X24Z25227C25Y25W25H25Z25W26725J27U27C25G26725D25S25U29127G27925D28026526529H29J29L27K25Z26628G2792A82AA25927C25E29L26429L28127Q27S24Z24Y27C25F25W25D2AO2AG25G25V28Q24X28I25H25U28K25527O28O28627K28928324X27K2AH25F27M29C25Y25E2AW24Z27B279162BL27D26A26P24Z27127C1124626A25I1622L23N1I2231626K1B26P26626A25O2121126U25I23Z22223724N21K1Q26Y23Z22Q2421C24X24R22926222T26322227021C24Q23N21W25X1M24R23W21224F21T2161J21S22J24523H23C26B21R24C26B26D24A1B1P26224I25P22226R1Q23326O25V26224E2AB24X23126B23N28L2BO2312BK27C22A2E72792362AU27922I25X25B2EA24X21U2EI22V2ED24X21026Q25L2DZ22V26B23W24L24Z26T27C22X26A24625223922V24S21P21L22V24B21124625324624K22B22R23N25126I21K1G25K22E23224F2691M25823326625I23I2501C25221424022D25J26I21624X23725R26B22026Y23221X23C23321I26S1K1M25O22926R23X23O26V23221J25225Z24S24Z2B427926M26F26S26B26A26W2722732AY2652FV25W28F29C26M26S27326F2BO21D1Y23123926O2BO27C21T23Y2DZ25I28D2BF27C25X25G2642AT29I2GY26M29F25W2ER25727C26M26M26725W25I2I32ER2I024X2I829V26025F28P2GX2IG2I22II2IK29R2I126025H2HA24Z2I62I125H2B628725Y2HN27923W2BR2BG25S2AJ2A527926926529W25W26W25X2BO2471U22Y1226O2IW27C2H825S25X2852J12JA24X26X25H25H25D26U29L2J324X23Z2BR21L27C26O2JD25E24D2412IT24125S25D25D25W28E25E24125H2HT2KM26125W2KP29625W2KL26625Z2KF25Y27Y25K24128D25J2KR25V25W25Z25S2A329O2412AJ2KC25S26725X2KP2KR2AH26725E28126027Y2KL27X25G2IK2B82KS29725Y2612LC2L12L62LU28E2KR2I325E25U27J25V2AM2L12I42M725G25U2602LN28824F2DZ25V25K2IU24X21Z2BO29C27D2MS2MT2MT24J27D2BO2MW24X27B28M2792MZ28M2AP27924127928M2N224X29C24Z21024X2N627C24J2622NC24X29Z24X2N82NL29C2BA2MZ27G2IF2MZ27V2IM2MZ29I2NN2MZ2B42932N32792932NH2MZ2I62IX24X2MZ25624X2OE2O524X2AF2NB27C2582MU2N727925B24X2O42OI27C2832OQ24M2N02OY25126827C2OX2N12NF2OQ2BO24H25G2OR2OT2OP2OU24624X2OQ28M27B2BL24T2ON27E2NF25A2NG2PD24X24H2NL27B2N62PK2792IF2MS2PW24X2PO2MU2Q02OK27D24G24X2Q72OQ2MV25V2OC24X2OM2792532142QD2422OY27B2P027C2QK27B24124L2QD2OS29C24J2QC24I2PF2OU2QI2QY2PE2PI2NC2P12792R32NO2QS2QY2OS2QA2R924X2QS2QU2NI2QC24K2Q127C2QR24X24N24X2IF2BA2RN2OX2IM2PS2QG2QI2OX24F2QL2R527C2S02QQ2QS2RU27C2Q72N32QC24P2QD2N723V24X24O2RQ27C2QY2OO2CQ2SI2792QS2SL24Q2SN24X2RK2SL2PK2IF2SU2SD24S2RO2RM27924V2PA2792OX2SL24U2SS2SC2MS2Q72T927A2Q62QD2T72MT28M2QY2RW2MS2MZ2QS2SH2OH2RK24R2NI2792RP2SR2MS2QY2RP2N927D25Y2RF2PR2MU24J25C2ST24X2Q02U72T12TT2N32U82OX2TX27923T2U42TI2OK2U32RK2TM27D2UC2RP2T02UF24X2OX2UE2OC2U82SC2UI24X2UK2RK2TB24X2UN2T12UQ2NI2UG24X2UU2UZ24X2SC2UY2UC2SH2V22UK2RP2TQ2V72U22UW2U52MV2V024X2T42UV2SH2VI2U82TT2VL2VR2UY2V82SC2VA2VX2SG2VB2SM2VZ24X2SR2W22V127E2VQ2SH2W72VF2TT2VE2UC2SR2WC2PK2W22SH2Q42VQ2TT2WK2WO2W92UV2PK2WC2T02W22WM2WH29J2WD2VS2TN2U82PK2TE2VF2T02WC2T42W22SR2VW2VP2X72PK2WX2U82T02NP2VF2T42WC2T92W22XC2X62792U32T02XO2VV24X2XD2UC2T92WC2N82W22XQ2XY24X2U32T42Y22T92XR2UC2N82WC2402X827C2UK2T42YM2U12X72T92Y22N82VO2UC2YM2WC2432YN2UJ2Y424X2Z12YS2XZ2NO2X92UR2U82YM2YR2VF2Z12WC2QK2W22N82QK2Z72YD24X2YM2Y22Z12ZE2UC2QK2WC2452Z22V32ZO24X2ZW2ZM2U32Z12Y22QK2YX2U82ZW2WC2442ZX2UK2Z1310B310224X2QK2Y22ZW310724X310B2WC247310C310H24X310P310G2ZW2Y2310B2WN2U8310P2WC2PE2W22ZW2PE310G310B2Y2310P310L2PE2WC249310Q310B311D310G310P2Y22PE2Z62VF311D2WC248310Q310P311P310G2PE2Y2311D2ZL2VF311P2WC24B310Q2PE3121310G311D2Y2311P311X2UC31212WC24A310Q311D312D310G311P2Y23121310L312D2WC24D310Q311P312O310G31212Y2312D311L2UC312O2WC24C310Q31213130310G312D2Y2312O31012VF31302WC2S02W2312D2S0310G312O2Y2313031292U82S02WC24E310Q312O313O310G31302Y22S0313K24X313O2WC23L310Q31303140310G2S02Y2313O310L31402WC23K310Q2S0314B310G313O2Y23140310L314B2WC23N310Q313O314M310G31402Y2314B310F2VF314M2WC23M2ZX1O24X3140314Y2MU25S2SD27C2HN26L24X2SK2U62QC2QS310T2RE2RK2IF31152Z82RP2SP2MT2BT2RK2NB2V82RP2Y22OX2UB2VU2WC2VK27D2VM2WZ2XL24X2532PS2RK2312OY2RP2QN27931672BL314M2QY2K32OC2RJ2QE2R02U922B2S1316A24X316M27B2QW2U9311G31632T42RK22G2OY279316O316Y27B2FD2U927G27B29Z2Q02AF2Q327C2WK2UA27C2OS2PZ2OL2ON2UB2U621M2U92NB2RN2RK2RV316K2RK22M316N2R624X317U2S52U92IM2S9316V2U91Z24W2MQ317W318531732T42QY26X318627C316O318D317Z317Q2S82NI2632T12Q52VR2WX2792SC2Y52792VY2TU2SM2V22T62SM2MU311D2SY310G315S2U62VC2YI315W2WA315Y2YO2T12VO2NB31642U925A318E3169317W319I316R316I319F316W2PF318E3170317W25B318E316S315P27D28M31952MV318Z2YX318R31902SD319B27D2VN2XY24126S2T12U0315A2WA2SC311S27931502RP2V62MS21F2U92MX318F317W2N02QM319U319W2U82RK312427926W2T131822ZB2VR31B025121B2U926V318E2RN2SH318127D1H2SM318231AN2792SR318Q317E318T2VD31A62MZ2XH2MT2XJ2ON311D2VO310G2WW31962X83198317E2X2310Q2X52Z7319G2SH23K318E2TT316O31CB317Z31BE318K2N92NF2TT2BA24X23Y2X831BN2XX2OH2XF318W31BT2MS31BV3191316131BZ2ZA2WA2SR31C32X12WA2X3315Z2SM2VE319F2PS2SH31BB27B31CD317W31DE316H2W9319P2W923Y319S2S227931DN319N31DK319Z2SM31BN2SR31A431C4318W31D72MS31C7316231AC2WB2SJ2WA2PK31AJ24X31502TT2Q031AO31CZ316Z31DP24X31CF31EI31DR31EI31DI2512U327922622628M2QH27C26Q24W2AP31ES31EP27C31ES31EU2QI27926S31EY24X31ES25321N2SJ318E31F02I62RK24I318E316O31892VF31AZ27D31B22RP31B42WA2OX31B731B92RK1W31BC2TP24X317R2SA2SM2OK2BT2SH315Q2RM31FZ2VO312G2U131C031A22X82ZS27931D531CS2ZX27931E331DB2W925Z31CC31EI31GP31DS31G62OU2T42SH25W31DO316O31GY31GT31622VP31GD2TN31BL31612MZ31GI2SZ31GK31D931AB31AD2TT2UY315B2UC31E927D31EC317E2MU31AP31BY31EH316O26E31FJ317W31H12RE31CH2792UQ31HG2Q827C31AN31G53162317O31G927C31GB31H431D12OH2SR31GG31DZ31GJ318Y31HD31C831DC24X25P31GQ316O31IN31CG31G0317C2PM2SM2PY31I531G72N731I827931IA28M31H52UR31H731IF31HA2MZ31E127D31GM2OU31IL31FX31DF31EI31JF31DJ31GU2QG31GW24X21N31GZ317W31JO31H22OK31J331IC2SD31DX318W31J827931JA27C31JC2N731HF31A631HI2XB24X31EA31HM31EE27D31HP2MS318727C31IQ31EI31JR31JH31FJ31EQ31F931ET316331F524X21R31F831F031KN31F331KQ27C1X31KU22631FB27C27131FE22625131FG24X31L5318I2SS312R31832RK1U31JP27C31LH316R31AY24X31B024X31FP31I22VT31B6318F31FV24X1V319W2QC2SH2Q23163311B31IS2PU31GH27C2PY27D2Q031FR27C2Q031BK27C25Q31DT31GL31GV2W91S31LI27931ML31DS2SR31JT317E31BN2T031DY2XT318W2XV2MT31CR31E431AD2PK2Q031K72Y331KA317E2XK31EF318Y31KG2791G31HU27C1T319S26E2VG2PL31L82U921431AX31AG2BO31742RG2OY2N231N4317J27C315M27D31742RK2I62R431HN31562MS312131AF2MU31212TI31OA31NK2ON2NE2W92OG279311Z2MS2BA2RW2TT3133316131ON24X313F31OQ31MI313R31OU2SM314331OX2TT314E31P024X314P31EG31GK2P731H731P531DY2PK2MZ27D2T031O92MT31CV31NX2XK2MY2QC31PC2VQ2T031OC2VQ31PI2MS25H31N831572RI317E31PD2ZN2T031ME2Z831PS27D31PU2PK31PK2PQ2PK2AF27B2O42Q031M831MC318W31MZ27C2IM317H27931MB31M62TV31NX31MI317B2QG31QQ2QZ31QS2U42MU2Y031O52MS21531BQ2BO2HN31NJ315B2MT2472SY22H318E31AV27C31RB31DS2QY31DL2QY22E31MM24X31RK31RG31E42QS2QS31PD31532NO31AD31RQ31E72UV2RP31N72QS31PG27C31AP31R731HR317W23031NF27931RN2OC317M2N131PX2QY23P31G831AG315B23O27C2472N82QY21W318E23R31EI31SQ31RO23Q31PX2QS31SH31K42U4315M2UK31IZ2T131PD23S27D314M2P32ON31502S631BW31AG31DU27C31R2316F31PW27C311L316G2QF31EH24Z2XK26S25L25U25G2AH2LC2LJ2IJ2KC2KN2602KL31U226724625H24126926A26C2S02OK21D2PL31TL31TK2PL315Q29C2IA25L2HU2792B228E24Z31TO31EH2ON2N431UT2792NH31NL2NL2MT2MR2B431732PS2NX317V31QJ316Z25I2NM31H32OU26R2VP31762VP316O31VG24X2782NA2ON31VA31VM2MU31TM31UF31622K32HP2JV29K29M29O25J316327D27331VS31W42Z92MU316G31W531UW31W731VS29C31VU31DN2ON316G2BR2Q026W26424125F29T2672LU29731U72KW2KD28S25S2KL2KQ2652AT313824X31UE31UF2UC2PH2WA2AP2NB25B2132VP2QS31NC2U427B31XA31XC31V72SO2OY24127031V027C2NH31XM31VB2BO2NH25325U2NL31QB31VB316O31XY24X31SH2AP2NH2OK2G631CM31XO24125T31W12BA31UY2PX31EH2NN2NP29I2IF31XQ2U12NB31YE2OY31QF2MT31Y8317027D2AP31732NH31TA31RD318Z2BL31KN316G31XH28M2Z131XE31Z62NO31XN2MR2PP2OP31XB28M2T02QM31EI31ZG27931Y331ZC31H32G62NN31YT2N725L31VB2NN31XQ312O31VP31ZM2ZN27931ZP31AS2P231V92PP318O27931VR31UF2BA2EN2BI2AX29C31UP25F31W82J322926626P31WE24Z31OW26X2KR25X2602LH2IT240241320P2412ML29V25E2AH2LH2KN2KR29O2M725K25D2IU2LH27X2LL27P27L25E24F24Y31OW2K431W931YO31V12PL2NP28B31WD2MT320127D2NP27G2NN318O31YS318W29I2O82792B42QV2O631VB31ZQ29I2PS31Z12OF32272MT2U32AF2OB2MS2BT2OE31IY27925W31W12OB31OI24X322N27V31OI2OB31NM29I2OE322B29I32062UC2B431ZP31B2317G2XA24X2I62NN31B831IS311P2QQ21R2OT31OI31ZP21I2OT317A31EH2NP2AF323L321T2OM31W82PC31ZB2MS31M12PL2PS322Q2MT2Q7323Z2MS2OQ31822OK2TT2OQ2BA2RD24X26B2RL323U27D2PS31YQ318K323L2U62PB2ON2PO31PD32462RL2BA323W2UK2OM31M1324P2OM2BA31US322N2AP31OI31TO31NM2B42RP2BL21E31IS32062ZN2O731UF2O32ON314031QK2MT32082PL2OB320H2MT31VV29C25H321827T2NN23926V23K24Q22R2K32BQ2BS2BU2BW2BY2C02C22C42C62C82CA2CC2CE2CG2CI2CK2CM2CO2CQ2CS2CU2CW2CY2D02D22D42D62D82DA2DC2DE2DG2DI2DK2DM2DO2DQ2DS2DU2DW2DY31UK2I428227C23626A24024V22W21M2IR2BB2LL2HA27M2OS2642602M72FV25S2L424X26G27D31X331UF3258323S31BQ325A27931AP2J32HN3121327X2T0327Z24X315532822WA31X627C31B231YV31C128B2NB323B28M314031DS27V31UY2TT29I2BO31ZP2BT27V322L24X3258328Q31C132242WA2932O12U82I631CM2UK29I2OB31GN27V312D27B29I316O329C31DJ27V2PY328P31YG27D2782B4325H319T27C311D31DS2OE31UY322F32382ON322J31I627D325831Y132372OM2NY2U82OQ3293324Q31D82AF324V31JD322C329S2OT316O32AG328W322C32062RN2OE31OI317G32A231ZY2VQ2OM322H31Q5322C31TO31NR31VE27V2SH31SE316O32B231EI328L2793258328U2MU2RN27V2BA32AQ2SI321M2SM31V327C31ZP31PU31V62TF31702I628M322Y31M231VT31ZC1M318F2ON32BW2ZM27D32BZ31WA32BT328F31SE24X32C2324E32C731UH31B528B2HN31B231VJ323732BA317031B928B31NJ31DS2B4328O2PA2BO31IW32592YC3258293316G2UC2I62QV2U82OE32A92AF32962PA323L31GN2B426Z2OY293316O32DA322B2B4325A2TT32CW31M727D2K732DG31UH31HS2OY316S32CO31JB32CQ32DK31L432CT2ZM32CV32C332CY31IS2UV32D22WA32D431D829332D732AE2B432CM2PA32DP32DF32AS31K232DU31YF27C32DM32BU32BP2NL23X316Z325J31TG324L2GW2B52JT2B8325M2MS325O27C29E2LG2AY27I27K27M2XD23927223R25122R23H26A22O21A2D622S24C25725E24L22023624724O26I22Y2FM22E22X23Y26M1C26E23J325Z2BR2BT2792BV2BX2BZ2C12C32C52C72C92CB2CD2CF2CH2CJ2CL2CN2CP2CR2CT2CV2CX2CZ2D12D32D52D72D92DB2DD2DF2DH2DJ2DL2DN2DP2DR2DT2DV2DX2EN2AR25D2HH2HJ2HL2EI162EN23Q32HH24W26Q327T31VS316S31O42Z832872BT32C6316231X531H3325832BH31B12PP321M2UC28B2NH328J31CN316Z32B932C32412EY32BD32BX2MS324H27D329P2MT329O32BK31YR32E231622532T427V31CO31XE32IQ329H322D24X21A2SI3231322331W12OH2932NV2792I6329P329831HE2SI2IF2OS2UC293322H315029I323631S332J031UH316S27V31ZP32IW3230324K31IS31OI2MZ32J2318W32J52MT32J72Z731E531YJ317F3291329X27C32JF2T52MT31AP31Y831XE2Q7328M322D32IN31W123Z31S627C32KH32KD32JN32IX32JQ2B42NS322632J3329X32J632K431N132J932K22UV32JD31HL2SI32JH328032JJ32BO32IT32KM32JP31GE2B432JS32KR32JV32IL32DK32992RM31AD32K1322632KZ32KV31EB32L22ON32K931KF3202279310P2BL32ER318F32BQ32EI3159328731VO31VC31UG32L62ON323L32EY27D32F028Y325R327F3279327B327D32G2326132G5326332G8326632GB326932GE326C32GH326F32GK326I32GN326L32GQ326O32GT326R32GW326U32GZ326X32H2327032H5327332F428732F727C32F932FB32FD32FF32FH24F32FJ32FL32FN32FP32FR32FT2FN32FW32FY32G032H82AS32HB2HK2JN2BO32HF2NH320C24W31AD2I732HM2TF2K3328731YM32JQ31X832IC27B32HK31DS27G31UY32I72PL31CL32JJ2MR2BT27G328V32I732CX2U8329E2WA323332K332D527V2OS31GN27G32OF31W1316O32P332AK321T32DT321W32IC31632TM32P327G32P532DQ2QC2NU27D32IW27V32CX31YF2NY32IZ2O1322631YS32OZ32J832IB32LL2VF2B432JE31W132IG24X31AP320131PL31VB2PY32PL32E031YF32LC31IS32PR2PA32PT32K7317O31AD32PW32K7323232LN315032BN32K832IU32KI2792RK32OG2SS32KF27G31VE31XE32QZ31DJ32PJ27C32Q932PN2SI32PP32QD318W29332QG32P032LI31YC32KY32PY32QN32Q132LQ32QR32Q632R327932R532JQ322X318W32OW32J132L531QT32RD31T032QK32JB2U832PZ32L132QP31EF32Q532LT31LN32EQ32CB32LY2OY32PM320732SA2MT2BO327F25L2A12L926531H3327U2PL32LX32SG27E31TR31TT31TV2KR2AJ24125E31TZ2KP31U22KD25E31U531U731U931UB32SN31W432SQ2MS31UJ2HV2HX2AT2OS273327M320Q32TF32LF26731W931UF2XR32LS32LS327X31ZX31WB32SH31OF32CB32TB32ES320M2NN28S28U2U32PY25O32TO321O31WG32U832TR31UF31R427D32TZ32PB32NA32F6320M2NH32H932NW2HL31QV27932SO315C2S131JL2OY32A331Y032PH32UT32B832M431SI31ZX32QI2VP31YN2WA321Q32L128M32C9328132UC316O2R432UX32LW32SF32UC29228H327M29625I327P322N2MR32UR2MU31ZJ2PL32B732SP32VI27D31LE32EU2GY2H02H22H42H62NN2H825I2HA31WH31VW2A72672A92DZ2AD320M31OI31TU25F2AR27L26529A2K324L2BR31OI32WO2IA28S32F225W2JH31OF323L2AH25H2AJ27P27P27R325S27H32NB2K324P2BR32UL32NV27C2HI32NX2DZ2I42IT2K324T320L2MT24132XO2MS24332XR27D24532XU31SM32XX27924932XZ31LN2J627C2HS2812K324D32Y224F32Y223L32Y428R32TF32F42A22652K323K32Y223N32Y223M2BR2OS2862JE2M929X2AY2B02B22K323P32Y223O32Y223R32Y223Q32Y223T32Y223S32Y223V32Y223U32Y223X2BR26V27C26D2KQ24126U2AR28124127125G25S24127225V25Z31TV28029927Y32I932TF2852HA24126V2IJ25W23V31XM2L126V25S2602652LS2KR2IZ33022HY24132HH32ZX2M628129531X22BO21J32UB32JQ32HO2WH328732HX2NP31Y42YC31YT327X32OC32DY2PT32BB2QS32V831UX32AE2AP323R2NQ317W331F31P432VI31742NH31M531R032BY331327C32C231W83258328H33192NQ32PB31EV28B32B531YZ2W932572NL32AM331A31XO2NN32KF28B22Y32QS24X332C317331KR26U31XJ24X332I31LL2NL31CM325832OH2ON32CF32QR2UV32QK323B28B31AD32EF32BH2RP32BJ32JZ2QS32II32EJ2791I2PA32AM32262RH2MS2I632HX329X2OB31QF32BS32XP27932AO31V82MS29331OI31I7329X2OS2RC2T92I6332Y329X316O333X253269329X333X3224317W333X316S333M27C32AR32C932582OM32P824X31PU2OE32AY31PX2OE324J32AR316G2RN323O317I31T0334Q2PC2UV2OQ323W31502AF324A31KD322C31AR329Q279314Y33242OE321Z32AN33522ZA31R2333J332D2783322333X31F131ER31KP31EV27931VE31EZ31L731KW335L31KR2EY335P31L32OO27B31FF2NL2N8332225D32SC2XK336331XE33662VF28B332O31VB32BH332S32P82UC332V32CK24X266316Z2U332DS2MU333131TP32A1333932BB2ZW2932OS321T333E31UF2OA32DV27D335E321U333L335B31MB333P2YC2U32I632L325B333V336J2OY32CZ317W336K317333422I6337J31IS316O337N3348335B32AK2AF334C316J334F334H316J32L6337R334M2OT334O2QS334T315631E533862RD2UC334W32L1334Z32RK323Z31XE31YB33222612OZ337I2OZ335R31F42JP2PP31KV31F2335S27C32TN335V31FC27931W3335Y31L732CZ24X339031832791P332D3398332M336A336R332Q2MU336E31C1336H2NL1N32I632DX2MS2412ZW3335332T325C2PL336V337127C31O332BB32J432KV31S531IS32LH334A32EI339N31NT2OS315M319G2B421P32DB31EI33AC332432DN32XP333432IL321X2NF32DJ33A4339X33AI333G27C31932UK32S2331733AN33A62PA2OS31AF33AA24X339K31QC31EI33B431DJ32LB336R32DC2ON325832392ON31PU33AV31EH32DR324L32KF2B432IW31XE33BN32V0336N2MT31B2339Q31O031XW29I33BP334532R432UY2B4338233AX321U33A7320331T0339U334U2VF2OE334X2PA324232L4325H31XE1X338L33C0332233B7335J31KO338P3337338R335Q338T33CQ24X1K33CS335W24X31VA339131NM28B33D131EI332F336932L5332P32EG32HY32PA31LS339I28B22Z339L33AH33AY339Q2MR32DZ32BH32DI32K732CS33DJ333R339Q31AN32DZ338433AZ27C2VO33B223533AD316O33E233AG32V12RN33DL31IU29331G4339M33DT32IL33DV33A533C533DY31QR32PC31IS33DH33B5316O33EN33B8337S32DZ337V33BE2MU33BG32KV32Q633C231MJ2B422Q332D33F333E6336D31IS32IG31XV2SI33F5337O317W33FC33BJ33C332I833C631H733C832K7338A32D12RL32K533CE32RK33CH32S723933CK27933FC33EP338N33CU31KY27922U33CS33CO31KX335M24X22W33CY338Y24X1S2OY335Z28B33GE332432C92RE331B31O5332A24X222332D33GQ339B33D9336C332R31ZT339H32OM336I22333C131BQ2QG2PE325C331N32C22PL32C232BH31QE2ON31MG33DJ2OS33BL24X220332D33HJ31DS2I6322Q32582OE337V2AF337X329X32M831PX2I63382337331SI33492Y331T033I133FN316J33CD334I32RK32AV31XE21T33FW24X221316Z31NJ32IE33D324X22D339L331V33AQ33GM33292T428B24S31RL33IT322B32I22ON3169336Q33A432OP32BB26D33GX3200318W32QK32DK334O31YF2IF2XD32IJ2IF2OK32I7324H31R232SD32L633FA33IS318E32PF317W33IV32IT33HO2SI337V32RT2MT32BM32IL2HN32I732Q233JJ31EH32KB31LY31W1323L32KF27V33JR33542VD33K627V3382328Y33AQ32LK31W631RU32KX33CA32JC33FP31AK32LP31HO32RV31XE24J319S331U33E7332729C2ZE33GO25Q31RL33L3318A27C26931RL33L833GJ321O26I331X32SE2MS33J2333K33J5332T32CI339N31QT2BA2ZE33J9339Y33KM310R33LG2SS2OK2RP32CG33JG31W133DX32QK31X12UK339C331733LH33AY33DD2ZZ27C33LX33J032V0329I2ON33K332UE33A4321Z2N732ZI32QK311L32DK334F32IZ33JA33F827C314U2OU32IL319F31XW28B33L532P4317W33N132JL33ES33JU33BC32R933EW32RJ32M633K133MG33M032DO317W31EX32KD33K832IO24X33N133KC33N42QC33KF336R33KH33AY33KJ315F32K02SS33I529333CD32JG32RK32KA32S726T31S933NM33KW332532BB26K33LE31XO32IJ333A33LJ33LP31QT33MS32QK315J32BX320A339D33FI33LJ316U2SM33IP31A9331833M6321O2QS33M933MO2U3328N33IY33NF333332RF333632AK33NT33EI33KJ31EA2UK32RN33LZ33MF2MU33MH32CB32OJ32BB33MM32JJ33MO31YF33GK31M433LR339Q31LO31QT2IM33MY31W133N133JP31MF33KE33N632OU2MU325833JW31PT33NB31UT33ND33PI33P5332D25E33Q333NK33PZ33L433QH33NS33OQ33KJ31GB33NX2IF33NZ33KP32LO33O233KS33O433KC25H319S32TB2NR27E29C32WH2MU32Y22552BR2IF31VX33R52MS24H32YE24X320F31QX32UQ31W4325832092XK32UW317W31Y133RL32I8336332SR2OH32HS330Y33LR31ZX32BH32O931NL317W31TJ32AK32M62RM33RT2MS322531NU2TJ33E732OA33J62MU33S132VX33S633RU2V7311L26E2KO2I429W25H2652L12M324125K2972KM25F25K2LU330J2AH322N31UD32TA32VY31UH32WC31VY29P32T931VS32UG2Z72DZ2HW2HY24Z2RD26B327M2LY25E25D27Y29K25V2662QC31QK32TN330V33LM31WB32TS31UF32TU32SR32TW33SG32TY33T7279'" } -- You can replace optional local c= input -- head to input and place your scripts inside --[[ Please do not modify otherwise the code may broke unless your an lua expert Remember to use lua minifier before put the script into container! https://mothereff.in/lua-minifier Update history: 1.0 = hard obfuscate 1.3 = normal obfuscate added 1.5 = grass mode added 1.6 = modified grass mode a little bit 2.0 = added optional, you can edit it, or left it to stay the same 2.03 = updated both hard and grass REMINDER: You cannot enable 2 or 3 options It will be broken if you did version 2.03 ]]-- --[[Example of output code: Normal: local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; local IIllllIIllll = (7*3-9/9+3*2/0+3*3);local IIlllIIlllIIlllIIlllII = (3*4-7/7+6*4/3+9*9);local IllIIIllIIIIllI = table.concat;function IllIIIIllIIIIIl(IIllllIIllll) function IIllllIIllll(IIllllIIllll) function IIllllIIllll(IllIllIllIllI) end end end;IllIIIIllIIIIIl(900283);function IllIlllIllIlllIlllIlllIllIlllIIIlll(IIlllIIlllIIlllIIlllII) function IIllllIIllll(IllIllIllIllI) local IIlllIIlllIIlllIIlllII = (9*0-7/5+3*1/3+8*2) end end;IllIlllIllIlllIlllIlllIllIlllIIIlll(9083);local IllIIllIIllIII = loadstring;local IlIlIlIlIlIlIlIlII = {'\45','\45','\47','\47','\32','\68','\101','\99','\111','\109','\112','\105','\108','\101','\100','\32','\67','\111','\100','\101','\46','\32','\10','\112','\114','\105','\110','\116','\40','\34','\104','\101','\108','\108','\111','\32','\119','\111','\114','\108','\100','\33','\34','\41','\10',}IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))() Hard: local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; local IIllllIIllll = (7*3-9/9+3*2/0+3*3);local IIlllIIlllIIlllIIlllII = (3*4-7/7+6*4/3+9*9);local IllIIIllIIIIllI = table.concat;function IllIIIIllIIIIIl(IIllllIIllll) function IIllllIIllll(IIllllIIllll) function IIllllIIllll(IllIllIllIllI) end end end;IllIIIIllIIIIIl(900283);function IllIlllIllIlllIlllIlllIllIlllIIIlll(IIlllIIlllIIlllIIlllII) function IIllllIIllll(IllIllIllIllI) local IIlllIIlllIIlllIIlllII = (9*0-7/5+3*1/3+8*2) end end;IllIlllIllIlllIlllIlllIllIlllIIIlll(9083);local IllIIllIIllIII = loadstring;local IilillliiILl = 'L25923U24X27924W27927C27C24Z25027C25D25F26026725H27F27C25H25S25V26525W24Z25327C25U26626725U25S27M27V27925E25H27J26725Y24Z25127W26125S25F28A27C26428126124Z24Z27C26625E27N27925X25W25V25G28928B27927P25E26224Z25427W26625F26625G25H27K27T28X24X25Z27K25X24Z25227C25Y25W25H25Z25W26725J27U27C25G26725D25S25U29127G27925D28026526529H29J29L27K25Z26628G2792A82AA25927C25E29L26429L28127Q27S24Z24Y27C25F25W25D2AO2AG25G25V28Q24X28I25H25U28K25527O28O28627K28928324X27K2AH25F27M29C25Y25E2AW24Z27B279162BL27D26A26P24Z27127C1124626A25I1622L23N1I2231626K1B26P26626A25O2121126U25I23Z22223724N21K1Q26Y23Z22Q2421C24X24R22926222T26322227021C24Q23N21W25X1M24R23W21224F21T2161J21S22J24523H23C26B21R24C26B26D24A1B1P26224I25P22226R1Q23326O25V26224E2AB24X23126B23N28L2BO2312BK27C22A2E72792362AU27922I25X25B2EA24X21U2EI22V2ED24X21026Q25L2DZ22V26B23W24L24Z26T27C22X26A24625223922V24S21P21L22V24B21124625324624K22B22R23N25126I21K1G25K22E23224F2691M25823326625I23I2501C25221424022D25J26I21624X23725R26B22026Y23221X23C23321I26S1K1M25O22926R23X23O26V23221J25225Z24S24Z2B427926M26F26S26B26A26W2722732AY2652FV25W28F29C26M26S27326F2BO21D1Y23123926O2BO27C21T23Y2DZ25I28D2BF27C25X25G2642AT29I2GY26M29F25W2ER25727C26M26M26725W25I2I32ER2I024X2I829V26025F28P2GX2IG2I22II2IK29R2I126025H2HA24Z2I62I125H2B628725Y2HN27923W2BR2BG25S2AJ2A527926926529W25W26W25X2BO2471U22Y1226O2IW27C2H825S25X2852J12JA24X26X25H25H25D26U29L2J324X23Z2BR21L27C26O2JD25E24D2412IT24125S25D25D25W28E25E24125H2HT2KM26125W2KP29625W2KL26625Z2KF25Y27Y25K24128D25J2KR25V25W25Z25S2A329O2412AJ2KC25S26725X2KP2KR2AH26725E28126027Y2KL27X25G2IK2B82KS29725Y2612LC2L12L62LU28E2KR2I325E25U27J25V2AM2L12I42M725G25U2602LN28824F2DZ25V25K2IU24X21Z2BO29C27D2MS2MT2MT24J27D2BO2MW24X27B28M2792MZ28M2AP27924127928M2N224X29C24Z21024X2N627C24J2622NC24X29Z24X2N82NL29C2BA2MZ27G2IF2MZ27V2IM2MZ29I2NN2MZ2B42932N32792932NH2MZ2I62IX24X2MZ25624X2OE2O524X2AF2NB27C2582MU2N727925B24X2O42OI27C2832OQ24M2N02OY25126827C2OX2N12NF2OQ2BO24H25G2OR2OT2OP2OU24624X2OQ28M27B2BL24T2ON27E2NF25A2NG2PD24X24H2NL27B2N62PK2792IF2MS2PW24X2PO2MU2Q02OK27D24G24X2Q72OQ2MV25V2OC24X2OM2792532142QD2422OY27B2P027C2QK27B24124L2QD2OS29C24J2QC24I2PF2OU2QI2QY2PE2PI2NC2P12792R32NO2QS2QY2OS2QA2R924X2QS2QU2NI2QC24K2Q127C2QR24X24N24X2IF2BA2RN2OX2IM2PS2QG2QI2OX24F2QL2R527C2S02QQ2QS2RU27C2Q72N32QC24P2QD2N723V24X24O2RQ27C2QY2OO2CQ2SI2792QS2SL24Q2SN24X2RK2SL2PK2IF2SU2SD24S2RO2RM27924V2PA2792OX2SL24U2SS2SC2MS2Q72T927A2Q62QD2T72MT28M2QY2RW2MS2MZ2QS2SH2OH2RK24R2NI2792RP2SR2MS2QY2RP2N927D25Y2RF2PR2MU24J25C2ST24X2Q02U72T12TT2N32U82OX2TX27923T2U42TI2OK2U32RK2TM27D2UC2RP2T02UF24X2OX2UE2OC2U82SC2UI24X2UK2RK2TB24X2UN2T12UQ2NI2UG24X2UU2UZ24X2SC2UY2UC2SH2V22UK2RP2TQ2V72U22UW2U52MV2V024X2T42UV2SH2VI2U82TT2VL2VR2UY2V82SC2VA2VX2SG2VB2SM2VZ24X2SR2W22V127E2VQ2SH2W72VF2TT2VE2UC2SR2WC2PK2W22SH2Q42VQ2TT2WK2WO2W92UV2PK2WC2T02W22WM2WH29J2WD2VS2TN2U82PK2TE2VF2T02WC2T42W22SR2VW2VP2X72PK2WX2U82T02NP2VF2T42WC2T92W22XC2X62792U32T02XO2VV24X2XD2UC2T92WC2N82W22XQ2XY24X2U32T42Y22T92XR2UC2N82WC2402X827C2UK2T42YM2U12X72T92Y22N82VO2UC2YM2WC2432YN2UJ2Y424X2Z12YS2XZ2NO2X92UR2U82YM2YR2VF2Z12WC2QK2W22N82QK2Z72YD24X2YM2Y22Z12ZE2UC2QK2WC2452Z22V32ZO24X2ZW2ZM2U32Z12Y22QK2YX2U82ZW2WC2442ZX2UK2Z1310B310224X2QK2Y22ZW310724X310B2WC247310C310H24X310P310G2ZW2Y2310B2WN2U8310P2WC2PE2W22ZW2PE310G310B2Y2310P310L2PE2WC249310Q310B311D310G310P2Y22PE2Z62VF311D2WC248310Q310P311P310G2PE2Y2311D2ZL2VF311P2WC24B310Q2PE3121310G311D2Y2311P311X2UC31212WC24A310Q311D312D310G311P2Y23121310L312D2WC24D310Q311P312O310G31212Y2312D311L2UC312O2WC24C310Q31213130310G312D2Y2312O31012VF31302WC2S02W2312D2S0310G312O2Y2313031292U82S02WC24E310Q312O313O310G31302Y22S0313K24X313O2WC23L310Q31303140310G2S02Y2313O310L31402WC23K310Q2S0314B310G313O2Y23140310L314B2WC23N310Q313O314M310G31402Y2314B310F2VF314M2WC23M2ZX1O24X3140314Y2MU25S2SD27C2HN26L24X2SK2U62QC2QS310T2RE2RK2IF31152Z82RP2SP2MT2BT2RK2NB2V82RP2Y22OX2UB2VU2WC2VK27D2VM2WZ2XL24X2532PS2RK2312OY2RP2QN27931672BL314M2QY2K32OC2RJ2QE2R02U922B2S1316A24X316M27B2QW2U9311G31632T42RK22G2OY279316O316Y27B2FD2U927G27B29Z2Q02AF2Q327C2WK2UA27C2OS2PZ2OL2ON2UB2U621M2U92NB2RN2RK2RV316K2RK22M316N2R624X317U2S52U92IM2S9316V2U91Z24W2MQ317W318531732T42QY26X318627C316O318D317Z317Q2S82NI2632T12Q52VR2WX2792SC2Y52792VY2TU2SM2V22T62SM2MU311D2SY310G315S2U62VC2YI315W2WA315Y2YO2T12VO2NB31642U925A318E3169317W319I316R316I319F316W2PF318E3170317W25B318E316S315P27D28M31952MV318Z2YX318R31902SD319B27D2VN2XY24126S2T12U0315A2WA2SC311S27931502RP2V62MS21F2U92MX318F317W2N02QM319U319W2U82RK312427926W2T131822ZB2VR31B025121B2U926V318E2RN2SH318127D1H2SM318231AN2792SR318Q317E318T2VD31A62MZ2XH2MT2XJ2ON311D2VO310G2WW31962X83198317E2X2310Q2X52Z7319G2SH23K318E2TT316O31CB317Z31BE318K2N92NF2TT2BA24X23Y2X831BN2XX2OH2XF318W31BT2MS31BV3191316131BZ2ZA2WA2SR31C32X12WA2X3315Z2SM2VE319F2PS2SH31BB27B31CD317W31DE316H2W9319P2W923Y319S2S227931DN319N31DK319Z2SM31BN2SR31A431C4318W31D72MS31C7316231AC2WB2SJ2WA2PK31AJ24X31502TT2Q031AO31CZ316Z31DP24X31CF31EI31DR31EI31DI2512U327922622628M2QH27C26Q24W2AP31ES31EP27C31ES31EU2QI27926S31EY24X31ES25321N2SJ318E31F02I62RK24I318E316O31892VF31AZ27D31B22RP31B42WA2OX31B731B92RK1W31BC2TP24X317R2SA2SM2OK2BT2SH315Q2RM31FZ2VO312G2U131C031A22X82ZS27931D531CS2ZX27931E331DB2W925Z31CC31EI31GP31DS31G62OU2T42SH25W31DO316O31GY31GT31622VP31GD2TN31BL31612MZ31GI2SZ31GK31D931AB31AD2TT2UY315B2UC31E927D31EC317E2MU31AP31BY31EH316O26E31FJ317W31H12RE31CH2792UQ31HG2Q827C31AN31G53162317O31G927C31GB31H431D12OH2SR31GG31DZ31GJ318Y31HD31C831DC24X25P31GQ316O31IN31CG31G0317C2PM2SM2PY31I531G72N731I827931IA28M31H52UR31H731IF31HA2MZ31E127D31GM2OU31IL31FX31DF31EI31JF31DJ31GU2QG31GW24X21N31GZ317W31JO31H22OK31J331IC2SD31DX318W31J827931JA27C31JC2N731HF31A631HI2XB24X31EA31HM31EE27D31HP2MS318727C31IQ31EI31JR31JH31FJ31EQ31F931ET316331F524X21R31F831F031KN31F331KQ27C1X31KU22631FB27C27131FE22625131FG24X31L5318I2SS312R31832RK1U31JP27C31LH316R31AY24X31B024X31FP31I22VT31B6318F31FV24X1V319W2QC2SH2Q23163311B31IS2PU31GH27C2PY27D2Q031FR27C2Q031BK27C25Q31DT31GL31GV2W91S31LI27931ML31DS2SR31JT317E31BN2T031DY2XT318W2XV2MT31CR31E431AD2PK2Q031K72Y331KA317E2XK31EF318Y31KG2791G31HU27C1T319S26E2VG2PL31L82U921431AX31AG2BO31742RG2OY2N231N4317J27C315M27D31742RK2I62R431HN31562MS312131AF2MU31212TI31OA31NK2ON2NE2W92OG279311Z2MS2BA2RW2TT3133316131ON24X313F31OQ31MI313R31OU2SM314331OX2TT314E31P024X314P31EG31GK2P731H731P531DY2PK2MZ27D2T031O92MT31CV31NX2XK2MY2QC31PC2VQ2T031OC2VQ31PI2MS25H31N831572RI317E31PD2ZN2T031ME2Z831PS27D31PU2PK31PK2PQ2PK2AF27B2O42Q031M831MC318W31MZ27C2IM317H27931MB31M62TV31NX31MI317B2QG31QQ2QZ31QS2U42MU2Y031O52MS21531BQ2BO2HN31NJ315B2MT2472SY22H318E31AV27C31RB31DS2QY31DL2QY22E31MM24X31RK31RG31E42QS2QS31PD31532NO31AD31RQ31E72UV2RP31N72QS31PG27C31AP31R731HR317W23031NF27931RN2OC317M2N131PX2QY23P31G831AG315B23O27C2472N82QY21W318E23R31EI31SQ31RO23Q31PX2QS31SH31K42U4315M2UK31IZ2T131PD23S27D314M2P32ON31502S631BW31AG31DU27C31R2316F31PW27C311L316G2QF31EH24Z2XK26S25L25U25G2AH2LC2LJ2IJ2KC2KN2602KL31U226724625H24126926A26C2S02OK21D2PL31TL31TK2PL315Q29C2IA25L2HU2792B228E24Z31TO31EH2ON2N431UT2792NH31NL2NL2MT2MR2B431732PS2NX317V31QJ316Z25I2NM31H32OU26R2VP31762VP316O31VG24X2782NA2ON31VA31VM2MU31TM31UF31622K32HP2JV29K29M29O25J316327D27331VS31W42Z92MU316G31W531UW31W731VS29C31VU31DN2ON316G2BR2Q026W26424125F29T2672LU29731U72KW2KD28S25S2KL2KQ2652AT313824X31UE31UF2UC2PH2WA2AP2NB25B2132VP2QS31NC2U427B31XA31XC31V72SO2OY24127031V027C2NH31XM31VB2BO2NH25325U2NL31QB31VB316O31XY24X31SH2AP2NH2OK2G631CM31XO24125T31W12BA31UY2PX31EH2NN2NP29I2IF31XQ2U12NB31YE2OY31QF2MT31Y8317027D2AP31732NH31TA31RD318Z2BL31KN316G31XH28M2Z131XE31Z62NO31XN2MR2PP2OP31XB28M2T02QM31EI31ZG27931Y331ZC31H32G62NN31YT2N725L31VB2NN31XQ312O31VP31ZM2ZN27931ZP31AS2P231V92PP318O27931VR31UF2BA2EN2BI2AX29C31UP25F31W82J322926626P31WE24Z31OW26X2KR25X2602LH2IT240241320P2412ML29V25E2AH2LH2KN2KR29O2M725K25D2IU2LH27X2LL27P27L25E24F24Y31OW2K431W931YO31V12PL2NP28B31WD2MT320127D2NP27G2NN318O31YS318W29I2O82792B42QV2O631VB31ZQ29I2PS31Z12OF32272MT2U32AF2OB2MS2BT2OE31IY27925W31W12OB31OI24X322N27V31OI2OB31NM29I2OE322B29I32062UC2B431ZP31B2317G2XA24X2I62NN31B831IS311P2QQ21R2OT31OI31ZP21I2OT317A31EH2NP2AF323L321T2OM31W82PC31ZB2MS31M12PL2PS322Q2MT2Q7323Z2MS2OQ31822OK2TT2OQ2BA2RD24X26B2RL323U27D2PS31YQ318K323L2U62PB2ON2PO31PD32462RL2BA323W2UK2OM31M1324P2OM2BA31US322N2AP31OI31TO31NM2B42RP2BL21E31IS32062ZN2O731UF2O32ON314031QK2MT32082PL2OB320H2MT31VV29C25H321827T2NN23926V23K24Q22R2K32BQ2BS2BU2BW2BY2C02C22C42C62C82CA2CC2CE2CG2CI2CK2CM2CO2CQ2CS2CU2CW2CY2D02D22D42D62D82DA2DC2DE2DG2DI2DK2DM2DO2DQ2DS2DU2DW2DY31UK2I428227C23626A24024V22W21M2IR2BB2LL2HA27M2OS2642602M72FV25S2L424X26G27D31X331UF3258323S31BQ325A27931AP2J32HN3121327X2T0327Z24X315532822WA31X627C31B231YV31C128B2NB323B28M314031DS27V31UY2TT29I2BO31ZP2BT27V322L24X3258328Q31C132242WA2932O12U82I631CM2UK29I2OB31GN27V312D27B29I316O329C31DJ27V2PY328P31YG27D2782B4325H319T27C311D31DS2OE31UY322F32382ON322J31I627D325831Y132372OM2NY2U82OQ3293324Q31D82AF324V31JD322C329S2OT316O32AG328W322C32062RN2OE31OI317G32A231ZY2VQ2OM322H31Q5322C31TO31NR31VE27V2SH31SE316O32B231EI328L2793258328U2MU2RN27V2BA32AQ2SI321M2SM31V327C31ZP31PU31V62TF31702I628M322Y31M231VT31ZC1M318F2ON32BW2ZM27D32BZ31WA32BT328F31SE24X32C2324E32C731UH31B528B2HN31B231VJ323732BA317031B928B31NJ31DS2B4328O2PA2BO31IW32592YC3258293316G2UC2I62QV2U82OE32A92AF32962PA323L31GN2B426Z2OY293316O32DA322B2B4325A2TT32CW31M727D2K732DG31UH31HS2OY316S32CO31JB32CQ32DK31L432CT2ZM32CV32C332CY31IS2UV32D22WA32D431D829332D732AE2B432CM2PA32DP32DF32AS31K232DU31YF27C32DM32BU32BP2NL23X316Z325J31TG324L2GW2B52JT2B8325M2MS325O27C29E2LG2AY27I27K27M2XD23927223R25122R23H26A22O21A2D622S24C25725E24L22023624724O26I22Y2FM22E22X23Y26M1C26E23J325Z2BR2BT2792BV2BX2BZ2C12C32C52C72C92CB2CD2CF2CH2CJ2CL2CN2CP2CR2CT2CV2CX2CZ2D12D32D52D72D92DB2DD2DF2DH2DJ2DL2DN2DP2DR2DT2DV2DX2EN2AR25D2HH2HJ2HL2EI162EN23Q32HH24W26Q327T31VS316S31O42Z832872BT32C6316231X531H3325832BH31B12PP321M2UC28B2NH328J31CN316Z32B932C32412EY32BD32BX2MS324H27D329P2MT329O32BK31YR32E231622532T427V31CO31XE32IQ329H322D24X21A2SI3231322331W12OH2932NV2792I6329P329831HE2SI2IF2OS2UC293322H315029I323631S332J031UH316S27V31ZP32IW3230324K31IS31OI2MZ32J2318W32J52MT32J72Z731E531YJ317F3291329X27C32JF2T52MT31AP31Y831XE2Q7328M322D32IN31W123Z31S627C32KH32KD32JN32IX32JQ2B42NS322632J3329X32J632K431N132J932K22UV32JD31HL2SI32JH328032JJ32BO32IT32KM32JP31GE2B432JS32KR32JV32IL32DK32992RM31AD32K1322632KZ32KV31EB32L22ON32K931KF3202279310P2BL32ER318F32BQ32EI3159328731VO31VC31UG32L62ON323L32EY27D32F028Y325R327F3279327B327D32G2326132G5326332G8326632GB326932GE326C32GH326F32GK326I32GN326L32GQ326O32GT326R32GW326U32GZ326X32H2327032H5327332F428732F727C32F932FB32FD32FF32FH24F32FJ32FL32FN32FP32FR32FT2FN32FW32FY32G032H82AS32HB2HK2JN2BO32HF2NH320C24W31AD2I732HM2TF2K3328731YM32JQ31X832IC27B32HK31DS27G31UY32I72PL31CL32JJ2MR2BT27G328V32I732CX2U8329E2WA323332K332D527V2OS31GN27G32OF31W1316O32P332AK321T32DT321W32IC31632TM32P327G32P532DQ2QC2NU27D32IW27V32CX31YF2NY32IZ2O1322631YS32OZ32J832IB32LL2VF2B432JE31W132IG24X31AP320131PL31VB2PY32PL32E031YF32LC31IS32PR2PA32PT32K7317O31AD32PW32K7323232LN315032BN32K832IU32KI2792RK32OG2SS32KF27G31VE31XE32QZ31DJ32PJ27C32Q932PN2SI32PP32QD318W29332QG32P032LI31YC32KY32PY32QN32Q132LQ32QR32Q632R327932R532JQ322X318W32OW32J132L531QT32RD31T032QK32JB2U832PZ32L132QP31EF32Q532LT31LN32EQ32CB32LY2OY32PM320732SA2MT2BO327F25L2A12L926531H3327U2PL32LX32SG27E31TR31TT31TV2KR2AJ24125E31TZ2KP31U22KD25E31U531U731U931UB32SN31W432SQ2MS31UJ2HV2HX2AT2OS273327M320Q32TF32LF26731W931UF2XR32LS32LS327X31ZX31WB32SH31OF32CB32TB32ES320M2NN28S28U2U32PY25O32TO321O31WG32U832TR31UF31R427D32TZ32PB32NA32F6320M2NH32H932NW2HL31QV27932SO315C2S131JL2OY32A331Y032PH32UT32B832M431SI31ZX32QI2VP31YN2WA321Q32L128M32C9328132UC316O2R432UX32LW32SF32UC29228H327M29625I327P322N2MR32UR2MU31ZJ2PL32B732SP32VI27D31LE32EU2GY2H02H22H42H62NN2H825I2HA31WH31VW2A72672A92DZ2AD320M31OI31TU25F2AR27L26529A2K324L2BR31OI32WO2IA28S32F225W2JH31OF323L2AH25H2AJ27P27P27R325S27H32NB2K324P2BR32UL32NV27C2HI32NX2DZ2I42IT2K324T320L2MT24132XO2MS24332XR27D24532XU31SM32XX27924932XZ31LN2J627C2HS2812K324D32Y224F32Y223L32Y428R32TF32F42A22652K323K32Y223N32Y223M2BR2OS2862JE2M929X2AY2B02B22K323P32Y223O32Y223R32Y223Q32Y223T32Y223S32Y223V32Y223U32Y223X2BR26V27C26D2KQ24126U2AR28124127125G25S24127225V25Z31TV28029927Y32I932TF2852HA24126V2IJ25W23V31XM2L126V25S2602652LS2KR2IZ33022HY24132HH32ZX2M628129531X22BO21J32UB32JQ32HO2WH328732HX2NP31Y42YC31YT327X32OC32DY2PT32BB2QS32V831UX32AE2AP323R2NQ317W331F31P432VI31742NH31M531R032BY331327C32C231W83258328H33192NQ32PB31EV28B32B531YZ2W932572NL32AM331A31XO2NN32KF28B22Y32QS24X332C317331KR26U31XJ24X332I31LL2NL31CM325832OH2ON32CF32QR2UV32QK323B28B31AD32EF32BH2RP32BJ32JZ2QS32II32EJ2791I2PA32AM32262RH2MS2I632HX329X2OB31QF32BS32XP27932AO31V82MS29331OI31I7329X2OS2RC2T92I6332Y329X316O333X253269329X333X3224317W333X316S333M27C32AR32C932582OM32P824X31PU2OE32AY31PX2OE324J32AR316G2RN323O317I31T0334Q2PC2UV2OQ323W31502AF324A31KD322C31AR329Q279314Y33242OE321Z32AN33522ZA31R2333J332D2783322333X31F131ER31KP31EV27931VE31EZ31L731KW335L31KR2EY335P31L32OO27B31FF2NL2N8332225D32SC2XK336331XE33662VF28B332O31VB32BH332S32P82UC332V32CK24X266316Z2U332DS2MU333131TP32A1333932BB2ZW2932OS321T333E31UF2OA32DV27D335E321U333L335B31MB333P2YC2U32I632L325B333V336J2OY32CZ317W336K317333422I6337J31IS316O337N3348335B32AK2AF334C316J334F334H316J32L6337R334M2OT334O2QS334T315631E533862RD2UC334W32L1334Z32RK323Z31XE31YB33222612OZ337I2OZ335R31F42JP2PP31KV31F2335S27C32TN335V31FC27931W3335Y31L732CZ24X339031832791P332D3398332M336A336R332Q2MU336E31C1336H2NL1N32I632DX2MS2412ZW3335332T325C2PL336V337127C31O332BB32J432KV31S531IS32LH334A32EI339N31NT2OS315M319G2B421P32DB31EI33AC332432DN32XP333432IL321X2NF32DJ33A4339X33AI333G27C31932UK32S2331733AN33A62PA2OS31AF33AA24X339K31QC31EI33B431DJ32LB336R32DC2ON325832392ON31PU33AV31EH32DR324L32KF2B432IW31XE33BN32V0336N2MT31B2339Q31O031XW29I33BP334532R432UY2B4338233AX321U33A7320331T0339U334U2VF2OE334X2PA324232L4325H31XE1X338L33C0332233B7335J31KO338P3337338R335Q338T33CQ24X1K33CS335W24X31VA339131NM28B33D131EI332F336932L5332P32EG32HY32PA31LS339I28B22Z339L33AH33AY339Q2MR32DZ32BH32DI32K732CS33DJ333R339Q31AN32DZ338433AZ27C2VO33B223533AD316O33E233AG32V12RN33DL31IU29331G4339M33DT32IL33DV33A533C533DY31QR32PC31IS33DH33B5316O33EN33B8337S32DZ337V33BE2MU33BG32KV32Q633C231MJ2B422Q332D33F333E6336D31IS32IG31XV2SI33F5337O317W33FC33BJ33C332I833C631H733C832K7338A32D12RL32K533CE32RK33CH32S723933CK27933FC33EP338N33CU31KY27922U33CS33CO31KX335M24X22W33CY338Y24X1S2OY335Z28B33GE332432C92RE331B31O5332A24X222332D33GQ339B33D9336C332R31ZT339H32OM336I22333C131BQ2QG2PE325C331N32C22PL32C232BH31QE2ON31MG33DJ2OS33BL24X220332D33HJ31DS2I6322Q32582OE337V2AF337X329X32M831PX2I63382337331SI33492Y331T033I133FN316J33CD334I32RK32AV31XE21T33FW24X221316Z31NJ32IE33D324X22D339L331V33AQ33GM33292T428B24S31RL33IT322B32I22ON3169336Q33A432OP32BB26D33GX3200318W32QK32DK334O31YF2IF2XD32IJ2IF2OK32I7324H31R232SD32L633FA33IS318E32PF317W33IV32IT33HO2SI337V32RT2MT32BM32IL2HN32I732Q233JJ31EH32KB31LY31W1323L32KF27V33JR33542VD33K627V3382328Y33AQ32LK31W631RU32KX33CA32JC33FP31AK32LP31HO32RV31XE24J319S331U33E7332729C2ZE33GO25Q31RL33L3318A27C26931RL33L833GJ321O26I331X32SE2MS33J2333K33J5332T32CI339N31QT2BA2ZE33J9339Y33KM310R33LG2SS2OK2RP32CG33JG31W133DX32QK31X12UK339C331733LH33AY33DD2ZZ27C33LX33J032V0329I2ON33K332UE33A4321Z2N732ZI32QK311L32DK334F32IZ33JA33F827C314U2OU32IL319F31XW28B33L532P4317W33N132JL33ES33JU33BC32R933EW32RJ32M633K133MG33M032DO317W31EX32KD33K832IO24X33N133KC33N42QC33KF336R33KH33AY33KJ315F32K02SS33I529333CD32JG32RK32KA32S726T31S933NM33KW332532BB26K33LE31XO32IJ333A33LJ33LP31QT33MS32QK315J32BX320A339D33FI33LJ316U2SM33IP31A9331833M6321O2QS33M933MO2U3328N33IY33NF333332RF333632AK33NT33EI33KJ31EA2UK32RN33LZ33MF2MU33MH32CB32OJ32BB33MM32JJ33MO31YF33GK31M433LR339Q31LO31QT2IM33MY31W133N133JP31MF33KE33N632OU2MU325833JW31PT33NB31UT33ND33PI33P5332D25E33Q333NK33PZ33L433QH33NS33OQ33KJ31GB33NX2IF33NZ33KP32LO33O233KS33O433KC25H319S32TB2NR27E29C32WH2MU32Y22552BR2IF31VX33R52MS24H32YE24X320F31QX32UQ31W4325832092XK32UW317W31Y133RL32I8336332SR2OH32HS330Y33LR31ZX32BH32O931NL317W31TJ32AK32M62RM33RT2MS322531NU2TJ33E732OA33J62MU33S132VX33S633RU2V7311L26E2KO2I429W25H2652L12M324125K2972KM25F25K2LU330J2AH322N31UD32TA32VY31UH32WC31VY29P32T931VS32UG2Z72DZ2HW2HY24Z2RD26B327M2LY25E25D27Y29K25V2662QC31QK32TN330V33LM31WB32TS31UF32TU32SR32TW33SG32TY33T7279'local IlIlIlIlIlIlIlIlII = {'\45','\45','\47','\47','\32','\68','\101','\99','\111','\109','\112','\105','\108','\101','\100','\32','\67','\111','\100','\101','\46','\32','\10','\112','\114','\105','\110','\116','\40','\34','\104','\101','\108','\108','\111','\32','\119','\111','\114','\108','\100','\33','\34','\41','\10',}IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))()local a=100;local b=0;local c={}local d="dont skid and go touch grass.";local e="get out";local f="go touch grass";local g="are you crazy?";local h="..";local i="bruh";local j=g.lookupify;local k=d.AstKind;local unpack=unpack or table.unpack;function c:new()local l={blocks={},registers={},activeBlock=nil,registersForVar={},usedRegisters=0,maxUsedRegister=0,registerVars={},VAR_REGISTER=newproxy(false),RETURN_ALL=newproxy(false),POS_REGISTER=newproxy(false),RETURN_REGISTER=newproxy(false),UPVALUE=newproxy(false),BIN_OPS=j{k.LessThanExpression,k.GreaterThanExpression,k.LessThanOrEqualsExpression,k.GreaterThanOrEqualsExpression,k.NotEqualsExpression,k.EqualsExpression,k.StrCatExpression,k.AddExpression,k.SubExpression,k.MulExpression,k.DivExpression,k.ModExpression,k.PowExpression}}setmetatable(l,self)self.__index=self;return l end;function c:createBlock()local m;repeat m=math.random(0,2^24)until not self.usedBlockIds[m]local n=e:new(self.containerFuncScope)local o={id=m,statements={},scope=n,advanceToNextBlock=true}table.insert(self.blocks,o)return o end;function c:setActiveBlock(o)self.activeBlock=o end;function c:addStatement(p,q,r,s)if self.activeBlock.advanceToNextBlock then table.insert(self.activeBlock.statements,{statement=p,writes=j(q),reads=j(r),usesUpvals=s or false})end end;function c:compile(t)self.blocks={}self.registers={}self.activeBlock=nil;self.registersForVar={}self.scopeFunctionDepths={}self.maxUsedRegister=0;self.usedRegisters=0;self.registerVars={}self.usedBlockIds={}self.upvalVars={}self.registerUsageStack={}self.upvalsProxyLenReturn=math.random(-2^22,2^22)local u=e:newGlobal()local v=e:new(u,nil)local w,x=u:resolve("getfenv")local w,y=u:resolve("table")local w,z=u:resolve("unpack")local w,A=u:resolve("_ENV")local w,B=u:resolve("newproxy")local w,C=u:resolve("setmetatable")local w,D=u:resolve("getmetatable")local w,E=u:resolve("select")v:addReferenceToHigherScope(u,x,2)v:addReferenceToHigherScope(u,y)v:addReferenceToHigherScope(u,z)v:addReferenceToHigherScope(u,A)v:addReferenceToHigherScope(u,B)v:addReferenceToHigherScope(u,C)v:addReferenceToHigherScope(u,D)self.scope=e:new(v)self.envVar=self.scope:addVariable()self.containerFuncVar=self.scope:addVariable()self.unpackVar=self.scope:addVariable()self.newproxyVar=self.scope:addVariable()self.setmetatableVar=self.scope:addVariable()self.getmetatableVar=self.scope:addVariable()self.selectVar=self.scope:addVariable()local F=self.scope:addVariable()self.containerFuncScope=e:new(self.scope)self.whileScope=e:new(self.containerFuncScope)self.posVar=self.containerFuncScope:addVariable()self.argsVar=self.containerFuncScope:addVariable()self.currentUpvaluesVar=self.containerFuncScope:addVariable()self.detectGcCollectVar=self.containerFuncScope:addVariable()self.returnVar=self.containerFuncScope:addVariable()self.upvaluesTable=self.scope:addVariable()self.upvaluesReferenceCountsTable=self.scope:addVariable()self.allocUpvalFunction=self.scope:addVariable()self.currentUpvalId=self.scope:addVariable()self.upvaluesProxyFunctionVar=self.scope:addVariable()self.upvaluesGcFunctionVar=self.scope:addVariable()self.freeUpvalueFunc=self.scope:addVariable()self.createClosureVars={}self.createVarargClosureVar=self.scope:addVariable()local G=e:new(self.scope)local H=G:addVariable()local I=G:addVariable()local J=G:addVariable()local K=G:addVariable()local L=e:new(G)local M={}local N={}self.getUpvalueId=function(self,n,m)local O;local P=self.scopeFunctionDepths[n]if P==0 then if N[m]then return N[m]end;O=d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})else f:error("Unresolved Upvalue, this error should not occur!")end;table.insert(M,d.TableEntry(O))local Q=#M;N[m]=Q;return Q end;L:addReferenceToHigherScope(self.scope,self.containerFuncVar)L:addReferenceToHigherScope(G,H)L:addReferenceToHigherScope(G,I,1)G:addReferenceToHigherScope(self.scope,self.upvaluesProxyFunctionVar)L:addReferenceToHigherScope(G,J)self:compileTopNode(t)local R={{var=d.AssignmentVariable(self.scope,self.containerFuncVar),val=d.FunctionLiteralExpression({d.VariableExpression(self.containerFuncScope,self.posVar),d.VariableExpression(self.containerFuncScope,self.argsVar),d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.VariableExpression(self.containerFuncScope,self.detectGcCollectVar)},self:emitContainerFuncBody())},{var=d.AssignmentVariable(self.scope,self.createVarargClosureVar),val=d.FunctionLiteralExpression({d.VariableExpression(G,H),d.VariableExpression(G,I)},d.Block({d.LocalVariableDeclaration(G,{J},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.upvaluesProxyFunctionVar),{d.VariableExpression(G,I)})}),d.LocalVariableDeclaration(G,{K},{d.FunctionLiteralExpression({d.VarargExpression()},d.Block({d.ReturnStatement{d.FunctionCallExpression(d.VariableExpression(self.scope,self.containerFuncVar),{d.VariableExpression(G,H),d.TableConstructorExpression({d.TableEntry(d.VarargExpression())}),d.VariableExpression(G,I),d.VariableExpression(G,J)})}},L))}),d.ReturnStatement{d.VariableExpression(G,K)}},G))},{var=d.AssignmentVariable(self.scope,self.upvaluesTable),val=d.TableConstructorExpression({})},{var=d.AssignmentVariable(self.scope,self.upvaluesReferenceCountsTable),val=d.TableConstructorExpression({})},{var=d.AssignmentVariable(self.scope,self.allocUpvalFunction),val=self:createAllocUpvalFunction()},{var=d.AssignmentVariable(self.scope,self.currentUpvalId),val=d.NumberExpression(0)},{var=d.AssignmentVariable(self.scope,self.upvaluesProxyFunctionVar),val=self:createUpvaluesProxyFunc()},{var=d.AssignmentVariable(self.scope,self.upvaluesGcFunctionVar),val=self:createUpvaluesGcFunc()},{var=d.AssignmentVariable(self.scope,self.freeUpvalueFunc),val=self:createFreeUpvalueFunc()}}local S={d.VariableExpression(self.scope,self.containerFuncVar),d.VariableExpression(self.scope,self.createVarargClosureVar),d.VariableExpression(self.scope,self.upvaluesTable),d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(self.scope,self.allocUpvalFunction),d.VariableExpression(self.scope,self.currentUpvalId),d.VariableExpression(self.scope,self.upvaluesProxyFunctionVar),d.VariableExpression(self.scope,self.upvaluesGcFunctionVar),d.VariableExpression(self.scope,self.freeUpvalueFunc)}for T,U in pairs(self.createClosureVars)do table.insert(R,U)table.insert(S,d.VariableExpression(U.var.scope,U.var.id))end;g.shuffle(R)local V,W={},{}for T,X in ipairs(R)do V[T]=X.var;W[T]=X.val end;local Y=d.FunctionLiteralExpression({d.VariableExpression(self.scope,self.envVar),d.VariableExpression(self.scope,self.unpackVar),d.VariableExpression(self.scope,self.newproxyVar),d.VariableExpression(self.scope,self.setmetatableVar),d.VariableExpression(self.scope,self.getmetatableVar),d.VariableExpression(self.scope,self.selectVar),d.VariableExpression(self.scope,F),unpack(g.shuffle(S))},d.Block({d.AssignmentStatement(V,W),d.ReturnStatement{d.FunctionCallExpression(d.FunctionCallExpression(d.VariableExpression(self.scope,self.createVarargClosureVar),{d.NumberExpression(self.startBlockId),d.TableConstructorExpression(M)}),{d.FunctionCallExpression(d.VariableExpression(self.scope,self.unpackVar),{d.VariableExpression(self.scope,F)})})}},self.scope))return d.TopNode(d.Block({d.ReturnStatement{d.FunctionCallExpression(Y,{d.OrExpression(d.AndExpression(d.VariableExpression(u,x),d.FunctionCallExpression(d.VariableExpression(u,x),{})),d.VariableExpression(u,A)),d.OrExpression(d.VariableExpression(u,z),d.IndexExpression(d.VariableExpression(u,y),d.StringExpression("unpack"))),d.VariableExpression(u,B),d.VariableExpression(u,C),d.VariableExpression(u,D),d.VariableExpression(u,E),d.TableConstructorExpression({d.TableEntry(d.VarargExpression())})})}},v),u)end;function c:getCreateClosureVar(Z)if not self.createClosureVars[Z]then local _=d.AssignmentVariable(self.scope,self.scope:addVariable())local G=e:new(self.scope)local L=e:new(G)local H=G:addVariable()local I=G:addVariable()local J=G:addVariable()local K=G:addVariable()L:addReferenceToHigherScope(self.scope,self.containerFuncVar)L:addReferenceToHigherScope(G,H)L:addReferenceToHigherScope(G,I,1)G:addReferenceToHigherScope(self.scope,self.upvaluesProxyFunctionVar)L:addReferenceToHigherScope(G,J)local a0,a1={},{}for T=1,Z do local a2=L:addVariable()a0[T]=d.VariableExpression(L,a2)a1[T]=d.TableEntry(d.VariableExpression(L,a2))end;local a3=d.FunctionLiteralExpression({d.VariableExpression(G,H),d.VariableExpression(G,I)},d.Block({d.LocalVariableDeclaration(G,{J},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.upvaluesProxyFunctionVar),{d.VariableExpression(G,I)})}),d.LocalVariableDeclaration(G,{K},{d.FunctionLiteralExpression(a0,d.Block({d.ReturnStatement{d.FunctionCallExpression(d.VariableExpression(self.scope,self.containerFuncVar),{d.VariableExpression(G,H),d.TableConstructorExpression(a1),d.VariableExpression(G,I),d.VariableExpression(G,J)})}},L))}),d.ReturnStatement{d.VariableExpression(G,K)}},G))self.createClosureVars[Z]={var=_,val=a3}end;local _=self.createClosureVars[Z].var;return _.scope,_.id end;function c:pushRegisterUsageInfo()table.insert(self.registerUsageStack,{usedRegisters=self.usedRegisters,registers=self.registers})self.usedRegisters=0;self.registers={}end;function c:popRegisterUsageInfo()local a4=table.remove(self.registerUsageStack)self.usedRegisters=a4.usedRegisters;self.registers=a4.registers end;function c:createUpvaluesGcFunc()local n=e:new(self.scope)local a5=n:addVariable()local a6=n:addVariable()local a7=n:addVariable()local a8=e:new(n)a8:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,3)a8:addReferenceToHigherScope(n,a7,3)a8:addReferenceToHigherScope(n,a6,3)local a9=e:new(a8)a9:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,1)a9:addReferenceToHigherScope(self.scope,self.upvaluesTable,1)return d.FunctionLiteralExpression({d.VariableExpression(n,a5)},d.Block({d.LocalVariableDeclaration(n,{a6,a7},{d.NumberExpression(1),d.IndexExpression(d.VariableExpression(n,a5),d.NumberExpression(1))}),d.WhileStatement(d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.AssignmentVariable(n,a6)},{d.SubExpression(d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.NumberExpression(1)),d.AddExpression(unpack(g.shuffle{d.VariableExpression(n,a6),d.NumberExpression(1)}))}),d.IfStatement(d.EqualsExpression(unpack(g.shuffle{d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.NumberExpression(0)})),d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),d.VariableExpression(n,a7))},{d.NilExpression(),d.NilExpression()})},a9),{},nil),d.AssignmentStatement({d.AssignmentVariable(n,a7)},{d.IndexExpression(d.VariableExpression(n,a5),d.VariableExpression(n,a6))})},a8),d.VariableExpression(n,a7),n)},n))end;function c:createFreeUpvalueFunc()local n=e:new(self.scope)local F=n:addVariable()local a9=e:new(n)a9:addReferenceToHigherScope(n,F,3)n:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,2)return d.FunctionLiteralExpression({d.VariableExpression(n,F)},d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F))},{d.SubExpression(d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F)),d.NumberExpression(1))}),d.IfStatement(d.EqualsExpression(unpack(g.shuffle{d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F)),d.NumberExpression(0)})),d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F)),d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),d.VariableExpression(n,F))},{d.NilExpression(),d.NilExpression()})},a9),{},nil)},n))end;function c:createUpvaluesProxyFunc()local n=e:new(self.scope)n:addReferenceToHigherScope(self.scope,self.newproxyVar)local aa=n:addVariable()local a9=e:new(n)local ab=a9:addVariable()local ac=a9:addVariable()local ad=e:new(n)a9:addReferenceToHigherScope(self.scope,self.newproxyVar)a9:addReferenceToHigherScope(self.scope,self.getmetatableVar)a9:addReferenceToHigherScope(self.scope,self.upvaluesGcFunctionVar)a9:addReferenceToHigherScope(n,aa)ad:addReferenceToHigherScope(self.scope,self.setmetatableVar)ad:addReferenceToHigherScope(n,aa)ad:addReferenceToHigherScope(self.scope,self.upvaluesGcFunctionVar)local ae=e:new(n)local af=ae:addVariable()ae:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,2)ae:addReferenceToHigherScope(n,aa,2)return d.FunctionLiteralExpression({d.VariableExpression(n,aa)},d.Block({d.ForStatement(ae,af,d.NumberExpression(1),d.LenExpression(d.VariableExpression(n,aa)),d.NumberExpression(1),d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.IndexExpression(d.VariableExpression(n,aa),d.VariableExpression(ae,af)))},{d.AddExpression(unpack(g.shuffle{d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.IndexExpression(d.VariableExpression(n,aa),d.VariableExpression(ae,af))),d.NumberExpression(1)}))})},ae),n),d.IfStatement(d.VariableExpression(self.scope,self.newproxyVar),d.Block({d.LocalVariableDeclaration(a9,{ab},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.newproxyVar),{d.BooleanExpression(true)})}),d.LocalVariableDeclaration(a9,{ac},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.getmetatableVar),{d.VariableExpression(a9,ab)})}),d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(a9,ac),d.StringExpression("__index")),d.AssignmentIndexing(d.VariableExpression(a9,ac),d.StringExpression("__gc")),d.AssignmentIndexing(d.VariableExpression(a9,ac),d.StringExpression("__len"))},{d.VariableExpression(n,aa),d.VariableExpression(self.scope,self.upvaluesGcFunctionVar),d.FunctionLiteralExpression({},d.Block({d.ReturnStatement({d.NumberExpression(self.upvalsProxyLenReturn)})},e:new(a9)))}),d.ReturnStatement({d.VariableExpression(a9,ab)})},a9),{},d.Block({d.ReturnStatement({d.FunctionCallExpression(d.VariableExpression(self.scope,self.setmetatableVar),{d.TableConstructorExpression({}),d.TableConstructorExpression({d.KeyedTableEntry(d.StringExpression("__gc"),d.VariableExpression(self.scope,self.upvaluesGcFunctionVar)),d.KeyedTableEntry(d.StringExpression("__index"),d.VariableExpression(n,aa)),d.KeyedTableEntry(d.StringExpression("__len"),d.FunctionLiteralExpression({},d.Block({d.ReturnStatement({d.NumberExpression(self.upvalsProxyLenReturn)})},e:new(a9))))})})})},ad))},n))end;function c:createAllocUpvalFunction()local n=e:new(self.scope)n:addReferenceToHigherScope(self.scope,self.currentUpvalId,4)n:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,1)return d.FunctionLiteralExpression({},d.Block({d.AssignmentStatement({d.AssignmentVariable(self.scope,self.currentUpvalId)},{d.AddExpression(unpack(g.shuffle({d.VariableExpression(self.scope,self.currentUpvalId),d.NumberExpression(1)})))}),d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(self.scope,self.currentUpvalId))},{d.NumberExpression(1)}),d.ReturnStatement({d.VariableExpression(self.scope,self.currentUpvalId)})},n))end;function c:emitContainerFuncBody()local ag={}g.shuffle(self.blocks)for w,o in ipairs(self.blocks)do local m=o.id;local ah=o.statements;for T=2,#ah do local ai=ah[T]local r=ai.reads;local q=ai.writes;local aj=0;local s=ai.usesUpvals;for ak=1,T-1 do local al=ah[T-ak]if al.usesUpvals and s then break end;local am=al.reads;local an=al.writes;local ao=true;for ap,aq in pairs(am)do if q[ap]then ao=false;break end end;if ao then for ap,aq in pairs(an)do if q[ap]then ao=false;break end;if r[ap]then ao=false;break end end end;if not ao then break end;aj=ak end;local ak=math.random(0,aj)for ar=1,ak do ah[T-ar],ah[T-ar+1]=ah[T-ar+1],ah[T-ar]end end;ah={}for T,ai in ipairs(o.statements)do table.insert(ah,ai.statement)end;table.insert(ag,{id=m,block=d.Block(ah,o.scope)})end;table.sort(ag,function(as,aq)return as.id<aq.id end)local function at(n,m,au,av)return d.Block({d.IfStatement(d.LessThanExpression(self:pos(n),d.NumberExpression(m)),au,{},av)},n)end;local function aw(ax,ay,ap,az,n)local aA=ap-ay+1;if aA==1 then ax[ap].block.scope:setParent(az)return ax[ap].block elseif aA==0 then return nil end;local aB=ay+math.ceil(aA/2)local aC=math.random(ax[aB-1].id,ax[aB].id)local a9=n or e:new(az)local au=aw(ax,ay,aB-1,a9)local av=aw(ax,aB,ap,a9)return at(a9,aC,au,av)end;local aD=aw(ag,1,#ag,self.containerFuncScope,self.whileScope)self.whileScope:addReferenceToHigherScope(self.containerFuncScope,self.returnVar,1)self.whileScope:addReferenceToHigherScope(self.containerFuncScope,self.posVar)self.containerFuncScope:addReferenceToHigherScope(self.scope,self.unpackVar)local aE={self.returnVar}for T,_ in pairs(self.registerVars)do if T~=a then table.insert(aE,_)end end;local aF={d.LocalVariableDeclaration(self.containerFuncScope,g.shuffle(aE),{}),d.WhileStatement(aD,d.VariableExpression(self.containerFuncScope,self.posVar)),d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{d.LenExpression(d.VariableExpression(self.containerFuncScope,self.detectGcCollectVar))}),d.ReturnStatement{d.FunctionCallExpression(d.VariableExpression(self.scope,self.unpackVar),{d.VariableExpression(self.containerFuncScope,self.returnVar)})}}if self.maxUsedRegister>=a then table.insert(aF,1,d.LocalVariableDeclaration(self.containerFuncScope,{self.registerVars[a]},{d.TableConstructorExpression({})}))end;return d.Block(aF,self.containerFuncScope)end;function c:freeRegister(m,aG)if aG or not(self.registers[m]==self.VAR_REGISTER)then self.usedRegisters=self.usedRegisters-1;self.registers[m]=false end end;function c:isVarRegister(m)return self.registers[m]==self.VAR_REGISTER end;function c:allocRegister(aH)self.usedRegisters=self.usedRegisters+1;if not aH then if not self.registers[self.POS_REGISTER]then self.registers[self.POS_REGISTER]=true;return self.POS_REGISTER end;if not self.registers[self.RETURN_REGISTER]then self.registers[self.RETURN_REGISTER]=true;return self.RETURN_REGISTER end end;local m=0;if self.usedRegisters<a*b then repeat m=math.random(1,a-1)until not self.registers[m]else repeat m=m+1 until not self.registers[m]end;if m>self.maxUsedRegister then self.maxUsedRegister=m end;if aH then self.registers[m]=self.VAR_REGISTER else self.registers[m]=true end;return m end;function c:isUpvalue(n,m)return self.upvalVars[n]and self.upvalVars[n][m]end;function c:makeUpvalue(n,m)if not self.upvalVars[n]then self.upvalVars[n]={}end;self.upvalVars[n][m]=true end;function c:getVarRegister(n,m,aI,aJ)if not self.registersForVar[n]then self.registersForVar[n]={}self.scopeFunctionDepths[n]=aI end;local aK=self.registersForVar[n][m]if not aK then if aJ and self.registers[aJ]~=self.VAR_REGISTER and aJ~=self.POS_REGISTER and aJ~=self.RETURN_REGISTER then self.registers[aJ]=self.VAR_REGISTER;aK=aJ else aK=self:allocRegister(true)end;self.registersForVar[n][m]=aK end;return aK end;function c:getRegisterVarId(m)local aL=self.registerVars[m]if not aL then aL=self.containerFuncScope:addVariable()self.registerVars[m]=aL end;return aL end;function c:register(n,m)if m==self.POS_REGISTER then return self:pos(n)end;if m==self.RETURN_REGISTER then return self:getReturn(n)end;if m<a then local aM=self:getRegisterVarId(m)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.VariableExpression(self.containerFuncScope,aM)end;local aM=self:getRegisterVarId(a)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.IndexExpression(d.VariableExpression(self.containerFuncScope,aM),d.NumberExpression(m-a+1))end;function c:registerList(n,aN)local ay={}for T,m in ipairs(aN)do table.insert(ay,self:register(n,m))end;return ay end;function c:registerAssignment(n,m)if m==self.POS_REGISTER then return self:posAssignment(n)end;if m==self.RETURN_REGISTER then return self:returnAssignment(n)end;if m<a then local aM=self:getRegisterVarId(m)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.AssignmentVariable(self.containerFuncScope,aM)end;local aM=self:getRegisterVarId(a)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.AssignmentIndexing(d.VariableExpression(self.containerFuncScope,aM),d.NumberExpression(m-a+1))end;function c:setRegister(n,m,a3,aO)if aO then return aO(self:registerAssignment(n,m),a3)end;return d.AssignmentStatement({self:registerAssignment(n,m)},{a3})end;function c:setRegisters(n,aN,aP)local aQ={}for T,m in ipairs(aN)do table.insert(aQ,self:registerAssignment(n,m))end;return d.AssignmentStatement(aQ,aP)end;function c:copyRegisters(n,aR,aS)local aQ={}local aP={}for T,m in ipairs(aR)do local aS=aS[T]if aS~=m then table.insert(aQ,self:registerAssignment(n,m))table.insert(aP,self:register(n,aS))end end;if#aQ>0 and#aP>0 then return d.AssignmentStatement(aQ,aP)end end;function c:resetRegisters()self.registers={}end;function c:pos(n)n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.VariableExpression(self.containerFuncScope,self.posVar)end;function c:posAssignment(n)n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentVariable(self.containerFuncScope,self.posVar)end;function c:args(n)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)return d.VariableExpression(self.containerFuncScope,self.argsVar)end;function c:unpack(n)n:addReferenceToHigherScope(self.scope,self.unpackVar)return d.VariableExpression(self.scope,self.unpackVar)end;function c:env(n)n:addReferenceToHigherScope(self.scope,self.envVar)return d.VariableExpression(self.scope,self.envVar)end;function c:jmp(n,aR)n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{aR})end;function c:setPos(n,a3)if not a3 then local X=d.IndexExpression(self:env(n),i.randomStringNode(math.random(12,14)))n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{X})end;n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{d.NumberExpression(a3)or d.NilExpression()})end;function c:setReturn(n,a3)n:addReferenceToHigherScope(self.containerFuncScope,self.returnVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.returnVar)},{a3})end;function c:getReturn(n)n:addReferenceToHigherScope(self.containerFuncScope,self.returnVar)return d.VariableExpression(self.containerFuncScope,self.returnVar)end;function c:returnAssignment(n)n:addReferenceToHigherScope(self.containerFuncScope,self.returnVar)return d.AssignmentVariable(self.containerFuncScope,self.returnVar)end;function c:setUpvalueMember(n,aT,aU,aV)n:addReferenceToHigherScope(self.scope,self.upvaluesTable)if aV then return aV(d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),aT),aU)end;return d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),aT)},{aU})end;function c:getUpvalueMember(n,aT)n:addReferenceToHigherScope(self.scope,self.upvaluesTable)return d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesTable),aT)end;function c:compileTopNode(aW)local aX=self:createBlock()local n=aX.scope;self.startBlockId=aX.id;self:setActiveBlock(aX)local aY=j{k.AssignmentVariable,k.VariableExpression,k.FunctionDeclaration,k.LocalFunctionDeclaration}local aZ=j{k.FunctionDeclaration,k.LocalFunctionDeclaration,k.FunctionLiteralExpression,k.TopNode}h(aW,function(aW,a_)if aW.kind==k.Block then aW.scope.__depth=a_.functionData.depth end;if aY[aW.kind]then if not aW.scope.isGlobal then if aW.scope.__depth<a_.functionData.depth then if not self:isUpvalue(aW.scope,aW.id)then self:makeUpvalue(aW.scope,aW.id)end end end end end,nil,nil)self.varargReg=self:allocRegister(true)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)n:addReferenceToHigherScope(self.scope,self.selectVar)n:addReferenceToHigherScope(self.scope,self.unpackVar)self:addStatement(self:setRegister(n,self.varargReg,d.VariableExpression(self.containerFuncScope,self.argsVar)),{self.varargReg},{},false)self:compileBlock(aW.body,0)if self.activeBlock.advanceToNextBlock then self:addStatement(self:setPos(self.activeBlock.scope,nil),{self.POS_REGISTER},{},false)self:addStatement(self:setReturn(self.activeBlock.scope,d.TableConstructorExpression({})),{self.RETURN_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false end;self:resetRegisters()end;function c:compileFunction(aW,b0)b0=b0+1;local b1=self.activeBlock;local b2=self.varargReg;self.varargReg=nil;local b3={}local N={}local b4={}local b5=self.getUpvalueId;self.getUpvalueId=function(self,n,m)if not N[n]then N[n]={}end;if N[n][m]then return N[n][m]end;local P=self.scopeFunctionDepths[n]local O;if P==b0 then b1.scope:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)O=d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})elseif P==b0-1 then local b6=self:getVarRegister(n,m,P,nil)O=self:register(b1.scope,b6)table.insert(b4,b6)else local b7=b5(self,n,m)b1.scope:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)O=d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(b7))end;table.insert(b3,d.TableEntry(O))local Q=#b3;N[n][m]=Q;return Q end;local o=self:createBlock()self:setActiveBlock(o)local n=self.activeBlock.scope;self:pushRegisterUsageInfo()for T,a2 in ipairs(aW.args)do if a2.kind==k.VariableExpression then if self:isUpvalue(a2.scope,a2.id)then n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)local b8=self:getVarRegister(a2.scope,a2.id,b0,nil)self:addStatement(self:setRegister(n,b8,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b8},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,b8),d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.argsVar),d.NumberExpression(T))),{},{b8},true)else local b8=self:getVarRegister(a2.scope,a2.id,b0,nil)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)self:addStatement(self:setRegister(n,b8,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.argsVar),d.NumberExpression(T))),{b8},{},false)end else self.varargReg=self:allocRegister(true)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)n:addReferenceToHigherScope(self.scope,self.selectVar)n:addReferenceToHigherScope(self.scope,self.unpackVar)self:addStatement(self:setRegister(n,self.varargReg,d.TableConstructorExpression({d.TableEntry(d.FunctionCallExpression(d.VariableExpression(self.scope,self.selectVar),{d.NumberExpression(T),d.FunctionCallExpression(d.VariableExpression(self.scope,self.unpackVar),{d.VariableExpression(self.containerFuncScope,self.argsVar)})}))})),{self.varargReg},{},false)end end;self:compileBlock(aW.body,b0)if self.activeBlock.advanceToNextBlock then self:addStatement(self:setPos(self.activeBlock.scope,nil),{self.POS_REGISTER},{},false)self:addStatement(self:setReturn(self.activeBlock.scope,d.TableConstructorExpression({})),{self.RETURN_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false end;if self.varargReg then self:freeRegister(self.varargReg,true)end;self.varargReg=b2;self.getUpvalueId=b5;self:popRegisterUsageInfo()self:setActiveBlock(b1)local n=self.activeBlock.scope;local b9=self:allocRegister(false)local ba=#aW.args>0 and aW.args[#aW.args].kind==k.VarargExpression;local bb;if ba then n:addReferenceToHigherScope(self.scope,self.createVarargClosureVar)bb=d.FunctionCallExpression(d.VariableExpression(self.scope,self.createVarargClosureVar),{d.NumberExpression(o.id),d.TableConstructorExpression(b3)})else local bc,_=self:getCreateClosureVar(#aW.args+math.random(0,5))n:addReferenceToHigherScope(bc,_)bb=d.FunctionCallExpression(d.VariableExpression(bc,_),{d.NumberExpression(o.id),d.TableConstructorExpression(b3)})end;self:addStatement(self:setRegister(n,b9,bb),{b9},b4,false)return b9 end;function c:compileBlock(o,b0)for T,ai in ipairs(o.statements)do self:compileStatement(ai,b0)end;local n=self.activeBlock.scope;for m,bd in ipairs(o.scope.variables)do local b6=self:getVarRegister(o.scope,m,b0,nil)if self:isUpvalue(o.scope,m)then n:addReferenceToHigherScope(self.scope,self.freeUpvalueFunc)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.freeUpvalueFunc),{self:register(n,b6)})),{b6},{b6},false)else self:addStatement(self:setRegister(n,b6,d.NilExpression()),{b6},{},false)end;self:freeRegister(b6,true)end end;function c:compileStatement(p,b0)local n=self.activeBlock.scope;if p.kind==k.ReturnStatement then local be={}local bf={}for T,bg in ipairs(p.args)do if T==#p.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(be,d.TableEntry(d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)})))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(be,d.TableEntry(self:register(n,aK)))table.insert(bf,aK)end end;for w,aK in ipairs(bf)do self:freeRegister(aK,false)end;self:addStatement(self:setReturn(n,d.TableConstructorExpression(be)),{self.RETURN_REGISTER},bf,false)self:addStatement(self:setPos(self.activeBlock.scope,nil),{self.POS_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false;return end;if p.kind==k.LocalVariableDeclaration then local bh={}for T,bg in ipairs(p.expressions)do if T==#p.expressions and#p.ids>#p.expressions then local bf=self:compileExpression(bg,b0,#p.ids-#p.expressions+1)for T,aK in ipairs(bf)do table.insert(bh,aK)end else if p.ids[T]or bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression then local aK=self:compileExpression(bg,b0,1)[1]table.insert(bh,aK)end end end;if#bh==0 then for T=1,#p.ids do table.insert(bh,self:compileExpression(d.NilExpression(),b0,1)[1])end end;for T,m in ipairs(p.ids)do if bh[T]then if self:isUpvalue(p.scope,m)then local bi=self:getVarRegister(p.scope,m,b0)local b6=self:getVarRegister(p.scope,m,b0,nil)n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b6},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,b6),self:register(n,bh[T])),{},{b6,bh[T]},true)self:freeRegister(bh[T],false)else local bi=self:getVarRegister(p.scope,m,b0,bh[T])self:addStatement(self:copyRegisters(n,{bi},{bh[T]}),{bi},{bh[T]},false)self:freeRegister(bh[T],false)end end end;if not self.scopeFunctionDepths[p.scope]then self.scopeFunctionDepths[p.scope]=b0 end;return end;if p.kind==k.FunctionCallStatement then local bj=self:compileExpression(p.base,b0,1)[1]local b9=self:allocRegister(false)local bf={}local bk={}for T,bg in ipairs(p.args)do if T==#p.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;self:addStatement(self:setRegister(n,b9,d.FunctionCallExpression(self:register(n,bj),bk)),{b9},{bj,unpack(bf)},true)self:freeRegister(bj,false)self:freeRegister(b9,false)for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return end;if p.kind==k.PassSelfFunctionCallStatement then local bj=self:compileExpression(p.base,b0,1)[1]local bl=self:allocRegister(false)local bk={self:register(n,bj)}local bf={bj}for T,bg in ipairs(p.args)do if T==#p.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;self:addStatement(self:setRegister(n,bl,d.StringExpression(p.passSelfFunctionName)),{bl},{},false)self:addStatement(self:setRegister(n,bl,d.IndexExpression(self:register(n,bj),self:register(n,bl))),{bl},{bl,bj},false)self:addStatement(self:setRegister(n,bl,d.FunctionCallExpression(self:register(n,bl),bk)),{bl},{bl,unpack(bf)},true)self:freeRegister(bl,false)for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return end;if p.kind==k.LocalFunctionDeclaration then if self:isUpvalue(p.scope,p.id)then local b6=self:getVarRegister(p.scope,p.id,b0,nil)n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b6},{},false)local b9=self:compileFunction(p,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,b6),self:register(n,b9)),{},{b6,b9},true)self:freeRegister(b9,false)else local b9=self:compileFunction(p,b0)local b6=self:getVarRegister(p.scope,p.id,b0,b9)self:addStatement(self:copyRegisters(n,{b6},{b9}),{b6},{b9},false)self:freeRegister(b9,false)end;return end;if p.kind==k.FunctionDeclaration then local b9=self:compileFunction(p,b0)if#p.indices>0 then local bm;if p.scope.isGlobal then bm=self:allocRegister(false)self:addStatement(self:setRegister(n,bm,d.StringExpression(p.scope:getVariableName(p.id))),{bm},{},false)self:addStatement(self:setRegister(n,bm,d.IndexExpression(self:env(n),self:register(n,bm))),{bm},{bm},true)else if self.scopeFunctionDepths[p.scope]==b0 then if self:isUpvalue(p.scope,p.id)then bm=self:allocRegister(false)local aK=self:getVarRegister(p.scope,p.id,b0)self:addStatement(self:setRegister(n,bm,self:getUpvalueMember(n,self:register(n,aK))),{bm},{aK},true)else bm=self:getVarRegister(p.scope,p.id,b0,b9)end else bm=self:allocRegister(false)local bn=self:getUpvalueId(p.scope,p.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setRegister(n,bm,self:getUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)))),{bm},{},true)end end;for T=1,#p.indices-1 do local bo=p.indices[T]local bp=self:compileExpression(d.StringExpression(bo),b0,1)[1]local bq=bm;bm=self:allocRegister(false)self:addStatement(self:setRegister(n,bm,d.IndexExpression(self:register(n,bq),self:register(n,bp))),{bm},{bm,bp},false)self:freeRegister(bq,false)self:freeRegister(bp,false)end;local bo=p.indices[#p.indices]local bp=self:compileExpression(d.StringExpression(bo),b0,1)[1]self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:register(n,bm),self:register(n,bp))},{self:register(n,b9)}),{},{bm,bp,b9},true)self:freeRegister(bp,false)self:freeRegister(bm,false)self:freeRegister(b9,false)return end;if p.scope.isGlobal then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(p.scope:getVariableName(p.id))),{bl},{},false)self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:env(n),self:register(n,bl))},{self:register(n,b9)}),{},{bl,b9},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[p.scope]==b0 then if self:isUpvalue(p.scope,p.id)then local aK=self:getVarRegister(p.scope,p.id,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,aK),self:register(n,b9)),{},{aK,b9},true)else local aK=self:getVarRegister(p.scope,p.id,b0,b9)if aK~=b9 then self:addStatement(self:setRegister(n,aK,self:register(n,b9)),{aK},{b9},false)end end else local bn=self:getUpvalueId(p.scope,p.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)),self:register(n,b9)),{},{b9},true)end end;self:freeRegister(b9,false)return end;if p.kind==k.AssignmentStatement then local bh={}local br={}for T,bs in ipairs(p.lhs)do if bs.kind==k.AssignmentIndexing then br[T]={base=self:compileExpression(bs.base,b0,1)[1],index=self:compileExpression(bs.index,b0,1)[1]}end end;for T,bg in ipairs(p.rhs)do if T==#p.rhs and#p.lhs>#p.rhs then local bf=self:compileExpression(bg,b0,#p.lhs-#p.rhs+1)for T,aK in ipairs(bf)do if self:isVarRegister(aK)then local bt=aK;aK=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{aK},{bt}),{aK},{bt},false)end;table.insert(bh,aK)end else if p.lhs[T]or bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression then local aK=self:compileExpression(bg,b0,1)[1]if self:isVarRegister(aK)then local bt=aK;aK=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{aK},{bt}),{aK},{bt},false)end;table.insert(bh,aK)end end end;for T,bs in ipairs(p.lhs)do if bs.kind==k.AssignmentVariable then if bs.scope.isGlobal then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(bs.scope:getVariableName(bs.id))),{bl},{},false)self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:env(n),self:register(n,bl))},{self:register(n,bh[T])}),{},{bl,bh[T]},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[bs.scope]==b0 then if self:isUpvalue(bs.scope,bs.id)then local aK=self:getVarRegister(bs.scope,bs.id,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,aK),self:register(n,bh[T])),{},{aK,bh[T]},true)else local aK=self:getVarRegister(bs.scope,bs.id,b0,bh[T])if aK~=bh[T]then self:addStatement(self:setRegister(n,aK,self:register(n,bh[T])),{aK},{bh[T]},false)end end else local bn=self:getUpvalueId(bs.scope,bs.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)),self:register(n,bh[T])),{},{bh[T]},true)end end elseif bs.kind==k.AssignmentIndexing then local bj=br[T].base;local bp=br[T].index;self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:register(n,bj),self:register(n,bp))},{self:register(n,bh[T])}),{},{bh[T],bj,bp},true)self:freeRegister(bh[T],false)self:freeRegister(bj,false)self:freeRegister(bp,false)else error(string.format("Invalid Assignment lhs: %s",p.lhs))end end;return end;if p.kind==k.IfStatement then local bu=self:compileExpression(p.condition,b0,1)[1]local bv=self:createBlock()local bw;if p.elsebody or#p.elseifs>0 then bw=self:createBlock()else bw=bv end;local bx=self:createBlock()self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bx.id)),d.NumberExpression(bw.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bx)n=bx.scope;self:compileBlock(p.body,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bv.id)),{self.POS_REGISTER},{},false)for T,by in ipairs(p.elseifs)do self:setActiveBlock(bw)bu=self:compileExpression(by.condition,b0,1)[1]local bx=self:createBlock()if p.elsebody or T<#p.elseifs then bw=self:createBlock()else bw=bv end;local n=self.activeBlock.scope;self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bx.id)),d.NumberExpression(bw.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bx)n=bx.scope;self:compileBlock(by.body,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bv.id)),{self.POS_REGISTER},{},false)end;if p.elsebody then self:setActiveBlock(bw)self:compileBlock(p.elsebody,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bv.id)),{self.POS_REGISTER},{},false)end;self:setActiveBlock(bv)return end;if p.kind==k.DoStatement then self:compileBlock(p.body,b0)return end;if p.kind==k.WhileStatement then local bx=self:createBlock()local bv=self:createBlock()local bz=self:createBlock()p.__start_block=bz;p.__final_block=bv;self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)local n=self.activeBlock.scope;local bu=self:compileExpression(p.condition,b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bx.id)),d.NumberExpression(bv.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bx)local n=self.activeBlock.scope;self:compileBlock(p.body,b0)self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bv)return end;if p.kind==k.RepeatStatement then local bx=self:createBlock()local bv=self:createBlock()local bz=self:createBlock()p.__start_block=bz;p.__final_block=bv;local bu=self:compileExpression(p.condition,b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bx.id)),{self.POS_REGISTER},{},false)self:freeRegister(bu,false)self:setActiveBlock(bx)self:compileBlock(p.body,b0)local n=self.activeBlock.scope;self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)local n=self.activeBlock.scope;local bu=self:compileExpression(p.condition,b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bv.id)),d.NumberExpression(bx.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bv)return end;if p.kind==k.ForStatement then local bz=self:createBlock()local bx=self:createBlock()local bv=self:createBlock()p.__start_block=bz;p.__final_block=bv;local bA=self.registers[self.POS_REGISTER]self.registers[self.POS_REGISTER]=self.VAR_REGISTER;local bB=self:compileExpression(p.initialValue,b0,1)[1]local bC=self:compileExpression(p.finalValue,b0,1)[1]local bD=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bD},{bC}),{bD},{bC},false)self:freeRegister(bC)local bE=self:compileExpression(p.incrementBy,b0,1)[1]local bF=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bF},{bE}),{bF},{bE},false)self:freeRegister(bE)local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.NumberExpression(0)),{bl},{},false)local bG=self:allocRegister(false)self:addStatement(self:setRegister(n,bG,d.LessThanExpression(self:register(n,bF),self:register(n,bl))),{bG},{bF,bl},false)self:freeRegister(bl)local bH=self:allocRegister(true)self:addStatement(self:setRegister(n,bH,d.SubExpression(self:register(n,bB),self:register(n,bF))),{bH},{bB,bF},false)self:freeRegister(bB)self:addStatement(self:jmp(n,d.NumberExpression(bz.id)),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)n=bz.scope;self:addStatement(self:setRegister(n,bH,d.AddExpression(self:register(n,bH),self:register(n,bF))),{bH},{bH,bF},false)local bI=self:allocRegister(false)local bJ=self:allocRegister(false)self:addStatement(self:setRegister(n,bJ,d.NotExpression(self:register(n,bG))),{bJ},{bG},false)self:addStatement(self:setRegister(n,bI,d.LessThanOrEqualsExpression(self:register(n,bH),self:register(n,bD))),{bI},{bH,bD},false)self:addStatement(self:setRegister(n,bI,d.AndExpression(self:register(n,bJ),self:register(n,bI))),{bI},{bI,bJ},false)self:addStatement(self:setRegister(n,bJ,d.GreaterThanOrEqualsExpression(self:register(n,bH),self:register(n,bD))),{bJ},{bH,bD},false)self:addStatement(self:setRegister(n,bJ,d.AndExpression(self:register(n,bG),self:register(n,bJ))),{bJ},{bJ,bG},false)self:addStatement(self:setRegister(n,bI,d.OrExpression(self:register(n,bJ),self:register(n,bI))),{bI},{bI,bJ},false)self:freeRegister(bJ)bJ=self:compileExpression(d.NumberExpression(bx.id),b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.AndExpression(self:register(n,bI),self:register(n,bJ))),{self.POS_REGISTER},{bI,bJ},false)self:freeRegister(bJ)self:freeRegister(bI)bJ=self:compileExpression(d.NumberExpression(bv.id),b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(self:register(n,self.POS_REGISTER),self:register(n,bJ))),{self.POS_REGISTER},{self.POS_REGISTER,bJ},false)self:freeRegister(bJ)self:setActiveBlock(bx)n=bx.scope;self.registers[self.POS_REGISTER]=bA;local b6=self:getVarRegister(p.scope,p.id,b0,nil)if self:isUpvalue(p.scope,p.id)then n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b6},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,b6),self:register(n,bH)),{},{b6,bH},true)else self:addStatement(self:setRegister(n,b6,self:register(n,bH)),{b6},{bH},false)end;self:compileBlock(p.body,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bz.id)),{self.POS_REGISTER},{},false)self.registers[self.POS_REGISTER]=self.VAR_REGISTER;self:freeRegister(bD)self:freeRegister(bG)self:freeRegister(bF)self:freeRegister(bH,true)self.registers[self.POS_REGISTER]=bA;self:setActiveBlock(bv)return end;if p.kind==k.ForInStatement then local bK=#p.expressions;local bh={}for T,bg in ipairs(p.expressions)do if T==bK and bK<3 then local bf=self:compileExpression(bg,b0,4-bK)for T=1,4-bK do table.insert(bh,bf[T])end else if T<=3 then table.insert(bh,self:compileExpression(bg,b0,1)[1])else self:freeRegister(self:compileExpression(bg,b0,1)[1],false)end end end;for T,aK in ipairs(bh)do if aK and self.registers[aK]~=self.VAR_REGISTER and aK~=self.POS_REGISTER and aK~=self.RETURN_REGISTER then self.registers[aK]=self.VAR_REGISTER else bh[T]=self:allocRegister(true)self:addStatement(self:copyRegisters(n,{bh[T]},{aK}),{bh[T]},{aK},false)end end;local bz=self:createBlock()local bL=self:createBlock()local bv=self:createBlock()p.__start_block=bz;p.__final_block=bv;self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)local n=self.activeBlock.scope;local bM={}for T,m in ipairs(p.ids)do bM[T]=self:getVarRegister(p.scope,m,b0)end;self:addStatement(d.AssignmentStatement({self:registerAssignment(n,bh[3]),bM[2]and self:registerAssignment(n,bM[2])},{d.FunctionCallExpression(self:register(n,bh[1]),{self:register(n,bh[2]),self:register(n,bh[3])})}),{bh[3],bM[2]},{bh[1],bh[2],bh[3]},true)self:addStatement(d.AssignmentStatement({self:posAssignment(n)},{d.OrExpression(d.AndExpression(self:register(n,bh[3]),d.NumberExpression(bL.id)),d.NumberExpression(bv.id))}),{self.POS_REGISTER},{bh[3]},false)self:setActiveBlock(bL)local n=self.activeBlock.scope;self:addStatement(self:copyRegisters(n,{bM[1]},{bh[3]}),{bM[1]},{bh[3]},false)for T=3,#bM do self:addStatement(self:setRegister(n,bM[T],d.NilExpression()),{bM[T]},{},false)end;for T,m in ipairs(p.ids)do if self:isUpvalue(p.scope,m)then local bi=bM[T]local bl=self:allocRegister(false)n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,bl,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{bl},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,bl),self:register(n,bi)),{},{bl,bi},true)self:addStatement(self:copyRegisters(n,{bi},{bl}),{bi},{bl},false)self:freeRegister(bl,false)end end;self:compileBlock(p.body,b0)self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bv)for T,aK in ipairs(bh)do self:freeRegister(bh[T],true)end;return end;if p.kind==k.DoStatement then self:compileBlock(p.body,b0)return end;if p.kind==k.BreakStatement then local bN={}local bO;repeat bO=bO and bO.parentScope or p.scope;for m,bd in ipairs(bO.variables)do table.insert(bN,{scope=bO,id=m})end until bO==p.loop.body.scope;for T,_ in pairs(bN)do local bc,m=_.scope,_.id;local b6=self:getVarRegister(bc,m,nil,nil)if self:isUpvalue(bc,m)then n:addReferenceToHigherScope(self.scope,self.freeUpvalueFunc)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.freeUpvalueFunc),{self:register(n,b6)})),{b6},{b6},false)else self:addStatement(self:setRegister(n,b6,d.NilExpression()),{b6},{},false)end end;self:addStatement(self:setPos(n,p.loop.__final_block.id),{self.POS_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false;return end;if p.kind==k.ContinueStatement then local bN={}local bO;repeat bO=bO and bO.parentScope or p.scope;for m,bd in pairs(bO.variables)do table.insert(bN,{scope=bO,id=m})end until bO==p.loop.body.scope;for T,_ in ipairs(bN)do local bc,m=_.scope,_.id;local b6=self:getVarRegister(bc,m,nil,nil)if self:isUpvalue(bc,m)then n:addReferenceToHigherScope(self.scope,self.freeUpvalueFunc)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.freeUpvalueFunc),{self:register(n,b6)})),{b6},{b6},false)else self:addStatement(self:setRegister(n,b6,d.NilExpression()),{b6},{},false)end end;self:addStatement(self:setPos(n,p.loop.__start_block.id),{self.POS_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false;return end;local bP={[k.CompoundAddStatement]=d.CompoundAddStatement,[k.CompoundSubStatement]=d.CompoundSubStatement,[k.CompoundMulStatement]=d.CompoundMulStatement,[k.CompoundDivStatement]=d.CompoundDivStatement,[k.CompoundModStatement]=d.CompoundModStatement,[k.CompoundPowStatement]=d.CompoundPowStatement,[k.CompoundConcatStatement]=d.CompoundConcatStatement}if bP[p.kind]then local aV=bP[p.kind]if p.lhs.kind==k.AssignmentIndexing then local bQ=p.lhs;local bj=self:compileExpression(bQ.base,b0,1)[1]local bp=self:compileExpression(bQ.index,b0,1)[1]local bR=self:compileExpression(p.rhs,b0,1)[1]self:addStatement(aV(d.AssignmentIndexing(self:register(n,bj),self:register(n,bp)),self:register(n,bR)),{},{bj,bp,bR},true)else local bR=self:compileExpression(p.rhs,b0,1)[1]local bs=p.lhs;if bs.scope.isGlobal then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(bs.scope:getVariableName(bs.id))),{bl},{},false)self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:env(n),self:register(n,bl))},{self:register(n,bR)}),{},{bl,bR},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[bs.scope]==b0 then if self:isUpvalue(bs.scope,bs.id)then local aK=self:getVarRegister(bs.scope,bs.id,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,aK),self:register(n,bR),aV),{},{aK,bR},true)else local aK=self:getVarRegister(bs.scope,bs.id,b0,bR)if aK~=bR then self:addStatement(self:setRegister(n,aK,self:register(n,bR),aV),{aK},{bR},false)end end else local bn=self:getUpvalueId(bs.scope,bs.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)),self:register(n,bR),aV),{},{bR},true)end end end;return end;f:error(string.format("%s is not a compileable statement!",p.kind))end;function c:compileExpression(O,b0,bS)local n=self.activeBlock.scope;if O.kind==k.StringExpression then local bf={}for T=1,bS,1 do bf[T]=self:allocRegister()if T==1 then self:addStatement(self:setRegister(n,bf[T],d.StringExpression(O.value)),{bf[T]},{},false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NumberExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then self:addStatement(self:setRegister(n,bf[T],d.NumberExpression(O.value)),{bf[T]},{},false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.BooleanExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then self:addStatement(self:setRegister(n,bf[T],d.BooleanExpression(O.value)),{bf[T]},{},false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NilExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end;return bf end;if O.kind==k.VariableExpression then local bf={}for T=1,bS do if T==1 then if O.scope.isGlobal then bf[T]=self:allocRegister(false)local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(O.scope:getVariableName(O.id))),{bl},{},false)self:addStatement(self:setRegister(n,bf[T],d.IndexExpression(self:env(n),self:register(n,bl))),{bf[T]},{bl},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[O.scope]==b0 then if self:isUpvalue(O.scope,O.id)then local aK=self:allocRegister(false)local b6=self:getVarRegister(O.scope,O.id,b0,nil)self:addStatement(self:setRegister(n,aK,self:getUpvalueMember(n,self:register(n,b6))),{aK},{b6},true)bf[T]=aK else bf[T]=self:getVarRegister(O.scope,O.id,b0,nil)end else local aK=self:allocRegister(false)local bn=self:getUpvalueId(O.scope,O.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setRegister(n,aK,self:getUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)))),{aK},{},true)bf[T]=aK end end else bf[T]=self:allocRegister()self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.FunctionCallExpression then local bj=self:compileExpression(O.base,b0,1)[1]local bT={}local bU=bS==self.RETURN_ALL;if bU then bT[1]=self:allocRegister(false)else for T=1,bS do bT[T]=self:allocRegister(false)end end;local bf={}local bk={}for T,bg in ipairs(O.args)do if T==#O.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;if bU then self:addStatement(self:setRegister(n,bT[1],d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bj),bk))}),{bT[1]},{bj,unpack(bf)},true)else if bS>1 then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bj),bk))}),{bl},{bj,unpack(bf)},true)for T,aK in ipairs(bT)do self:addStatement(self:setRegister(n,aK,d.IndexExpression(self:register(n,bl),d.NumberExpression(T))),{aK},{bl},false)end;self:freeRegister(bl,false)else self:addStatement(self:setRegister(n,bT[1],d.FunctionCallExpression(self:register(n,bj),bk)),{bT[1]},{bj,unpack(bf)},true)end end;self:freeRegister(bj,false)for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return bT end;if O.kind==k.PassSelfFunctionCallExpression then local bj=self:compileExpression(O.base,b0,1)[1]local bT={}local bU=bS==self.RETURN_ALL;if bU then bT[1]=self:allocRegister(false)else for T=1,bS do bT[T]=self:allocRegister(false)end end;local bk={self:register(n,bj)}local bf={bj}for T,bg in ipairs(O.args)do if T==#O.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;if bU or bS>1 then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(O.passSelfFunctionName)),{bl},{},false)self:addStatement(self:setRegister(n,bl,d.IndexExpression(self:register(n,bj),self:register(n,bl))),{bl},{bj,bl},false)if bU then self:addStatement(self:setRegister(n,bT[1],d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bl),bk))}),{bT[1]},{bl,unpack(bf)},true)else self:addStatement(self:setRegister(n,bl,d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bl),bk))}),{bl},{bl,unpack(bf)},true)for T,aK in ipairs(bT)do self:addStatement(self:setRegister(n,aK,d.IndexExpression(self:register(n,bl),d.NumberExpression(T))),{aK},{bl},false)end end;self:freeRegister(bl,false)else local bl=bT[1]or self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(O.passSelfFunctionName)),{bl},{},false)self:addStatement(self:setRegister(n,bl,d.IndexExpression(self:register(n,bj),self:register(n,bl))),{bl},{bj,bl},false)self:addStatement(self:setRegister(n,bT[1],d.FunctionCallExpression(self:register(n,bl),bk)),{bT[1]},{bj,unpack(bf)},true)end;for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return bT end;if O.kind==k.IndexExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bj=self:compileExpression(O.base,b0,1)[1]local bp=self:compileExpression(O.index,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.IndexExpression(self:register(n,bj),self:register(n,bp))),{bf[T]},{bj,bp},true)self:freeRegister(bj,false)self:freeRegister(bp,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if self.BIN_OPS[O.kind]then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bV=self:compileExpression(O.lhs,b0,1)[1]local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d[O.kind](self:register(n,bV),self:register(n,bW))),{bf[T]},{bV,bW},true)self:freeRegister(bW,false)self:freeRegister(bV,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NotExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.NotExpression(self:register(n,bW))),{bf[T]},{bW},false)self:freeRegister(bW,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NegateExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.NegateExpression(self:register(n,bW))),{bf[T]},{bW},true)self:freeRegister(bW,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.LenExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.LenExpression(self:register(n,bW))),{bf[T]},{bW},true)self:freeRegister(bW,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.OrExpression then local bA=self.registers[self.POS_REGISTER]self.registers[self.POS_REGISTER]=self.VAR_REGISTER;local bf={}for T=1,bS do bf[T]=self:allocRegister()if T~=1 then self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;local bX=bf[1]local bl;if bA then bl=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bl},{self.POS_REGISTER}),{bl},{self.POS_REGISTER},false)end;local bV=self:compileExpression(O.lhs,b0,1)[1]if O.rhs.isConstant then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bX,d.OrExpression(self:register(n,bV),self:register(n,bW))),{bX},{bV,bW},false)if bl then self:freeRegister(bl,false)end;self:freeRegister(bV,false)self:freeRegister(bW,false)return bf end;local bY,bZ=self:createBlock(),self:createBlock()self:addStatement(self:copyRegisters(n,{bX},{bV}),{bX},{bV},false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bV),d.NumberExpression(bZ.id)),d.NumberExpression(bY.id))),{self.POS_REGISTER},{bV},false)self:freeRegister(bV,false)do self:setActiveBlock(bY)local n=bY.scope;local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:copyRegisters(n,{bX},{bW}),{bX},{bW},false)self:freeRegister(bW,false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bZ.id)),{self.POS_REGISTER},{},false)end;self.registers[self.POS_REGISTER]=bA;self:setActiveBlock(bZ)n=bZ.scope;if bl then self:addStatement(self:copyRegisters(n,{self.POS_REGISTER},{bl}),{self.POS_REGISTER},{bl},false)self:freeRegister(bl,false)end;return bf end;if O.kind==k.AndExpression then local bA=self.registers[self.POS_REGISTER]self.registers[self.POS_REGISTER]=self.VAR_REGISTER;local bf={}for T=1,bS do bf[T]=self:allocRegister()if T~=1 then self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;local bX=bf[1]local bl;if bA then bl=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bl},{self.POS_REGISTER}),{bl},{self.POS_REGISTER},false)end;local bV=self:compileExpression(O.lhs,b0,1)[1]if O.rhs.isConstant then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bX,d.AndExpression(self:register(n,bV),self:register(n,bW))),{bX},{bV,bW},false)if bl then self:freeRegister(bl,false)end;self:freeRegister(bV,false)self:freeRegister(bW,false)return bf end;local bY,bZ=self:createBlock(),self:createBlock()self:addStatement(self:copyRegisters(n,{bX},{bV}),{bX},{bV},false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bV),d.NumberExpression(bY.id)),d.NumberExpression(bZ.id))),{self.POS_REGISTER},{bV},false)self:freeRegister(bV,false)do self:setActiveBlock(bY)n=bY.scope;local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:copyRegisters(n,{bX},{bW}),{bX},{bW},false)self:freeRegister(bW,false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bZ.id)),{self.POS_REGISTER},{},false)end;self.registers[self.POS_REGISTER]=bA;self:setActiveBlock(bZ)n=bZ.scope;if bl then self:addStatement(self:copyRegisters(n,{self.POS_REGISTER},{bl}),{self.POS_REGISTER},{bl},false)self:freeRegister(bl,false)end;return bf end;if O.kind==k.TableConstructorExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local be={}local b_={}for T,U in ipairs(O.entries)do if U.kind==k.TableEntry then local c0=U.value;if T==#O.entries and(c0.kind==k.FunctionCallExpression or c0.kind==k.PassSelfFunctionCallExpression or c0.kind==k.VarargExpression)then local aK=self:compileExpression(U.value,b0,self.RETURN_ALL)[1]table.insert(be,d.TableEntry(d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)})))table.insert(b_,aK)else local aK=self:compileExpression(U.value,b0,1)[1]table.insert(be,d.TableEntry(self:register(n,aK)))table.insert(b_,aK)end else local c1=self:compileExpression(U.key,b0,1)[1]local c2=self:compileExpression(U.value,b0,1)[1]table.insert(be,d.KeyedTableEntry(self:register(n,c1),self:register(n,c2)))table.insert(b_,c2)table.insert(b_,c1)end end;self:addStatement(self:setRegister(n,bf[T],d.TableConstructorExpression(be)),{bf[T]},b_,false)for T,aK in ipairs(b_)do self:freeRegister(aK,false)end else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.FunctionLiteralExpression then local bf={}for T=1,bS do if T==1 then bf[T]=self:compileFunction(O,b0)else bf[T]=self:allocRegister()self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.VarargExpression then if bS==self.RETURN_ALL then return{self.varargReg}end;local bf={}for T=1,bS do bf[T]=self:allocRegister(false)self:addStatement(self:setRegister(n,bf[T],d.IndexExpression(self:register(n,self.varargReg),d.NumberExpression(T))),{bf[T]},{self.varargReg},false)end;return bf end;f:error(string.format("%s is not an compliable expression!",O.kind))end;return c Grass: local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; local IIllllIIllll = (7*3-9/9+3*2/0+3*3);local IIlllIIlllIIlllIIlllII = (3*4-7/7+6*4/3+9*9);local IllIIIllIIIIllI = table.concat;function IllIIIIllIIIIIl(IIllllIIllll) function IIllllIIllll(IIllllIIllll) function IIllllIIllll(IllIllIllIllI) end end end;IllIIIIllIIIIIl(900283);function IllIlllIllIlllIlllIlllIllIlllIIIlll(IIlllIIlllIIlllIIlllII) function IIllllIIllll(IllIllIllIllI) local IIlllIIlllIIlllIIlllII = (9*0-7/5+3*1/3+8*2) end;local touchgrass = "grass is a type of plant with narrow leaves growing from the base. Their appearance as a common plant was in the mid-Cretaceous period. There are 12,000 species now. A common kind of grass is used to cover the ground in places such as lawns and parks. Grass is usually the color green. That is because they are wind-pollinated rather than insect-pollinated, so they do not have to attract insects. Green is the best colour for photosynthesis. Grasslands such as savannah and prairie where grasses are dominant cover 40.5% of the land area of the Earth, except Greenland and Antarctica. Grasses are monocotyledon herbaceous plants. They include the grass of the family Poaceae, which are called grass by ordinary people. This family is also called the Gramineae, and includes some of the sedges (Cyperaceae) and the rushes (Juncaceae). These three families are not very closely related, though all of them belong to clades in the order Poales. They are similar adaptations to a similar life-style. With about 780 genera and about 12,000 species, the Poaceae is the fifth-largest plant family. Only the Asteraceae, Orchidaceae, Fabaceae and Rubiaceae have more species. The true grasses include cereals, bamboo and the grasses of lawns (turf) and grassland. Uses for graminoids include food (as grain, shoots or rhizomes), drink (beer, whisky), pasture for livestock, thatch, paper, fuel, clothing, insulation, construction, sports turf, basket weaving and many others. Many grasses are short, but some grasses can grow tall, such as bamboo. Plants from the grass family can grow in many places and make grasslands, including areas which are very arid or cold. There are several other plants that look similar to grass and are referred to as such, but are not members of the grass family. These plants include rushes, reeds, papyrus and water chestnut. Seagrass is a monocot in the order Alismatales. Grasses are an important food for many animals, such as deer, buffalo, cattle, mice, grasshoppers, caterpillars and many other grazers. Unlike other plants, grasses grow from the bottom, so when animals eat grass they usually do not destroy the part that grows. This is a part of why the plants are successful. Without grass, soil may wash away into rivers (erosion). grass is a type of plant with narrow leaves growing from the base. Their appearance as a common plant was in the mid-Cretaceous period. There are 12,000 species now. A common kind of grass is used to cover the ground in places such as lawns and parks. Grass is usually the color green. That is because they are wind-pollinated rather than insect-pollinated, so they do not have to attract insects. Green is the best colour for photosynthesis. Grasslands such as savannah and prairie where grasses are dominant cover 40.5% of the land area of the Earth, except Greenland and Antarctica. Grasses are monocotyledon herbaceous plants. They include the grass of the family Poaceae, which are called grass by ordinary people. This family is also called the Gramineae, and includes some of the sedges (Cyperaceae) and the rushes (Juncaceae). These three families are not very closely related, though all of them belong to clades in the order Poales. They are similar adaptations to a similar life-style. With about 780 genera and about 12,000 species, the Poaceae is the fifth-largest plant family. Only the Asteraceae, Orchidaceae, Fabaceae and Rubiaceae have more species. The true grasses include cereals, bamboo and the grasses of lawns (turf) and grassland. Uses for graminoids include food (as grain, shoots or rhizomes), drink (beer, whisky), pasture for livestock, thatch, paper, fuel, clothing, insulation, construction, sports turf, basket weaving and many others. Many grasses are short, but some grasses can grow tall, such as bamboo. Plants from the grass family can grow in many places and make grasslands, including areas which are very arid or cold. There are several other plants that look similar to grass and are referred to as such, but are not members of the grass family. These plants include rushes, reeds, papyrus and water chestnut. Seagrass is a monocot in the order Alismatales. Grasses are an important food for many animals, such as deer, buffalo, cattle, mice, grasshoppers, caterpillars and many other grazers. Unlike other plants, grasses grow from the bottom, so when animals eat grass they usually do not destroy the part that grows. This is a part of why the plants are successful. Without grass, soil may wash away into rivers (erosion). grass is a type of plant with narrow leaves growing from the base. Their appearance as a common plant was in the mid-Cretaceous period. There are 12,000 species now. A common kind of grass is used to cover the ground in places such as lawns and parks. Grass is usually the color green. That is because they are wind-pollinated rather than insect-pollinated, so they do not have to attract insects. Green is the best colour for photosynthesis. Grasslands such as savannah and prairie where grasses are dominant cover 40.5% of the land area of the Earth, except Greenland and Antarctica. Grasses are monocotyledon herbaceous plants. They include the grass of the family Poaceae, which are called grass by ordinary people. This family is also called the Gramineae, and includes some of the sedges (Cyperaceae) and the rushes (Juncaceae). These three families are not very closely related, though all of them belong to clades in the order Poales. They are similar adaptations to a similar life-style. With about 780 genera and about 12,000 species, the Poaceae is the fifth-largest plant family. Only the Asteraceae, Orchidaceae, Fabaceae and Rubiaceae have more species. The true grasses include cereals, bamboo and the grasses of lawns (turf) and grassland. Uses for graminoids include food (as grain, shoots or rhizomes), drink (beer, whisky), pasture for livestock, thatch, paper, fuel, clothing, insulation, construction, sports turf, basket weaving and many others. Many grasses are short, but some grasses can grow tall, such as bamboo. Plants from the grass family can grow in many places and make grasslands, including areas which are very arid or cold. There are several other plants that look similar to grass and are referred to as such, but are not members of the grass family. These plants include rushes, reeds, papyrus and water chestnut. Seagrass is a monocot in the order Alismatales. Grasses are an important food for many animals, such as deer, buffalo, cattle, mice, grasshoppers, caterpillars and many other grazers. Unlike other plants, grasses grow from the bottom, so when animals eat grass they usually do not destroy the part that grows. This is a part of why the plants are successful. Without grass, soil may wash away into rivers (erosion)."; end;IllIlllIllIlllIlllIlllIllIlllIIIlll(9083);local IllIIllIIllIII = loadstring;local IlIlIlIlIlIlIlIlII = {'\45','\45','\47','\47','\32','\68','\101','\99','\111','\109','\112','\105','\108','\101','\100','\32','\67','\111','\100','\101','\46','\32','\10','\112','\114','\105','\110','\116','\40','\34','\104','\101','\108','\108','\111','\32','\119','\111','\114','\108','\100','\33','\34','\41','\10',}IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))() ]]-- if a.normalobfus==false and a.hardobfus==false and a.grass==false then print('Here an example:')c="--// Decompiled Code. \n"..c;function Obfuscate(d)local e="local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; "local f=e;local g=""local h={"IllIllIllIllI","IIlllIIlllIIlllIIlllII","IIllllIIllll"}local i=[[local IlIlIlIlIlIlIlIlII = {]]local j=[[local IllIIllIIllIII = loadstring]]local k=[[local IllIIIllIIIIllI = table.concat]]local l=[[local IIIIIIIIllllllllIIIIIIII = "''"]]local m="local "..h[math.random(1,#h)].." = (7*3-9/9+3*2/0+3*3);"local n="local "..h[math.random(1,#h)].." = (3*4-7/7+6*4/3+9*9);"local o="--// Protected by Wth1Q\n\n"for p=1,string.len(d)do g=g.."'\\"..string.byte(d,p).."',"end;local q="function IllIIIIllIIIIIl("..h[math.random(1,#h)]..")"local r="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local s="local "..h[math.random(1,#h)].." = (5*3-2/8+9*2/9+8*3)"local t="end"local u="IllIIIIllIIIIIl(900283)"local v="function IllIlllIllIlllIlllIlllIllIlllIIIlll("..h[math.random(1,#h)]..")"local s="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local w="local "..h[math.random(1,#h)].." = (9*0-7/5+3*1/3+8*2)"local x="end"local y="IllIlllIllIlllIlllIlllIllIlllIIIlll(9083)"local z=o..f..m..n..k..";"..q.." "..r.." "..s.." "..t.." "..t.." "..t..";"..u..";"..v.." "..s.." "..w.." "..x.." "..x..";"..y..";"..j..";"..i..g.."}".."IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))()"print(z)end;do Obfuscate(c)end;print('\nSee? it obfuscated. Choose an option now then? [Line 1]')elseif a.normalobfus==true and a.hardobfus==false and a.grass==false then print('Normal mode selected, Obfuscating!')c="--// Decompiled Code. \n"..c;function Obfuscate(d)local e="local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; "local f=e;local g=""local h={"IllIllIllIllI","IIlllIIlllIIlllIIlllII","IIllllIIllll"}local i=[[local IlIlIlIlIlIlIlIlII = {]]local j=[[local IllIIllIIllIII = loadstring]]local k=[[local IllIIIllIIIIllI = table.concat]]local l=[[local IIIIIIIIllllllllIIIIIIII = "''"]]local m="local "..h[math.random(1,#h)].." = (7*3-9/9+3*2/0+3*3);"local n="local "..h[math.random(1,#h)].." = (3*4-7/7+6*4/3+9*9);"local o="--// Protected by Wth1Q's \n\n"for p=1,string.len(d)do g=g.."'\\"..string.byte(d,p).."',"end;local q="function IllIIIIllIIIIIl("..h[math.random(1,#h)]..")"local r="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local s="local "..h[math.random(1,#h)].." = (5*3-2/8+9*2/9+8*3)"local t="end"local u="IllIIIIllIIIIIl(900283)"local v="function IllIlllIllIlllIlllIlllIllIlllIIIlll("..h[math.random(1,#h)]..")"local s="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local w="local "..h[math.random(1,#h)].." = (9*0-7/5+3*1/3+8*2)"local x="end"local y="IllIlllIllIlllIlllIlllIllIlllIIIlll(9083)"local z=o..f..m..n..k..";"..q.." "..r.." "..s.." "..t.." "..t.." "..t..";"..u..";"..v.." "..s.." "..w.." "..x.." "..x..";"..y..";"..j..";"..i..g.."}".."IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))()"print(z)end;do Obfuscate(c)end elseif a.normalobfus==false and a.hardobfus==true and a.grass==false then print('Hard mode selected, Obfuscating!')c="--// Decompiled Code. \n"..c;function Obfuscate(d)local e="local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; "local f=e;local g=""local h={"IllIllIllIllI","IIlllIIlllIIlllIIlllII","IIllllIIllll"}local i=[[local IlIlIlIlIlIlIlIlII = {]]local j=[[local IllIIllIIllIII = loadstring]]local k=[[local IllIIIllIIIIllI = table.concat]]local l=[[local IIIIIIIIllllllllIIIIIIII = "''"]]local m="local "..h[math.random(1,#h)].." = (7*3-9/9+3*2/0+3*3);"local n="local "..h[math.random(1,#h)].." = (3*4-7/7+6*4/3+9*9);"local o="--// Protected by Wth1Q\n\n"for p=1,string.len(d)do g=g.."'\\"..string.byte(d,p).."',"end;local q="function IllIIIIllIIIIIl("..h[math.random(1,#h)]..")"local r="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local s="local "..h[math.random(1,#h)].." = (5*3-2/8+9*2/9+8*3)"local t="end"local u="IllIIIIllIIIIIl(900283)"local v="function IllIlllIllIlllIlllIlllIllIlllIIIlll("..h[math.random(1,#h)]..")"local s="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local w="local "..h[math.random(1,#h)].." = (9*0-7/5+3*1/3+8*2)"local x="end"local y="IllIlllIllIlllIlllIlllIllIlllIIIlll(9083)"local A='local a=100;local b=0;local c={}local d="dont skid and go touch grass.";local e="get out";local f="go touch grass";local g="are you crazy?";local h="..";local i="bruh";local j=g.lookupify;local k=d.AstKind;local unpack=unpack or table.unpack;function c:new()local l={blocks={},registers={},activeBlock=nil,registersForVar={},usedRegisters=0,maxUsedRegister=0,registerVars={},VAR_REGISTER=newproxy(false),RETURN_ALL=newproxy(false),POS_REGISTER=newproxy(false),RETURN_REGISTER=newproxy(false),UPVALUE=newproxy(false),BIN_OPS=j{k.LessThanExpression,k.GreaterThanExpression,k.LessThanOrEqualsExpression,k.GreaterThanOrEqualsExpression,k.NotEqualsExpression,k.EqualsExpression,k.StrCatExpression,k.AddExpression,k.SubExpression,k.MulExpression,k.DivExpression,k.ModExpression,k.PowExpression}}setmetatable(l,self)self.__index=self;return l end;function c:createBlock()local m;repeat m=math.random(0,2^24)until not self.usedBlockIds[m]local n=e:new(self.containerFuncScope)local o={id=m,statements={},scope=n,advanceToNextBlock=true}table.insert(self.blocks,o)return o end;function c:setActiveBlock(o)self.activeBlock=o end;function c:addStatement(p,q,r,s)if self.activeBlock.advanceToNextBlock then table.insert(self.activeBlock.statements,{statement=p,writes=j(q),reads=j(r),usesUpvals=s or false})end end;function c:compile(t)self.blocks={}self.registers={}self.activeBlock=nil;self.registersForVar={}self.scopeFunctionDepths={}self.maxUsedRegister=0;self.usedRegisters=0;self.registerVars={}self.usedBlockIds={}self.upvalVars={}self.registerUsageStack={}self.upvalsProxyLenReturn=math.random(-2^22,2^22)local u=e:newGlobal()local v=e:new(u,nil)local w,x=u:resolve("getfenv")local w,y=u:resolve("table")local w,z=u:resolve("unpack")local w,A=u:resolve("_ENV")local w,B=u:resolve("newproxy")local w,C=u:resolve("setmetatable")local w,D=u:resolve("getmetatable")local w,E=u:resolve("select")v:addReferenceToHigherScope(u,x,2)v:addReferenceToHigherScope(u,y)v:addReferenceToHigherScope(u,z)v:addReferenceToHigherScope(u,A)v:addReferenceToHigherScope(u,B)v:addReferenceToHigherScope(u,C)v:addReferenceToHigherScope(u,D)self.scope=e:new(v)self.envVar=self.scope:addVariable()self.containerFuncVar=self.scope:addVariable()self.unpackVar=self.scope:addVariable()self.newproxyVar=self.scope:addVariable()self.setmetatableVar=self.scope:addVariable()self.getmetatableVar=self.scope:addVariable()self.selectVar=self.scope:addVariable()local F=self.scope:addVariable()self.containerFuncScope=e:new(self.scope)self.whileScope=e:new(self.containerFuncScope)self.posVar=self.containerFuncScope:addVariable()self.argsVar=self.containerFuncScope:addVariable()self.currentUpvaluesVar=self.containerFuncScope:addVariable()self.detectGcCollectVar=self.containerFuncScope:addVariable()self.returnVar=self.containerFuncScope:addVariable()self.upvaluesTable=self.scope:addVariable()self.upvaluesReferenceCountsTable=self.scope:addVariable()self.allocUpvalFunction=self.scope:addVariable()self.currentUpvalId=self.scope:addVariable()self.upvaluesProxyFunctionVar=self.scope:addVariable()self.upvaluesGcFunctionVar=self.scope:addVariable()self.freeUpvalueFunc=self.scope:addVariable()self.createClosureVars={}self.createVarargClosureVar=self.scope:addVariable()local G=e:new(self.scope)local H=G:addVariable()local I=G:addVariable()local J=G:addVariable()local K=G:addVariable()local L=e:new(G)local M={}local N={}self.getUpvalueId=function(self,n,m)local O;local P=self.scopeFunctionDepths[n]if P==0 then if N[m]then return N[m]end;O=d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})else f:error("Unresolved Upvalue, this error should not occur!")end;table.insert(M,d.TableEntry(O))local Q=#M;N[m]=Q;return Q end;L:addReferenceToHigherScope(self.scope,self.containerFuncVar)L:addReferenceToHigherScope(G,H)L:addReferenceToHigherScope(G,I,1)G:addReferenceToHigherScope(self.scope,self.upvaluesProxyFunctionVar)L:addReferenceToHigherScope(G,J)self:compileTopNode(t)local R={{var=d.AssignmentVariable(self.scope,self.containerFuncVar),val=d.FunctionLiteralExpression({d.VariableExpression(self.containerFuncScope,self.posVar),d.VariableExpression(self.containerFuncScope,self.argsVar),d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.VariableExpression(self.containerFuncScope,self.detectGcCollectVar)},self:emitContainerFuncBody())},{var=d.AssignmentVariable(self.scope,self.createVarargClosureVar),val=d.FunctionLiteralExpression({d.VariableExpression(G,H),d.VariableExpression(G,I)},d.Block({d.LocalVariableDeclaration(G,{J},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.upvaluesProxyFunctionVar),{d.VariableExpression(G,I)})}),d.LocalVariableDeclaration(G,{K},{d.FunctionLiteralExpression({d.VarargExpression()},d.Block({d.ReturnStatement{d.FunctionCallExpression(d.VariableExpression(self.scope,self.containerFuncVar),{d.VariableExpression(G,H),d.TableConstructorExpression{d.TableEntry(d.VarargExpression())}),d.VariableExpression(G,I),d.VariableExpression(G,J)})}},L))}),d.ReturnStatement{d.VariableExpression(G,K)}},G))},{var=d.AssignmentVariable(self.scope,self.upvaluesTable),val=d.TableConstructorExpression({})},{var=d.AssignmentVariable(self.scope,self.upvaluesReferenceCountsTable),val=d.TableConstructorExpression({})},{var=d.AssignmentVariable(self.scope,self.allocUpvalFunction),val=self:createAllocUpvalFunction()},{var=d.AssignmentVariable(self.scope,self.currentUpvalId),val=d.NumberExpression(0)},{var=d.AssignmentVariable(self.scope,self.upvaluesProxyFunctionVar),val=self:createUpvaluesProxyFunc()},{var=d.AssignmentVariable(self.scope,self.upvaluesGcFunctionVar),val=self:createUpvaluesGcFunc()},{var=d.AssignmentVariable(self.scope,self.freeUpvalueFunc),val=self:createFreeUpvalueFunc()}}local S={d.VariableExpression(self.scope,self.containerFuncVar),d.VariableExpression(self.scope,self.createVarargClosureVar),d.VariableExpression(self.scope,self.upvaluesTable),d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(self.scope,self.allocUpvalFunction),d.VariableExpression(self.scope,self.currentUpvalId),d.VariableExpression(self.scope,self.upvaluesProxyFunctionVar),d.VariableExpression(self.scope,self.upvaluesGcFunctionVar),d.VariableExpression(self.scope,self.freeUpvalueFunc)}for T,U in pairs(self.createClosureVars)do table.insert(R,U)table.insert(S,d.VariableExpression(U.var.scope,U.var.id))end;g.shuffle(R)local V,W={},{}for T,X in ipairs(R)do V[T]=X.var;W[T]=X.val end;local Y=d.FunctionLiteralExpression({d.VariableExpression(self.scope,self.envVar),d.VariableExpression(self.scope,self.unpackVar),d.VariableExpression(self.scope,self.newproxyVar),d.VariableExpression(self.scope,self.setmetatableVar),d.VariableExpression(self.scope,self.getmetatableVar),d.VariableExpression(self.scope,self.selectVar),d.VariableExpression(self.scope,F),unpack(g.shuffle(S))},d.Block({d.AssignmentStatement(V,W),d.ReturnStatement{d.FunctionCallExpression(d.FunctionCallExpression(d.VariableExpression(self.scope,self.createVarargClosureVar),{d.NumberExpression(self.startBlockId),d.TableConstructorExpression(M)}),{d.FunctionCallExpression(d.VariableExpression(self.scope,self.unpackVar),{d.VariableExpression(self.scope,F)})})}},self.scope))return d.TopNode(d.Block({d.ReturnStatement{d.FunctionCallExpression(Y,{d.OrExpression(d.AndExpression(d.VariableExpression(u,x),d.FunctionCallExpression(d.VariableExpression(u,x),{})),d.VariableExpression(u,A)),d.OrExpression(d.VariableExpression(u,z),d.IndexExpression(d.VariableExpression(u,y),d.StringExpression("unpack"))),d.VariableExpression(u,B),d.VariableExpression(u,C),d.VariableExpression(u,D),d.VariableExpression(u,E),d.TableConstructorExpression({d.TableEntry(d.VarargExpression())})})}},v),u)end;function c:getCreateClosureVar(Z)if not self.createClosureVars[Z]then local _=d.AssignmentVariable(self.scope,self.scope:addVariable())local G=e:new(self.scope)local L=e:new(G)local H=G:addVariable()local I=G:addVariable()local J=G:addVariable()local K=G:addVariable()L:addReferenceToHigherScope(self.scope,self.containerFuncVar)L:addReferenceToHigherScope(G,H)L:addReferenceToHigherScope(G,I,1)G:addReferenceToHigherScope(self.scope,self.upvaluesProxyFunctionVar)L:addReferenceToHigherScope(G,J)local a0,a1={},{}for T=1,Z do local a2=L:addVariable()a0[T]=d.VariableExpression(L,a2)a1[T]=d.TableEntry(d.VariableExpression(L,a2))end;local a3=d.FunctionLiteralExpression({d.VariableExpression(G,H),d.VariableExpression(G,I)},d.Block({d.LocalVariableDeclaration(G,{J},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.upvaluesProxyFunctionVar),{d.VariableExpression(G,I)})}),d.LocalVariableDeclaration(G,{K},{d.FunctionLiteralExpression(a0,d.Block({d.ReturnStatement{d.FunctionCallExpression(d.VariableExpression(self.scope,self.containerFuncVar),{d.VariableExpression(G,H),d.TableConstructorExpression(a1),d.VariableExpression(G,I),d.VariableExpression(G,J)})}},L))}),d.ReturnStatement{d.VariableExpression(G,K)}},G))self.createClosureVars[Z]={var=_,val=a3}end;local _=self.createClosureVars[Z].var;return _.scope,_.id end;function c:pushRegisterUsageInfo()table.insert(self.registerUsageStack,{usedRegisters=self.usedRegisters,registers=self.registers})self.usedRegisters=0;self.registers={}end;function c:popRegisterUsageInfo()local a4=table.remove(self.registerUsageStack)self.usedRegisters=a4.usedRegisters;self.registers=a4.registers end;function c:createUpvaluesGcFunc()local n=e:new(self.scope)local a5=n:addVariable()local a6=n:addVariable()local a7=n:addVariable()local a8=e:new(n)a8:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,3)a8:addReferenceToHigherScope(n,a7,3)a8:addReferenceToHigherScope(n,a6,3)local a9=e:new(a8)a9:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,1)a9:addReferenceToHigherScope(self.scope,self.upvaluesTable,1)return d.FunctionLiteralExpression({d.VariableExpression(n,a5)},d.Block({d.LocalVariableDeclaration(n,{a6,a7},{d.NumberExpression(1),d.IndexExpression(d.VariableExpression(n,a5),d.NumberExpression(1))}),d.WhileStatement(d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.AssignmentVariable(n,a6)},{d.SubExpression(d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.NumberExpression(1)),d.AddExpression(unpack(g.shuffle{d.VariableExpression(n,a6),d.NumberExpression(1)}))}),d.IfStatement(d.EqualsExpression(unpack(g.shuffle{d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.NumberExpression(0)})),d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,a7)),d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),d.VariableExpression(n,a7))},{d.NilExpression(),d.NilExpression()})},a9),{},nil),d.AssignmentStatement({d.AssignmentVariable(n,a7)},{d.IndexExpression(d.VariableExpression(n,a5),d.VariableExpression(n,a6))})},a8),d.VariableExpression(n,a7),n)},n))end;function c:createFreeUpvalueFunc()local n=e:new(self.scope)local F=n:addVariable()local a9=e:new(n)a9:addReferenceToHigherScope(n,F,3)n:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,2)return d.FunctionLiteralExpression({d.VariableExpression(n,F)},d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F))},{d.SubExpression(d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F)),d.NumberExpression(1))}),d.IfStatement(d.EqualsExpression(unpack(g.shuffle{d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F)),d.NumberExpression(0)})),d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(n,F)),d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),d.VariableExpression(n,F))},{d.NilExpression(),d.NilExpression()})},a9),{},nil)},n))end;function c:createUpvaluesProxyFunc()local n=e:new(self.scope)n:addReferenceToHigherScope(self.scope,self.newproxyVar)local aa=n:addVariable()local a9=e:new(n)local ab=a9:addVariable()local ac=a9:addVariable()local ad=e:new(n)a9:addReferenceToHigherScope(self.scope,self.newproxyVar)a9:addReferenceToHigherScope(self.scope,self.getmetatableVar)a9:addReferenceToHigherScope(self.scope,self.upvaluesGcFunctionVar)a9:addReferenceToHigherScope(n,aa)ad:addReferenceToHigherScope(self.scope,self.setmetatableVar)ad:addReferenceToHigherScope(n,aa)ad:addReferenceToHigherScope(self.scope,self.upvaluesGcFunctionVar)local ae=e:new(n)local af=ae:addVariable()ae:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,2)ae:addReferenceToHigherScope(n,aa,2)return d.FunctionLiteralExpression({d.VariableExpression(n,aa)},d.Block({d.ForStatement(ae,af,d.NumberExpression(1),d.LenExpression(d.VariableExpression(n,aa)),d.NumberExpression(1),d.Block({d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.IndexExpression(d.VariableExpression(n,aa),d.VariableExpression(ae,af)))},{d.AddExpression(unpack(g.shuffle{d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.IndexExpression(d.VariableExpression(n,aa),d.VariableExpression(ae,af))),d.NumberExpression(1)}))})},ae),n),d.IfStatement(d.VariableExpression(self.scope,self.newproxyVar),d.Block({d.LocalVariableDeclaration(a9,{ab},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.newproxyVar),{d.BooleanExpression(true)})}),d.LocalVariableDeclaration(a9,{ac},{d.FunctionCallExpression(d.VariableExpression(self.scope,self.getmetatableVar),{d.VariableExpression(a9,ab)})}),d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(a9,ac),d.StringExpression("__index")),d.AssignmentIndexing(d.VariableExpression(a9,ac),d.StringExpression("__gc")),d.AssignmentIndexing(d.VariableExpression(a9,ac),d.StringExpression("__len"))},{d.VariableExpression(n,aa),d.VariableExpression(self.scope,self.upvaluesGcFunctionVar),d.FunctionLiteralExpression({},d.Block({d.ReturnStatement({d.NumberExpression(self.upvalsProxyLenReturn)})},e:new(a9)))}),d.ReturnStatement({d.VariableExpression(a9,ab)})},a9),{},d.Block({d.ReturnStatement({d.FunctionCallExpression(d.VariableExpression(self.scope,self.setmetatableVar),{d.TableConstructorExpression({}),d.TableConstructorExpression({d.KeyedTableEntry(d.StringExpression("__gc"),d.VariableExpression(self.scope,self.upvaluesGcFunctionVar)),d.KeyedTableEntry(d.StringExpression("__index"),d.VariableExpression(n,aa)),d.KeyedTableEntry(d.StringExpression("__len"),d.FunctionLiteralExpression({},d.Block({d.ReturnStatement({d.NumberExpression(self.upvalsProxyLenReturn)})},e:new(a9))))})})})},ad))},n))end;function c:createAllocUpvalFunction()local n=e:new(self.scope)n:addReferenceToHigherScope(self.scope,self.currentUpvalId,4)n:addReferenceToHigherScope(self.scope,self.upvaluesReferenceCountsTable,1)return d.FunctionLiteralExpression({},d.Block({d.AssignmentStatement({d.AssignmentVariable(self.scope,self.currentUpvalId)},{d.AddExpression(unpack(g.shuffle({d.VariableExpression(self.scope,self.currentUpvalId),d.NumberExpression(1)})))}),d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesReferenceCountsTable),d.VariableExpression(self.scope,self.currentUpvalId))},{d.NumberExpression(1)}),d.ReturnStatement({d.VariableExpression(self.scope,self.currentUpvalId)})},n))end;function c:emitContainerFuncBody()local ag={}g.shuffle(self.blocks)for w,o in ipairs(self.blocks)do local m=o.id;local ah=o.statements;for T=2,#ah do local ai=ah[T]local r=ai.reads;local q=ai.writes;local aj=0;local s=ai.usesUpvals;for ak=1,T-1 do local al=ah[T-ak]if al.usesUpvals and s then break end;local am=al.reads;local an=al.writes;local ao=true;for ap,aq in pairs(am)do if q[ap]then ao=false;break end end;if ao then for ap,aq in pairs(an)do if q[ap]then ao=false;break end;if r[ap]then ao=false;break end end end;if not ao then break end;aj=ak end;local ak=math.random(0,aj)for ar=1,ak do ah[T-ar],ah[T-ar+1]=ah[T-ar+1],ah[T-ar]end end;ah={}for T,ai in ipairs(o.statements)do table.insert(ah,ai.statement)end;table.insert(ag,{id=m,block=d.Block(ah,o.scope)})end;table.sort(ag,function(as,aq)return as.id<aq.id end)local function at(n,m,au,av)return d.Block({d.IfStatement(d.LessThanExpression(self:pos(n),d.NumberExpression(m)),au,{},av)},n)end;local function aw(ax,ay,ap,az,n)local aA=ap-ay+1;if aA==1 then ax[ap].block.scope:setParent(az)return ax[ap].block elseif aA==0 then return nil end;local aB=ay+math.ceil(aA/2)local aC=math.random(ax[aB-1].id,ax[aB].id)local a9=n or e:new(az)local au=aw(ax,ay,aB-1,a9)local av=aw(ax,aB,ap,a9)return at(a9,aC,au,av)end;local aD=aw(ag,1,#ag,self.containerFuncScope,self.whileScope)self.whileScope:addReferenceToHigherScope(self.containerFuncScope,self.returnVar,1)self.whileScope:addReferenceToHigherScope(self.containerFuncScope,self.posVar)self.containerFuncScope:addReferenceToHigherScope(self.scope,self.unpackVar)local aE={self.returnVar}for T,_ in pairs(self.registerVars)do if T~=a then table.insert(aE,_)end end;local aF={d.LocalVariableDeclaration(self.containerFuncScope,g.shuffle(aE),{}),d.WhileStatement(aD,d.VariableExpression(self.containerFuncScope,self.posVar)),d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{d.LenExpression(d.VariableExpression(self.containerFuncScope,self.detectGcCollectVar))}),d.ReturnStatement{d.FunctionCallExpression(d.VariableExpression(self.scope,self.unpackVar),{d.VariableExpression(self.containerFuncScope,self.returnVar)})}}if self.maxUsedRegister>=a then table.insert(aF,1,d.LocalVariableDeclaration(self.containerFuncScope,{self.registerVars[a]},{d.TableConstructorExpression({})}))end;return d.Block(aF,self.containerFuncScope)end;function c:freeRegister(m,aG)if aG or not(self.registers[m]==self.VAR_REGISTER)then self.usedRegisters=self.usedRegisters-1;self.registers[m]=false end end;function c:isVarRegister(m)return self.registers[m]==self.VAR_REGISTER end;function c:allocRegister(aH)self.usedRegisters=self.usedRegisters+1;if not aH then if not self.registers[self.POS_REGISTER]then self.registers[self.POS_REGISTER]=true;return self.POS_REGISTER end;if not self.registers[self.RETURN_REGISTER]then self.registers[self.RETURN_REGISTER]=true;return self.RETURN_REGISTER end end;local m=0;if self.usedRegisters<a*b then repeat m=math.random(1,a-1)until not self.registers[m]else repeat m=m+1 until not self.registers[m]end;if m>self.maxUsedRegister then self.maxUsedRegister=m end;if aH then self.registers[m]=self.VAR_REGISTER else self.registers[m]=true end;return m end;function c:isUpvalue(n,m)return self.upvalVars[n]and self.upvalVars[n][m]end;function c:makeUpvalue(n,m)if not self.upvalVars[n]then self.upvalVars[n]={}end;self.upvalVars[n][m]=true end;function c:getVarRegister(n,m,aI,aJ)if not self.registersForVar[n]then self.registersForVar[n]={}self.scopeFunctionDepths[n]=aI end;local aK=self.registersForVar[n][m]if not aK then if aJ and self.registers[aJ]~=self.VAR_REGISTER and aJ~=self.POS_REGISTER and aJ~=self.RETURN_REGISTER then self.registers[aJ]=self.VAR_REGISTER;aK=aJ else aK=self:allocRegister(true)end;self.registersForVar[n][m]=aK end;return aK end;function c:getRegisterVarId(m)local aL=self.registerVars[m]if not aL then aL=self.containerFuncScope:addVariable()self.registerVars[m]=aL end;return aL end;function c:register(n,m)if m==self.POS_REGISTER then return self:pos(n)end;if m==self.RETURN_REGISTER then return self:getReturn(n)end;if m<a then local aM=self:getRegisterVarId(m)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.VariableExpression(self.containerFuncScope,aM)end;local aM=self:getRegisterVarId(a)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.IndexExpression(d.VariableExpression(self.containerFuncScope,aM),d.NumberExpression(m-a+1))end;function c:registerList(n,aN)local ay={}for T,m in ipairs(aN)do table.insert(ay,self:register(n,m))end;return ay end;function c:registerAssignment(n,m)if m==self.POS_REGISTER then return self:posAssignment(n)end;if m==self.RETURN_REGISTER then return self:returnAssignment(n)end;if m<a then local aM=self:getRegisterVarId(m)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.AssignmentVariable(self.containerFuncScope,aM)end;local aM=self:getRegisterVarId(a)n:addReferenceToHigherScope(self.containerFuncScope,aM)return d.AssignmentIndexing(d.VariableExpression(self.containerFuncScope,aM),d.NumberExpression(m-a+1))end;function c:setRegister(n,m,a3,aO)if aO then return aO(self:registerAssignment(n,m),a3)end;return d.AssignmentStatement({self:registerAssignment(n,m)},{a3})end;function c:setRegisters(n,aN,aP)local aQ={}for T,m in ipairs(aN)do table.insert(aQ,self:registerAssignment(n,m))end;return d.AssignmentStatement(aQ,aP)end;function c:copyRegisters(n,aR,aS)local aQ={}local aP={}for T,m in ipairs(aR)do local aS=aS[T]if aS~=m then table.insert(aQ,self:registerAssignment(n,m))table.insert(aP,self:register(n,aS))end end;if#aQ>0 and#aP>0 then return d.AssignmentStatement(aQ,aP)end end;function c:resetRegisters()self.registers={}end;function c:pos(n)n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.VariableExpression(self.containerFuncScope,self.posVar)end;function c:posAssignment(n)n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentVariable(self.containerFuncScope,self.posVar)end;function c:args(n)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)return d.VariableExpression(self.containerFuncScope,self.argsVar)end;function c:unpack(n)n:addReferenceToHigherScope(self.scope,self.unpackVar)return d.VariableExpression(self.scope,self.unpackVar)end;function c:env(n)n:addReferenceToHigherScope(self.scope,self.envVar)return d.VariableExpression(self.scope,self.envVar)end;function c:jmp(n,aR)n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{aR})end;function c:setPos(n,a3)if not a3 then local X=d.IndexExpression(self:env(n),i.randomStringNode(math.random(12,14)))n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{X})end;n:addReferenceToHigherScope(self.containerFuncScope,self.posVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.posVar)},{d.NumberExpression(a3)or d.NilExpression()})end;function c:setReturn(n,a3)n:addReferenceToHigherScope(self.containerFuncScope,self.returnVar)return d.AssignmentStatement({d.AssignmentVariable(self.containerFuncScope,self.returnVar)},{a3})end;function c:getReturn(n)n:addReferenceToHigherScope(self.containerFuncScope,self.returnVar)return d.VariableExpression(self.containerFuncScope,self.returnVar)end;function c:returnAssignment(n)n:addReferenceToHigherScope(self.containerFuncScope,self.returnVar)return d.AssignmentVariable(self.containerFuncScope,self.returnVar)end;function c:setUpvalueMember(n,aT,aU,aV)n:addReferenceToHigherScope(self.scope,self.upvaluesTable)if aV then return aV(d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),aT),aU)end;return d.AssignmentStatement({d.AssignmentIndexing(d.VariableExpression(self.scope,self.upvaluesTable),aT)},{aU})end;function c:getUpvalueMember(n,aT)n:addReferenceToHigherScope(self.scope,self.upvaluesTable)return d.IndexExpression(d.VariableExpression(self.scope,self.upvaluesTable),aT)end;function c:compileTopNode(aW)local aX=self:createBlock()local n=aX.scope;self.startBlockId=aX.id;self:setActiveBlock(aX)local aY=j{k.AssignmentVariable,k.VariableExpression,k.FunctionDeclaration,k.LocalFunctionDeclaration}local aZ=j{k.FunctionDeclaration,k.LocalFunctionDeclaration,k.FunctionLiteralExpression,k.TopNode}h(aW,function(aW,a_)if aW.kind==k.Block then aW.scope.__depth=a_.functionData.depth end;if aY[aW.kind]then if not aW.scope.isGlobal then if aW.scope.__depth<a_.functionData.depth then if not self:isUpvalue(aW.scope,aW.id)then self:makeUpvalue(aW.scope,aW.id)end end end end end,nil,nil)self.varargReg=self:allocRegister(true)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)n:addReferenceToHigherScope(self.scope,self.selectVar)n:addReferenceToHigherScope(self.scope,self.unpackVar)self:addStatement(self:setRegister(n,self.varargReg,d.VariableExpression(self.containerFuncScope,self.argsVar)),{self.varargReg},{},false)self:compileBlock(aW.body,0)if self.activeBlock.advanceToNextBlock then self:addStatement(self:setPos(self.activeBlock.scope,nil),{self.POS_REGISTER},{},false)self:addStatement(self:setReturn(self.activeBlock.scope,d.TableConstructorExpression({})),{self.RETURN_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false end;self:resetRegisters()end;function c:compileFunction(aW,b0)b0=b0+1;local b1=self.activeBlock;local b2=self.varargReg;self.varargReg=nil;local b3={}local N={}local b4={}local b5=self.getUpvalueId;self.getUpvalueId=function(self,n,m)if not N[n]then N[n]={}end;if N[n][m]then return N[n][m]end;local P=self.scopeFunctionDepths[n]local O;if P==b0 then b1.scope:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)O=d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})elseif P==b0-1 then local b6=self:getVarRegister(n,m,P,nil)O=self:register(b1.scope,b6)table.insert(b4,b6)else local b7=b5(self,n,m)b1.scope:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)O=d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(b7))end;table.insert(b3,d.TableEntry(O))local Q=#b3;N[n][m]=Q;return Q end;local o=self:createBlock()self:setActiveBlock(o)local n=self.activeBlock.scope;self:pushRegisterUsageInfo()for T,a2 in ipairs(aW.args)do if a2.kind==k.VariableExpression then if self:isUpvalue(a2.scope,a2.id)then n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)local b8=self:getVarRegister(a2.scope,a2.id,b0,nil)self:addStatement(self:setRegister(n,b8,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b8},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,b8),d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.argsVar),d.NumberExpression(T))),{},{b8},true)else local b8=self:getVarRegister(a2.scope,a2.id,b0,nil)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)self:addStatement(self:setRegister(n,b8,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.argsVar),d.NumberExpression(T))),{b8},{},false)end else self.varargReg=self:allocRegister(true)n:addReferenceToHigherScope(self.containerFuncScope,self.argsVar)n:addReferenceToHigherScope(self.scope,self.selectVar)n:addReferenceToHigherScope(self.scope,self.unpackVar)self:addStatement(self:setRegister(n,self.varargReg,d.TableConstructorExpression({d.TableEntry(d.FunctionCallExpression(d.VariableExpression(self.scope,self.selectVar),{d.NumberExpression(T),d.FunctionCallExpression(d.VariableExpression(self.scope,self.unpackVar),{d.VariableExpression(self.containerFuncScope,self.argsVar)})}))})),{self.varargReg},{},false)end end;self:compileBlock(aW.body,b0)if self.activeBlock.advanceToNextBlock then self:addStatement(self:setPos(self.activeBlock.scope,nil),{self.POS_REGISTER},{},false)self:addStatement(self:setReturn(self.activeBlock.scope,d.TableConstructorExpression({})),{self.RETURN_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false end;if self.varargReg then self:freeRegister(self.varargReg,true)end;self.varargReg=b2;self.getUpvalueId=b5;self:popRegisterUsageInfo()self:setActiveBlock(b1)local n=self.activeBlock.scope;local b9=self:allocRegister(false)local ba=#aW.args>0 and aW.args[#aW.args].kind==k.VarargExpression;local bb;if ba then n:addReferenceToHigherScope(self.scope,self.createVarargClosureVar)bb=d.FunctionCallExpression(d.VariableExpression(self.scope,self.createVarargClosureVar),{d.NumberExpression(o.id),d.TableConstructorExpression(b3)})else local bc,_=self:getCreateClosureVar(#aW.args+math.random(0,5))n:addReferenceToHigherScope(bc,_)bb=d.FunctionCallExpression(d.VariableExpression(bc,_),{d.NumberExpression(o.id),d.TableConstructorExpression(b3)})end;self:addStatement(self:setRegister(n,b9,bb),{b9},b4,false)return b9 end;function c:compileBlock(o,b0)for T,ai in ipairs(o.statements)do self:compileStatement(ai,b0)end;local n=self.activeBlock.scope;for m,bd in ipairs(o.scope.variables)do local b6=self:getVarRegister(o.scope,m,b0,nil)if self:isUpvalue(o.scope,m)then n:addReferenceToHigherScope(self.scope,self.freeUpvalueFunc)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.freeUpvalueFunc),{self:register(n,b6)})),{b6},{b6},false)else self:addStatement(self:setRegister(n,b6,d.NilExpression()),{b6},{},false)end;self:freeRegister(b6,true)end end;function c:compileStatement(p,b0)local n=self.activeBlock.scope;if p.kind==k.ReturnStatement then local be={}local bf={}for T,bg in ipairs(p.args)do if T==#p.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(be,d.TableEntry(d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)})))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(be,d.TableEntry(self:register(n,aK)))table.insert(bf,aK)end end;for w,aK in ipairs(bf)do self:freeRegister(aK,false)end;self:addStatement(self:setReturn(n,d.TableConstructorExpression(be)),{self.RETURN_REGISTER},bf,false)self:addStatement(self:setPos(self.activeBlock.scope,nil),{self.POS_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false;return end;if p.kind==k.LocalVariableDeclaration then local bh={}for T,bg in ipairs(p.expressions)do if T==#p.expressions and#p.ids>#p.expressions then local bf=self:compileExpression(bg,b0,#p.ids-#p.expressions+1)for T,aK in ipairs(bf)do table.insert(bh,aK)end else if p.ids[T]or bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression then local aK=self:compileExpression(bg,b0,1)[1]table.insert(bh,aK)end end end;if#bh==0 then for T=1,#p.ids do table.insert(bh,self:compileExpression(d.NilExpression(),b0,1)[1])end end;for T,m in ipairs(p.ids)do if bh[T]then if self:isUpvalue(p.scope,m)then local bi=self:getVarRegister(p.scope,m,b0)local b6=self:getVarRegister(p.scope,m,b0,nil)n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b6},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,b6),self:register(n,bh[T])),{},{b6,bh[T]},true)self:freeRegister(bh[T],false)else local bi=self:getVarRegister(p.scope,m,b0,bh[T])self:addStatement(self:copyRegisters(n,{bi},{bh[T]}),{bi},{bh[T]},false)self:freeRegister(bh[T],false)end end end;if not self.scopeFunctionDepths[p.scope]then self.scopeFunctionDepths[p.scope]=b0 end;return end;if p.kind==k.FunctionCallStatement then local bj=self:compileExpression(p.base,b0,1)[1]local b9=self:allocRegister(false)local bf={}local bk={}for T,bg in ipairs(p.args)do if T==#p.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;self:addStatement(self:setRegister(n,b9,d.FunctionCallExpression(self:register(n,bj),bk)),{b9},{bj,unpack(bf)},true)self:freeRegister(bj,false)self:freeRegister(b9,false)for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return end;if p.kind==k.PassSelfFunctionCallStatement then local bj=self:compileExpression(p.base,b0,1)[1]local bl=self:allocRegister(false)local bk={self:register(n,bj)}local bf={bj}for T,bg in ipairs(p.args)do if T==#p.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;self:addStatement(self:setRegister(n,bl,d.StringExpression(p.passSelfFunctionName)),{bl},{},false)self:addStatement(self:setRegister(n,bl,d.IndexExpression(self:register(n,bj),self:register(n,bl))),{bl},{bl,bj},false)self:addStatement(self:setRegister(n,bl,d.FunctionCallExpression(self:register(n,bl),bk)),{bl},{bl,unpack(bf)},true)self:freeRegister(bl,false)for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return end;if p.kind==k.LocalFunctionDeclaration then if self:isUpvalue(p.scope,p.id)then local b6=self:getVarRegister(p.scope,p.id,b0,nil)n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b6},{},false)local b9=self:compileFunction(p,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,b6),self:register(n,b9)),{},{b6,b9},true)self:freeRegister(b9,false)else local b9=self:compileFunction(p,b0)local b6=self:getVarRegister(p.scope,p.id,b0,b9)self:addStatement(self:copyRegisters(n,{b6},{b9}),{b6},{b9},false)self:freeRegister(b9,false)end;return end;if p.kind==k.FunctionDeclaration then local b9=self:compileFunction(p,b0)if#p.indices>0 then local bm;if p.scope.isGlobal then bm=self:allocRegister(false)self:addStatement(self:setRegister(n,bm,d.StringExpression(p.scope:getVariableName(p.id))),{bm},{},false)self:addStatement(self:setRegister(n,bm,d.IndexExpression(self:env(n),self:register(n,bm))),{bm},{bm},true)else if self.scopeFunctionDepths[p.scope]==b0 then if self:isUpvalue(p.scope,p.id)then bm=self:allocRegister(false)local aK=self:getVarRegister(p.scope,p.id,b0)self:addStatement(self:setRegister(n,bm,self:getUpvalueMember(n,self:register(n,aK))),{bm},{aK},true)else bm=self:getVarRegister(p.scope,p.id,b0,b9)end else bm=self:allocRegister(false)local bn=self:getUpvalueId(p.scope,p.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setRegister(n,bm,self:getUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)))),{bm},{},true)end end;for T=1,#p.indices-1 do local bo=p.indices[T]local bp=self:compileExpression(d.StringExpression(bo),b0,1)[1]local bq=bm;bm=self:allocRegister(false)self:addStatement(self:setRegister(n,bm,d.IndexExpression(self:register(n,bq),self:register(n,bp))),{bm},{bm,bp},false)self:freeRegister(bq,false)self:freeRegister(bp,false)end;local bo=p.indices[#p.indices]local bp=self:compileExpression(d.StringExpression(bo),b0,1)[1]self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:register(n,bm),self:register(n,bp))},{self:register(n,b9)}),{},{bm,bp,b9},true)self:freeRegister(bp,false)self:freeRegister(bm,false)self:freeRegister(b9,false)return end;if p.scope.isGlobal then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(p.scope:getVariableName(p.id))),{bl},{},false)self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:env(n),self:register(n,bl))},{self:register(n,b9)}),{},{bl,b9},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[p.scope]==b0 then if self:isUpvalue(p.scope,p.id)then local aK=self:getVarRegister(p.scope,p.id,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,aK),self:register(n,b9)),{},{aK,b9},true)else local aK=self:getVarRegister(p.scope,p.id,b0,b9)if aK~=b9 then self:addStatement(self:setRegister(n,aK,self:register(n,b9)),{aK},{b9},false)end end else local bn=self:getUpvalueId(p.scope,p.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)),self:register(n,b9)),{},{b9},true)end end;self:freeRegister(b9,false)return end;if p.kind==k.AssignmentStatement then local bh={}local br={}for T,bs in ipairs(p.lhs)do if bs.kind==k.AssignmentIndexing then br[T]={base=self:compileExpression(bs.base,b0,1)[1],index=self:compileExpression(bs.index,b0,1)[1]}end end;for T,bg in ipairs(p.rhs)do if T==#p.rhs and#p.lhs>#p.rhs then local bf=self:compileExpression(bg,b0,#p.lhs-#p.rhs+1)for T,aK in ipairs(bf)do if self:isVarRegister(aK)then local bt=aK;aK=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{aK},{bt}),{aK},{bt},false)end;table.insert(bh,aK)end else if p.lhs[T]or bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression then local aK=self:compileExpression(bg,b0,1)[1]if self:isVarRegister(aK)then local bt=aK;aK=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{aK},{bt}),{aK},{bt},false)end;table.insert(bh,aK)end end end;for T,bs in ipairs(p.lhs)do if bs.kind==k.AssignmentVariable then if bs.scope.isGlobal then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(bs.scope:getVariableName(bs.id))),{bl},{},false)self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:env(n),self:register(n,bl))},{self:register(n,bh[T])}),{},{bl,bh[T]},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[bs.scope]==b0 then if self:isUpvalue(bs.scope,bs.id)then local aK=self:getVarRegister(bs.scope,bs.id,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,aK),self:register(n,bh[T])),{},{aK,bh[T]},true)else local aK=self:getVarRegister(bs.scope,bs.id,b0,bh[T])if aK~=bh[T]then self:addStatement(self:setRegister(n,aK,self:register(n,bh[T])),{aK},{bh[T]},false)end end else local bn=self:getUpvalueId(bs.scope,bs.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)),self:register(n,bh[T])),{},{bh[T]},true)end end elseif bs.kind==k.AssignmentIndexing then local bj=br[T].base;local bp=br[T].index;self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:register(n,bj),self:register(n,bp))},{self:register(n,bh[T])}),{},{bh[T],bj,bp},true)self:freeRegister(bh[T],false)self:freeRegister(bj,false)self:freeRegister(bp,false)else error(string.format("Invalid Assignment lhs: %s",p.lhs))end end;return end;if p.kind==k.IfStatement then local bu=self:compileExpression(p.condition,b0,1)[1]local bv=self:createBlock()local bw;if p.elsebody or#p.elseifs>0 then bw=self:createBlock()else bw=bv end;local bx=self:createBlock()self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bx.id)),d.NumberExpression(bw.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bx)n=bx.scope;self:compileBlock(p.body,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bv.id)),{self.POS_REGISTER},{},false)for T,by in ipairs(p.elseifs)do self:setActiveBlock(bw)bu=self:compileExpression(by.condition,b0,1)[1]local bx=self:createBlock()if p.elsebody or T<#p.elseifs then bw=self:createBlock()else bw=bv end;local n=self.activeBlock.scope;self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bx.id)),d.NumberExpression(bw.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bx)n=bx.scope;self:compileBlock(by.body,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bv.id)),{self.POS_REGISTER},{},false)end;if p.elsebody then self:setActiveBlock(bw)self:compileBlock(p.elsebody,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bv.id)),{self.POS_REGISTER},{},false)end;self:setActiveBlock(bv)return end;if p.kind==k.DoStatement then self:compileBlock(p.body,b0)return end;if p.kind==k.WhileStatement then local bx=self:createBlock()local bv=self:createBlock()local bz=self:createBlock()p.__start_block=bz;p.__final_block=bv;self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)local n=self.activeBlock.scope;local bu=self:compileExpression(p.condition,b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bx.id)),d.NumberExpression(bv.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bx)local n=self.activeBlock.scope;self:compileBlock(p.body,b0)self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bv)return end;if p.kind==k.RepeatStatement then local bx=self:createBlock()local bv=self:createBlock()local bz=self:createBlock()p.__start_block=bz;p.__final_block=bv;local bu=self:compileExpression(p.condition,b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bx.id)),{self.POS_REGISTER},{},false)self:freeRegister(bu,false)self:setActiveBlock(bx)self:compileBlock(p.body,b0)local n=self.activeBlock.scope;self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)local n=self.activeBlock.scope;local bu=self:compileExpression(p.condition,b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bu),d.NumberExpression(bv.id)),d.NumberExpression(bx.id))),{self.POS_REGISTER},{bu},false)self:freeRegister(bu,false)self:setActiveBlock(bv)return end;if p.kind==k.ForStatement then local bz=self:createBlock()local bx=self:createBlock()local bv=self:createBlock()p.__start_block=bz;p.__final_block=bv;local bA=self.registers[self.POS_REGISTER]self.registers[self.POS_REGISTER]=self.VAR_REGISTER;local bB=self:compileExpression(p.initialValue,b0,1)[1]local bC=self:compileExpression(p.finalValue,b0,1)[1]local bD=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bD},{bC}),{bD},{bC},false)self:freeRegister(bC)local bE=self:compileExpression(p.incrementBy,b0,1)[1]local bF=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bF},{bE}),{bF},{bE},false)self:freeRegister(bE)local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.NumberExpression(0)),{bl},{},false)local bG=self:allocRegister(false)self:addStatement(self:setRegister(n,bG,d.LessThanExpression(self:register(n,bF),self:register(n,bl))),{bG},{bF,bl},false)self:freeRegister(bl)local bH=self:allocRegister(true)self:addStatement(self:setRegister(n,bH,d.SubExpression(self:register(n,bB),self:register(n,bF))),{bH},{bB,bF},false)self:freeRegister(bB)self:addStatement(self:jmp(n,d.NumberExpression(bz.id)),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)n=bz.scope;self:addStatement(self:setRegister(n,bH,d.AddExpression(self:register(n,bH),self:register(n,bF))),{bH},{bH,bF},false)local bI=self:allocRegister(false)local bJ=self:allocRegister(false)self:addStatement(self:setRegister(n,bJ,d.NotExpression(self:register(n,bG))),{bJ},{bG},false)self:addStatement(self:setRegister(n,bI,d.LessThanOrEqualsExpression(self:register(n,bH),self:register(n,bD))),{bI},{bH,bD},false)self:addStatement(self:setRegister(n,bI,d.AndExpression(self:register(n,bJ),self:register(n,bI))),{bI},{bI,bJ},false)self:addStatement(self:setRegister(n,bJ,d.GreaterThanOrEqualsExpression(self:register(n,bH),self:register(n,bD))),{bJ},{bH,bD},false)self:addStatement(self:setRegister(n,bJ,d.AndExpression(self:register(n,bG),self:register(n,bJ))),{bJ},{bJ,bG},false)self:addStatement(self:setRegister(n,bI,d.OrExpression(self:register(n,bJ),self:register(n,bI))),{bI},{bI,bJ},false)self:freeRegister(bJ)bJ=self:compileExpression(d.NumberExpression(bx.id),b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.AndExpression(self:register(n,bI),self:register(n,bJ))),{self.POS_REGISTER},{bI,bJ},false)self:freeRegister(bJ)self:freeRegister(bI)bJ=self:compileExpression(d.NumberExpression(bv.id),b0,1)[1]self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(self:register(n,self.POS_REGISTER),self:register(n,bJ))),{self.POS_REGISTER},{self.POS_REGISTER,bJ},false)self:freeRegister(bJ)self:setActiveBlock(bx)n=bx.scope;self.registers[self.POS_REGISTER]=bA;local b6=self:getVarRegister(p.scope,p.id,b0,nil)if self:isUpvalue(p.scope,p.id)then n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{b6},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,b6),self:register(n,bH)),{},{b6,bH},true)else self:addStatement(self:setRegister(n,b6,self:register(n,bH)),{b6},{bH},false)end;self:compileBlock(p.body,b0)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bz.id)),{self.POS_REGISTER},{},false)self.registers[self.POS_REGISTER]=self.VAR_REGISTER;self:freeRegister(bD)self:freeRegister(bG)self:freeRegister(bF)self:freeRegister(bH,true)self.registers[self.POS_REGISTER]=bA;self:setActiveBlock(bv)return end;if p.kind==k.ForInStatement then local bK=#p.expressions;local bh={}for T,bg in ipairs(p.expressions)do if T==bK and bK<3 then local bf=self:compileExpression(bg,b0,4-bK)for T=1,4-bK do table.insert(bh,bf[T])end else if T<=3 then table.insert(bh,self:compileExpression(bg,b0,1)[1])else self:freeRegister(self:compileExpression(bg,b0,1)[1],false)end end end;for T,aK in ipairs(bh)do if aK and self.registers[aK]~=self.VAR_REGISTER and aK~=self.POS_REGISTER and aK~=self.RETURN_REGISTER then self.registers[aK]=self.VAR_REGISTER else bh[T]=self:allocRegister(true)self:addStatement(self:copyRegisters(n,{bh[T]},{aK}),{bh[T]},{aK},false)end end;local bz=self:createBlock()local bL=self:createBlock()local bv=self:createBlock()p.__start_block=bz;p.__final_block=bv;self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bz)local n=self.activeBlock.scope;local bM={}for T,m in ipairs(p.ids)do bM[T]=self:getVarRegister(p.scope,m,b0)end;self:addStatement(d.AssignmentStatement({self:registerAssignment(n,bh[3]),bM[2]and self:registerAssignment(n,bM[2])},{d.FunctionCallExpression(self:register(n,bh[1]),{self:register(n,bh[2]),self:register(n,bh[3])})}),{bh[3],bM[2]},{bh[1],bh[2],bh[3]},true)self:addStatement(d.AssignmentStatement({self:posAssignment(n)},{d.OrExpression(d.AndExpression(self:register(n,bh[3]),d.NumberExpression(bL.id)),d.NumberExpression(bv.id))}),{self.POS_REGISTER},{bh[3]},false)self:setActiveBlock(bL)local n=self.activeBlock.scope;self:addStatement(self:copyRegisters(n,{bM[1]},{bh[3]}),{bM[1]},{bh[3]},false)for T=3,#bM do self:addStatement(self:setRegister(n,bM[T],d.NilExpression()),{bM[T]},{},false)end;for T,m in ipairs(p.ids)do if self:isUpvalue(p.scope,m)then local bi=bM[T]local bl=self:allocRegister(false)n:addReferenceToHigherScope(self.scope,self.allocUpvalFunction)self:addStatement(self:setRegister(n,bl,d.FunctionCallExpression(d.VariableExpression(self.scope,self.allocUpvalFunction),{})),{bl},{},false)self:addStatement(self:setUpvalueMember(n,self:register(n,bl),self:register(n,bi)),{},{bl,bi},true)self:addStatement(self:copyRegisters(n,{bi},{bl}),{bi},{bl},false)self:freeRegister(bl,false)end end;self:compileBlock(p.body,b0)self:addStatement(self:setPos(n,bz.id),{self.POS_REGISTER},{},false)self:setActiveBlock(bv)for T,aK in ipairs(bh)do self:freeRegister(bh[T],true)end;return end;if p.kind==k.DoStatement then self:compileBlock(p.body,b0)return end;if p.kind==k.BreakStatement then local bN={}local bO;repeat bO=bO and bO.parentScope or p.scope;for m,bd in ipairs(bO.variables)do table.insert(bN,{scope=bO,id=m})end until bO==p.loop.body.scope;for T,_ in pairs(bN)do local bc,m=_.scope,_.id;local b6=self:getVarRegister(bc,m,nil,nil)if self:isUpvalue(bc,m)then n:addReferenceToHigherScope(self.scope,self.freeUpvalueFunc)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.freeUpvalueFunc),{self:register(n,b6)})),{b6},{b6},false)else self:addStatement(self:setRegister(n,b6,d.NilExpression()),{b6},{},false)end end;self:addStatement(self:setPos(n,p.loop.__final_block.id),{self.POS_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false;return end;if p.kind==k.ContinueStatement then local bN={}local bO;repeat bO=bO and bO.parentScope or p.scope;for m,bd in pairs(bO.variables)do table.insert(bN,{scope=bO,id=m})end until bO==p.loop.body.scope;for T,_ in ipairs(bN)do local bc,m=_.scope,_.id;local b6=self:getVarRegister(bc,m,nil,nil)if self:isUpvalue(bc,m)then n:addReferenceToHigherScope(self.scope,self.freeUpvalueFunc)self:addStatement(self:setRegister(n,b6,d.FunctionCallExpression(d.VariableExpression(self.scope,self.freeUpvalueFunc),{self:register(n,b6)})),{b6},{b6},false)else self:addStatement(self:setRegister(n,b6,d.NilExpression()),{b6},{},false)end end;self:addStatement(self:setPos(n,p.loop.__start_block.id),{self.POS_REGISTER},{},false)self.activeBlock.advanceToNextBlock=false;return end;local bP={[k.CompoundAddStatement]=d.CompoundAddStatement,[k.CompoundSubStatement]=d.CompoundSubStatement,[k.CompoundMulStatement]=d.CompoundMulStatement,[k.CompoundDivStatement]=d.CompoundDivStatement,[k.CompoundModStatement]=d.CompoundModStatement,[k.CompoundPowStatement]=d.CompoundPowStatement,[k.CompoundConcatStatement]=d.CompoundConcatStatement}if bP[p.kind]then local aV=bP[p.kind]if p.lhs.kind==k.AssignmentIndexing then local bQ=p.lhs;local bj=self:compileExpression(bQ.base,b0,1)[1]local bp=self:compileExpression(bQ.index,b0,1)[1]local bR=self:compileExpression(p.rhs,b0,1)[1]self:addStatement(aV(d.AssignmentIndexing(self:register(n,bj),self:register(n,bp)),self:register(n,bR)),{},{bj,bp,bR},true)else local bR=self:compileExpression(p.rhs,b0,1)[1]local bs=p.lhs;if bs.scope.isGlobal then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(bs.scope:getVariableName(bs.id))),{bl},{},false)self:addStatement(d.AssignmentStatement({d.AssignmentIndexing(self:env(n),self:register(n,bl))},{self:register(n,bR)}),{},{bl,bR},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[bs.scope]==b0 then if self:isUpvalue(bs.scope,bs.id)then local aK=self:getVarRegister(bs.scope,bs.id,b0)self:addStatement(self:setUpvalueMember(n,self:register(n,aK),self:register(n,bR),aV),{},{aK,bR},true)else local aK=self:getVarRegister(bs.scope,bs.id,b0,bR)if aK~=bR then self:addStatement(self:setRegister(n,aK,self:register(n,bR),aV),{aK},{bR},false)end end else local bn=self:getUpvalueId(bs.scope,bs.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)),self:register(n,bR),aV),{},{bR},true)end end end;return end;f:error(string.format("%s is not a compileable statement!",p.kind))end;function c:compileExpression(O,b0,bS)local n=self.activeBlock.scope;if O.kind==k.StringExpression then local bf={}for T=1,bS,1 do bf[T]=self:allocRegister()if T==1 then self:addStatement(self:setRegister(n,bf[T],d.StringExpression(O.value)),{bf[T]},{},false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NumberExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then self:addStatement(self:setRegister(n,bf[T],d.NumberExpression(O.value)),{bf[T]},{},false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.BooleanExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then self:addStatement(self:setRegister(n,bf[T],d.BooleanExpression(O.value)),{bf[T]},{},false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NilExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end;return bf end;if O.kind==k.VariableExpression then local bf={}for T=1,bS do if T==1 then if O.scope.isGlobal then bf[T]=self:allocRegister(false)local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(O.scope:getVariableName(O.id))),{bl},{},false)self:addStatement(self:setRegister(n,bf[T],d.IndexExpression(self:env(n),self:register(n,bl))),{bf[T]},{bl},true)self:freeRegister(bl,false)else if self.scopeFunctionDepths[O.scope]==b0 then if self:isUpvalue(O.scope,O.id)then local aK=self:allocRegister(false)local b6=self:getVarRegister(O.scope,O.id,b0,nil)self:addStatement(self:setRegister(n,aK,self:getUpvalueMember(n,self:register(n,b6))),{aK},{b6},true)bf[T]=aK else bf[T]=self:getVarRegister(O.scope,O.id,b0,nil)end else local aK=self:allocRegister(false)local bn=self:getUpvalueId(O.scope,O.id)n:addReferenceToHigherScope(self.containerFuncScope,self.currentUpvaluesVar)self:addStatement(self:setRegister(n,aK,self:getUpvalueMember(n,d.IndexExpression(d.VariableExpression(self.containerFuncScope,self.currentUpvaluesVar),d.NumberExpression(bn)))),{aK},{},true)bf[T]=aK end end else bf[T]=self:allocRegister()self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.FunctionCallExpression then local bj=self:compileExpression(O.base,b0,1)[1]local bT={}local bU=bS==self.RETURN_ALL;if bU then bT[1]=self:allocRegister(false)else for T=1,bS do bT[T]=self:allocRegister(false)end end;local bf={}local bk={}for T,bg in ipairs(O.args)do if T==#O.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;if bU then self:addStatement(self:setRegister(n,bT[1],d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bj),bk))}),{bT[1]},{bj,unpack(bf)},true)else if bS>1 then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bj),bk))}),{bl},{bj,unpack(bf)},true)for T,aK in ipairs(bT)do self:addStatement(self:setRegister(n,aK,d.IndexExpression(self:register(n,bl),d.NumberExpression(T))),{aK},{bl},false)end;self:freeRegister(bl,false)else self:addStatement(self:setRegister(n,bT[1],d.FunctionCallExpression(self:register(n,bj),bk)),{bT[1]},{bj,unpack(bf)},true)end end;self:freeRegister(bj,false)for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return bT end;if O.kind==k.PassSelfFunctionCallExpression then local bj=self:compileExpression(O.base,b0,1)[1]local bT={}local bU=bS==self.RETURN_ALL;if bU then bT[1]=self:allocRegister(false)else for T=1,bS do bT[T]=self:allocRegister(false)end end;local bk={self:register(n,bj)}local bf={bj}for T,bg in ipairs(O.args)do if T==#O.args and(bg.kind==k.FunctionCallExpression or bg.kind==k.PassSelfFunctionCallExpression or bg.kind==k.VarargExpression)then local aK=self:compileExpression(bg,b0,self.RETURN_ALL)[1]table.insert(bk,d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)}))table.insert(bf,aK)else local aK=self:compileExpression(bg,b0,1)[1]table.insert(bk,self:register(n,aK))table.insert(bf,aK)end end;if bU or bS>1 then local bl=self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(O.passSelfFunctionName)),{bl},{},false)self:addStatement(self:setRegister(n,bl,d.IndexExpression(self:register(n,bj),self:register(n,bl))),{bl},{bj,bl},false)if bU then self:addStatement(self:setRegister(n,bT[1],d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bl),bk))}),{bT[1]},{bl,unpack(bf)},true)else self:addStatement(self:setRegister(n,bl,d.TableConstructorExpression{d.TableEntry(d.FunctionCallExpression(self:register(n,bl),bk))}),{bl},{bl,unpack(bf)},true)for T,aK in ipairs(bT)do self:addStatement(self:setRegister(n,aK,d.IndexExpression(self:register(n,bl),d.NumberExpression(T))),{aK},{bl},false)end end;self:freeRegister(bl,false)else local bl=bT[1]or self:allocRegister(false)self:addStatement(self:setRegister(n,bl,d.StringExpression(O.passSelfFunctionName)),{bl},{},false)self:addStatement(self:setRegister(n,bl,d.IndexExpression(self:register(n,bj),self:register(n,bl))),{bl},{bj,bl},false)self:addStatement(self:setRegister(n,bT[1],d.FunctionCallExpression(self:register(n,bl),bk)),{bT[1]},{bj,unpack(bf)},true)end;for T,aK in ipairs(bf)do self:freeRegister(aK,false)end;return bT end;if O.kind==k.IndexExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bj=self:compileExpression(O.base,b0,1)[1]local bp=self:compileExpression(O.index,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.IndexExpression(self:register(n,bj),self:register(n,bp))),{bf[T]},{bj,bp},true)self:freeRegister(bj,false)self:freeRegister(bp,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if self.BIN_OPS[O.kind]then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bV=self:compileExpression(O.lhs,b0,1)[1]local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d[O.kind](self:register(n,bV),self:register(n,bW))),{bf[T]},{bV,bW},true)self:freeRegister(bW,false)self:freeRegister(bV,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NotExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.NotExpression(self:register(n,bW))),{bf[T]},{bW},false)self:freeRegister(bW,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.NegateExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.NegateExpression(self:register(n,bW))),{bf[T]},{bW},true)self:freeRegister(bW,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.LenExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bf[T],d.LenExpression(self:register(n,bW))),{bf[T]},{bW},true)self:freeRegister(bW,false)else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.OrExpression then local bA=self.registers[self.POS_REGISTER]self.registers[self.POS_REGISTER]=self.VAR_REGISTER;local bf={}for T=1,bS do bf[T]=self:allocRegister()if T~=1 then self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;local bX=bf[1]local bl;if bA then bl=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bl},{self.POS_REGISTER}),{bl},{self.POS_REGISTER},false)end;local bV=self:compileExpression(O.lhs,b0,1)[1]if O.rhs.isConstant then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bX,d.OrExpression(self:register(n,bV),self:register(n,bW))),{bX},{bV,bW},false)if bl then self:freeRegister(bl,false)end;self:freeRegister(bV,false)self:freeRegister(bW,false)return bf end;local bY,bZ=self:createBlock(),self:createBlock()self:addStatement(self:copyRegisters(n,{bX},{bV}),{bX},{bV},false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bV),d.NumberExpression(bZ.id)),d.NumberExpression(bY.id))),{self.POS_REGISTER},{bV},false)self:freeRegister(bV,false)do self:setActiveBlock(bY)local n=bY.scope;local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:copyRegisters(n,{bX},{bW}),{bX},{bW},false)self:freeRegister(bW,false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bZ.id)),{self.POS_REGISTER},{},false)end;self.registers[self.POS_REGISTER]=bA;self:setActiveBlock(bZ)n=bZ.scope;if bl then self:addStatement(self:copyRegisters(n,{self.POS_REGISTER},{bl}),{self.POS_REGISTER},{bl},false)self:freeRegister(bl,false)end;return bf end;if O.kind==k.AndExpression then local bA=self.registers[self.POS_REGISTER]self.registers[self.POS_REGISTER]=self.VAR_REGISTER;local bf={}for T=1,bS do bf[T]=self:allocRegister()if T~=1 then self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;local bX=bf[1]local bl;if bA then bl=self:allocRegister(false)self:addStatement(self:copyRegisters(n,{bl},{self.POS_REGISTER}),{bl},{self.POS_REGISTER},false)end;local bV=self:compileExpression(O.lhs,b0,1)[1]if O.rhs.isConstant then local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:setRegister(n,bX,d.AndExpression(self:register(n,bV),self:register(n,bW))),{bX},{bV,bW},false)if bl then self:freeRegister(bl,false)end;self:freeRegister(bV,false)self:freeRegister(bW,false)return bf end;local bY,bZ=self:createBlock(),self:createBlock()self:addStatement(self:copyRegisters(n,{bX},{bV}),{bX},{bV},false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.OrExpression(d.AndExpression(self:register(n,bV),d.NumberExpression(bY.id)),d.NumberExpression(bZ.id))),{self.POS_REGISTER},{bV},false)self:freeRegister(bV,false)do self:setActiveBlock(bY)n=bY.scope;local bW=self:compileExpression(O.rhs,b0,1)[1]self:addStatement(self:copyRegisters(n,{bX},{bW}),{bX},{bW},false)self:freeRegister(bW,false)self:addStatement(self:setRegister(n,self.POS_REGISTER,d.NumberExpression(bZ.id)),{self.POS_REGISTER},{},false)end;self.registers[self.POS_REGISTER]=bA;self:setActiveBlock(bZ)n=bZ.scope;if bl then self:addStatement(self:copyRegisters(n,{self.POS_REGISTER},{bl}),{self.POS_REGISTER},{bl},false)self:freeRegister(bl,false)end;return bf end;if O.kind==k.TableConstructorExpression then local bf={}for T=1,bS do bf[T]=self:allocRegister()if T==1 then local be={}local b_={}for T,U in ipairs(O.entries)do if U.kind==k.TableEntry then local c0=U.value;if T==#O.entries and(c0.kind==k.FunctionCallExpression or c0.kind==k.PassSelfFunctionCallExpression or c0.kind==k.VarargExpression)then local aK=self:compileExpression(U.value,b0,self.RETURN_ALL)[1]table.insert(be,d.TableEntry(d.FunctionCallExpression(self:unpack(n),{self:register(n,aK)})))table.insert(b_,aK)else local aK=self:compileExpression(U.value,b0,1)[1]table.insert(be,d.TableEntry(self:register(n,aK)))table.insert(b_,aK)end else local c1=self:compileExpression(U.key,b0,1)[1]local c2=self:compileExpression(U.value,b0,1)[1]table.insert(be,d.KeyedTableEntry(self:register(n,c1),self:register(n,c2)))table.insert(b_,c2)table.insert(b_,c1)end end;self:addStatement(self:setRegister(n,bf[T],d.TableConstructorExpression(be)),{bf[T]},b_,false)for T,aK in ipairs(b_)do self:freeRegister(aK,false)end else self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.FunctionLiteralExpression then local bf={}for T=1,bS do if T==1 then bf[T]=self:compileFunction(O,b0)else bf[T]=self:allocRegister()self:addStatement(self:setRegister(n,bf[T],d.NilExpression()),{bf[T]},{},false)end end;return bf end;if O.kind==k.VarargExpression then if bS==self.RETURN_ALL then return{self.varargReg}end;local bf={}for T=1,bS do bf[T]=self:allocRegister(false)self:addStatement(self:setRegister(n,bf[T],d.IndexExpression(self:register(n,self.varargReg),d.NumberExpression(T))),{bf[T]},{self.varargReg},false)end;return bf end;f:error(string.format("%s is not an compliable expression!",O.kind))end;return c'local z=o..f..m..n..k..";"..q.." "..r.." "..s.." "..t.." "..t.." "..t..";"..u..";"..v.." "..s.." "..w.." "..x.." "..x..";"..y..";"..j..";"..b.optional..i..g.."}".."IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))()"..A;print(z)end;do Obfuscate(c)end elseif a.normalobfus==false and a.hardobfus==false and a.grass==true then c="--// Decompiled Code. \n"..c;function Obfuscate(d)local C='local touchgrass = "grass is a type of plant with narrow leaves growing from the base. Their appearance as a common plant was in the mid-Cretaceous period. There are 12,000 species now. A common kind of grass is used to cover the ground in places such as lawns and parks. Grass is usually the color green. That is because they are wind-pollinated rather than insect-pollinated, so they do not have to attract insects. Green is the best colour for photosynthesis. Grasslands such as savannah and prairie where grasses are dominant cover 40.5% of the land area of the Earth, except Greenland and Antarctica. Grasses are monocotyledon herbaceous plants. They include the grass of the family Poaceae, which are called grass by ordinary people. This family is also called the Gramineae, and includes some of the sedges (Cyperaceae) and the rushes (Juncaceae). These three families are not very closely related, though all of them belong to clades in the order Poales. They are similar adaptations to a similar life-style. With about 780 genera and about 12,000 species, the Poaceae is the fifth-largest plant family. Only the Asteraceae, Orchidaceae, Fabaceae and Rubiaceae have more species. The true grasses include cereals, bamboo and the grasses of lawns (turf) and grassland. Uses for graminoids include food (as grain, shoots or rhizomes), drink (beer, whisky), pasture for livestock, thatch, paper, fuel, clothing, insulation, construction, sports turf, basket weaving and many others. Many grasses are short, but some grasses can grow tall, such as bamboo. Plants from the grass family can grow in many places and make grasslands, including areas which are very arid or cold. There are several other plants that look similar to grass and are referred to as such, but are not members of the grass family. These plants include rushes, reeds, papyrus and water chestnut. Seagrass is a monocot in the order Alismatales. Grasses are an important food for many animals, such as deer, buffalo, cattle, mice, grasshoppers, caterpillars and many other grazers. Unlike other plants, grasses grow from the bottom, so when animals eat grass they usually do not destroy the part that grows. This is a part of why the plants are successful. Without grass, soil may wash away into rivers (erosion). grass is a type of plant with narrow leaves growing from the base. Their appearance as a common plant was in the mid-Cretaceous period. There are 12,000 species now. A common kind of grass is used to cover the ground in places such as lawns and parks. Grass is usually the color green. That is because they are wind-pollinated rather than insect-pollinated, so they do not have to attract insects. Green is the best colour for photosynthesis. Grasslands such as savannah and prairie where grasses are dominant cover 40.5% of the land area of the Earth, except Greenland and Antarctica. Grasses are monocotyledon herbaceous plants. They include the grass of the family Poaceae, which are called grass by ordinary people. This family is also called the Gramineae, and includes some of the sedges (Cyperaceae) and the rushes (Juncaceae). These three families are not very closely related, though all of them belong to clades in the order Poales. They are similar adaptations to a similar life-style. With about 780 genera and about 12,000 species, the Poaceae is the fifth-largest plant family. Only the Asteraceae, Orchidaceae, Fabaceae and Rubiaceae have more species. The true grasses include cereals, bamboo and the grasses of lawns (turf) and grassland. Uses for graminoids include food (as grain, shoots or rhizomes), drink (beer, whisky), pasture for livestock, thatch, paper, fuel, clothing, insulation, construction, sports turf, basket weaving and many others. Many grasses are short, but some grasses can grow tall, such as bamboo. Plants from the grass family can grow in many places and make grasslands, including areas which are very arid or cold. There are several other plants that look similar to grass and are referred to as such, but are not members of the grass family. These plants include rushes, reeds, papyrus and water chestnut. Seagrass is a monocot in the order Alismatales. Grasses are an important food for many animals, such as deer, buffalo, cattle, mice, grasshoppers, caterpillars and many other grazers. Unlike other plants, grasses grow from the bottom, so when animals eat grass they usually do not destroy the part that grows. This is a part of why the plants are successful. Without grass, soil may wash away into rivers (erosion). grass is a type of plant with narrow leaves growing from the base. Their appearance as a common plant was in the mid-Cretaceous period. There are 12,000 species now. A common kind of grass is used to cover the ground in places such as lawns and parks. Grass is usually the color green. That is because they are wind-pollinated rather than insect-pollinated, so they do not have to attract insects. Green is the best colour for photosynthesis. Grasslands such as savannah and prairie where grasses are dominant cover 40.5% of the land area of the Earth, except Greenland and Antarctica. Grasses are monocotyledon herbaceous plants. They include the grass of the family Poaceae, which are called grass by ordinary people. This family is also called the Gramineae, and includes some of the sedges (Cyperaceae) and the rushes (Juncaceae). These three families are not very closely related, though all of them belong to clades in the order Poales. They are similar adaptations to a similar life-style. With about 780 genera and about 12,000 species, the Poaceae is the fifth-largest plant family. Only the Asteraceae, Orchidaceae, Fabaceae and Rubiaceae have more species. The true grasses include cereals, bamboo and the grasses of lawns (turf) and grassland. Uses for graminoids include food (as grain, shoots or rhizomes), drink (beer, whisky), pasture for livestock, thatch, paper, fuel, clothing, insulation, construction, sports turf, basket weaving and many others. Many grasses are short, but some grasses can grow tall, such as bamboo. Plants from the grass family can grow in many places and make grasslands, including areas which are very arid or cold. There are several other plants that look similar to grass and are referred to as such, but are not members of the grass family. These plants include rushes, reeds, papyrus and water chestnut. Seagrass is a monocot in the order Alismatales. Grasses are an important food for many animals, such as deer, buffalo, cattle, mice, grasshoppers, caterpillars and many other grazers. Unlike other plants, grasses grow from the bottom, so when animals eat grass they usually do not destroy the part that grows. This is a part of why the plants are successful. Without grass, soil may wash away into rivers (erosion)." 'local e="local lol='Imagine stealing lol XD,obfuscated by wth1q' function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919)) then return not true end if (IllIlllIllIllIll==(((((968 + 670)-670)*3315)/3315)+968)) then return not false end end; "local f=e;local g=""local h={"IllIllIllIllI","IIlllIIlllIIlllIIlllII","IIllllIIllll"}local i=[[local IlIlIlIlIlIlIlIlII = {]]local j=[[local IllIIllIIllIII = loadstring]]local k=[[local IllIIIllIIIIllI = table.concat]]local l=[[local IIIIIIIIllllllllIIIIIIII = "''"]]local m="local "..h[math.random(1,#h)].." = (7*3-9/9+3*2/0+3*3);"local n="local "..h[math.random(1,#h)].." = (3*4-7/7+6*4/3+9*9);"local o="--// Protected by Wth1Q\n\n"for p=1,string.len(d)do g=g.."'\\"..string.byte(d,p).."',"end;local q="function IllIIIIllIIIIIl("..h[math.random(1,#h)]..")"local r="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local s="local "..h[math.random(1,#h)].." = (5*3-2/8+9*2/9+8*3)"local t="end"local u="IllIIIIllIIIIIl(900283)"local v="function IllIlllIllIlllIlllIlllIllIlllIIIlll("..h[math.random(1,#h)]..")"local s="function "..h[math.random(1,#h)].."("..h[math.random(1,#h)]..")"local w="local "..h[math.random(1,#h)].." = (9*0-7/5+3*1/3+8*2)"local x="end"local y="IllIlllIllIlllIlllIlllIllIlllIIIlll(9083)"local z=o..f..m..n..k..";"..q.." "..r.." "..s.." "..t.." "..t.." "..t..";"..u..";"..v.." "..s.." "..w.." "..x..";"..C.."; "..x..";"..y..";"..j..";"..i..g.."}".."IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))()";print(z)end;do Obfuscate(c)end end --checks if you enable 2 or all options if a.normalobfus==true and a.hardobfus==true then print('Cannot obfuscate normal and hard at the same time.')error() elseif a.normalobfus==true and a.grass==true then print('Cannot obfuscate normal and grass at the same time.')error() elseif a.hardobfus==true and a.grass==true then print('Cannot obfuscate hard and grass at the same time.')error() elseif a.normalobfus==true and a.grass==true then print('Cannot obfuscate normal and grass at the same time.')error() elseif a.normalobfus==true and a.hardobfus==true and a.grass==true then print('Cannot obfuscate 3 options in a row.') end
Editor Settings
Theme
Key bindings
Full width
Lines