# Model_Tutorial_TutorialModel_144.luac
; fn @TutorialModel.lua  line 0-0 np=0 va=1 ms=4 code=113 consts=40 upvals=1 protos=35
;   K[0]='TutorialModel'
;   K[1]='__index'
;   K[2]='state'
;   K[3]='ongoingDatas'
;   K[4]='Init'
;   K[5]='IsNewUser'
;   K[6]='OnCheckResourcesFinished'
;   K[7]='Destroy'
;   K[8]='UpdateTutorialDatas'
;   K[9]='IsTutorialFinished'
;   K[10]='IsTutorialOnGoing'
;   K[11]='HasAnyStrongTutorialOngoing'
;   K[12]='GetOngoindDatas'
;   K[13]='_GetState'
;   K[14]='_GetOngoingDatas'
;   K[15]='UpdateOngoingDatas'
;   K[16]='SetTutorialOngoing'
;   K[17]='SetTutorialFinished'
;   K[18]='GetData'
;   K[19]='FromSyncData'
;   K[20]='_GetExecuterName'
;   K[21]='_GetExecuterTemplatePath'
;   K[22]='_CreateExecuter'
;   K[23]='TryToStartTutorials'
;   K[24]='_StartTutorial'
;   K[25]='FinishTutorial'
;   K[26]='ClearTempDatas'
;   K[27]='SetForceSourceBoardPosition'
;   K[28]='GetForceSourceBoardPosition'
;   K[29]='SetForceTargetBoardPosition'
;   K[30]='GetForceTargetBoardPosition'
;   K[31]='AddAutoPopup'
;   K[32]='RemoveAutoPopup'
;   K[33]='ShouldAutoPopup'
;   K[34]='TryAutoPopup'
;   K[35]='TryPopupTargetTutorial'
;   K[36]='TestFinishTutorial'
;   K[37]='TutorialModel'
;   K[38]='TestUnFinishTutorial'
;   K[39]='TestFinishAllTutorials'
;   upvals: _ENV
;   locals: DBColumnState(6-113), DBColumnOngoingDatas(7-113)
0000  NEWTABLE  R0 = {} (0 items)
0001  SETTABUP  _ENV[K0('TutorialModel')] = R0
0002  GETTABUP  R0 = _ENV[K0('TutorialModel')]
0003  GETTABUP  R1 = _ENV[K0('TutorialModel')]
0004  SETTABLE  R0[K1('__index')] = R1
0005  LOADK     R0 = K2 'state'
0006  LOADK     R1 = K3 'ongoingDatas'
0007  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0008  CLOSURE   R3 = closure proto0
0009  SETTABLE  R2[K4('Init')] = R3
0010  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0011  CLOSURE   R3 = closure proto1
0012  SETTABLE  R2[K5('IsNewUser')] = R3
0013  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0014  CLOSURE   R3 = closure proto2
0015  SETTABLE  R2[K6('OnCheckResourcesFinished')] = R3
0016  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0017  CLOSURE   R3 = closure proto3
0018  SETTABLE  R2[K7('Destroy')] = R3
0019  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0020  CLOSURE   R3 = closure proto4
0021  SETTABLE  R2[K8('UpdateTutorialDatas')] = R3
0022  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0023  CLOSURE   R3 = closure proto5
0024  SETTABLE  R2[K9('IsTutorialFinished')] = R3
0025  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0026  CLOSURE   R3 = closure proto6
0027  SETTABLE  R2[K10('IsTutorialOnGoing')] = R3
0028  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0029  CLOSURE   R3 = closure proto7
0030  SETTABLE  R2[K11('HasAnyStrongTutorialOngoing')] = R3
0031  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0032  CLOSURE   R3 = closure proto8
0033  SETTABLE  R2[K12('GetOngoindDatas')] = R3
0034  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0035  CLOSURE   R3 = closure proto9
0036  SETTABLE  R2[K13('_GetState')] = R3
0037  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0038  CLOSURE   R3 = closure proto10
0039  SETTABLE  R2[K14('_GetOngoingDatas')] = R3
0040  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0041  CLOSURE   R3 = closure proto11
0042  SETTABLE  R2[K15('UpdateOngoingDatas')] = R3
0043  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0044  CLOSURE   R3 = closure proto12
0045  SETTABLE  R2[K16('SetTutorialOngoing')] = R3
0046  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0047  CLOSURE   R3 = closure proto13
0048  SETTABLE  R2[K17('SetTutorialFinished')] = R3
0049  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0050  CLOSURE   R3 = closure proto14
0051  SETTABLE  R2[K18('GetData')] = R3
0052  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0053  CLOSURE   R3 = closure proto15
0054  SETTABLE  R2[K19('FromSyncData')] = R3
0055  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0056  CLOSURE   R3 = closure proto16
0057  SETTABLE  R2[K20('_GetExecuterName')] = R3
0058  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0059  CLOSURE   R3 = closure proto17
0060  SETTABLE  R2[K21('_GetExecuterTemplatePath')] = R3
0061  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0062  CLOSURE   R3 = closure proto18
0063  SETTABLE  R2[K22('_CreateExecuter')] = R3
0064  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0065  CLOSURE   R3 = closure proto19
0066  SETTABLE  R2[K23('TryToStartTutorials')] = R3
0067  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0068  CLOSURE   R3 = closure proto20
0069  SETTABLE  R2[K24('_StartTutorial')] = R3
0070  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0071  CLOSURE   R3 = closure proto21
0072  SETTABLE  R2[K25('FinishTutorial')] = R3
0073  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0074  CLOSURE   R3 = closure proto22
0075  SETTABLE  R2[K26('ClearTempDatas')] = R3
0076  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0077  CLOSURE   R3 = closure proto23
0078  SETTABLE  R2[K27('SetForceSourceBoardPosition')] = R3
0079  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0080  CLOSURE   R3 = closure proto24
0081  SETTABLE  R2[K28('GetForceSourceBoardPosition')] = R3
0082  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0083  CLOSURE   R3 = closure proto25
0084  SETTABLE  R2[K29('SetForceTargetBoardPosition')] = R3
0085  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0086  CLOSURE   R3 = closure proto26
0087  SETTABLE  R2[K30('GetForceTargetBoardPosition')] = R3
0088  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0089  CLOSURE   R3 = closure proto27
0090  SETTABLE  R2[K31('AddAutoPopup')] = R3
0091  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0092  CLOSURE   R3 = closure proto28
0093  SETTABLE  R2[K32('RemoveAutoPopup')] = R3
0094  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0095  CLOSURE   R3 = closure proto29
0096  SETTABLE  R2[K33('ShouldAutoPopup')] = R3
0097  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0098  CLOSURE   R3 = closure proto30
0099  SETTABLE  R2[K34('TryAutoPopup')] = R3
0100  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0101  CLOSURE   R3 = closure proto31
0102  SETTABLE  R2[K35('TryPopupTargetTutorial')] = R3
0103  GETTABUP  R2 = _ENV[K0('TutorialModel')]
0104  CLOSURE   R3 = closure proto32
0105  SETTABLE  R2[K36('TestFinishTutorial')] = R3
0106  GETTABUP  R2 = _ENV[K37('TutorialModel')]
0107  CLOSURE   R3 = closure proto33
0108  SETTABLE  R2[K38('TestUnFinishTutorial')] = R3
0109  GETTABUP  R2 = _ENV[K37('TutorialModel')]
0110  CLOSURE   R3 = closure proto34
0111  SETTABLE  R2[K39('TestFinishAllTutorials')] = R3
0112  RETURN    return R0..R-1
; ---------- proto0 [Init] ----------
  ; fn ?  line 7-13 np=1 va=0 ms=4 code=12 consts=8 upvals=1 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='GM'
  ;   K[2]='DBTableManager'
  ;   K[3]='GetTable'
  ;   K[4]='EDBTableConfigs'
  ;   K[5]='Tutorial'
  ;   K[6]='m_mapAutoPopupExecuters'
  ;   K[7]='m_mapOngoingTutorials'
  ;   upvals: _ENV
  ;   locals: self(0-12)
  0000  GETTABUP  R1 = _ENV[K1('GM')]
  0001  GETTABLE  R1 = R1[K2('DBTableManager')]
  0002  SELF      R2 = R1[K3('GetTable')] (self)
  0003  GETTABUP  R3 = _ENV[K4('EDBTableConfigs')]
  0004  GETTABLE  R3 = R3[K5('Tutorial')]
  0005  CALL      R1 = call(R1, 1 args, 2 rets)
  0006  SETTABLE  R0[K0('m_dbTable')] = R1
  0007  NEWTABLE  R1 = {} (0 items)
  0008  SETTABLE  R0[K6('m_mapAutoPopupExecuters')] = R1
  0009  NEWTABLE  R1 = {} (0 items)
  0010  SETTABLE  R0[K7('m_mapOngoingTutorials')] = R1
  0011  RETURN    return R0..R-1
; ---------- proto1 [IsNewUser] ----------
  ; fn ?  line 15-19 np=1 va=0 ms=4 code=22 consts=5 upvals=1 protos=0
  ;   K[0]='IsTutorialFinished'
  ;   K[1]='ETutorialId'
  ;   K[2]='CG'
  ;   K[3]='Timeline'
  ;   K[4]='IsTutorialOnGoing'
  ;   upvals: _ENV
  ;   locals: self(0-22)
  0000  SELF      R2 = R0[K0('IsTutorialFinished')] (self)
  0001  GETTABUP  R3 = _ENV[K1('ETutorialId')]
  0002  GETTABLE  R3 = R3[K2('CG')]
  0003  CALL      R1 = call(R1, 1 args, 2 rets)
  0004  TEST      if not R1 then   -> -131065
  0005  JMP       (jump)   -> 18
  0006  SELF      R2 = R0[K0('IsTutorialFinished')] (self)
  0007  GETTABUP  R3 = _ENV[K1('ETutorialId')]
  0008  GETTABLE  R3 = R3[K3('Timeline')]
  0009  CALL      R1 = call(R1, 1 args, 2 rets)
  0010  TEST      if not R1 then   -> -131059
  0011  JMP       (jump)   -> 18
  0012  SELF      R2 = R0[K4('IsTutorialOnGoing')] (self)
  0013  GETTABUP  R3 = _ENV[K1('ETutorialId')]
  0014  GETTABLE  R3 = R3[K3('Timeline')]
  0015  CALL      R1 = call(R1, 1 args, 2 rets)
  0016  NOT       R1 = not R0
  0017  JMP       (jump)   -> 20
  0018  LOADBOOL  R1 = false
  0019  LOADBOOL  R1 = true
  0020  RETURN    return R1..R0
  0021  RETURN    return R0..R-1
; ---------- proto2 [OnCheckResourcesFinished] ----------
  ; fn ?  line 21-29 np=1 va=0 ms=4 code=20 consts=11 upvals=1 protos=0
  ;   K[0]='UpdateTutorialDatas'
  ;   K[1]='GameConfig'
  ;   K[2]='IsTestMode'
  ;   K[3]='PlayerPrefs'
  ;   K[4]='GetInt'
  ;   K[5]='EPlayerPrefKey'
  ;   K[6]='TestIgnoreTutorial'
  ;   K[7]=0
  ;   K[8]=1
  ;   K[9]='TestFinishAllTutorials'
  ;   K[10]='TryToStartTutorials'
  ;   upvals: _ENV
  ;   locals: self(0-20)
  0000  SELF      R2 = R0[K0('UpdateTutorialDatas')] (self)
  0001  CALL      R1 = call(R1, 0 args, 1 rets)
  0002  GETTABUP  R1 = _ENV[K1('GameConfig')]
  0003  GETTABLE  R1 = R1[K2('IsTestMode')]
  0004  CALL      R1 = call(R1, 1 args, 0 rets)
  0005  TEST      if not R1 then   -> -131065
  0006  JMP       (jump)   -> 17
  0007  GETTABUP  R1 = _ENV[K3('PlayerPrefs')]
  0008  GETTABLE  R1 = R1[K4('GetInt')]
  0009  GETTABUP  R2 = _ENV[K5('EPlayerPrefKey')]
  0010  GETTABLE  R2 = R2[K6('TestIgnoreTutorial')]
  0011  LOADK     R3 = K7 0
  0012  CALL      R1 = call(R1, 1 args, 2 rets)
  0013  EQ        if R0 eq K8(1)   -> -130281
  0014  JMP       (jump)   -> 17
  0015  SELF      R2 = R0[K9('TestFinishAllTutorials')] (self)
  0016  CALL      R1 = call(R1, 0 args, 1 rets)
  0017  SELF      R2 = R0[K10('TryToStartTutorials')] (self)
  0018  CALL      R1 = call(R1, 0 args, 1 rets)
  0019  RETURN    return R0..R-1
; ---------- proto3 [Destroy] ----------
  ; fn ?  line 31-37 np=1 va=0 ms=8 code=13 consts=5 upvals=1 protos=0
  ;   K[0]='EventDispatcher'
  ;   K[1]='RemoveTarget'
  ;   K[2]='pairs'
  ;   K[3]='m_mapOngoingTutorials'
  ;   K[4]='OnRemove'
  ;   upvals: _ENV
  ;   locals: self(0-13), (for generator)(7-12), (for state)(7-12), (for control)(7-12), _(8-10), executer(8-10)
  0000  GETTABUP  R1 = _ENV[K0('EventDispatcher')]
  0001  GETTABLE  R1 = R1[K1('RemoveTarget')]
  0002  MOVE      R2 = R0
  0003  CALL      R1 = call(R1, 0 args, 1 rets)
  0004  GETTABUP  R1 = _ENV[K2('pairs')]
  0005  GETTABLE  R2 = R0[K3('m_mapOngoingTutorials')]
  0006  CALL      R1 = call(R1, 3 args, 1 rets)
  0007  JMP       (jump)   -> 10
  0008  SELF      R7 = R5[K4('OnRemove')] (self)
  0009  CALL      R6 = call(R6, 0 args, 1 rets)
  0010  TFORCALL  tforcall R1
  0011  TFORLOOP  tforloop R3(sBx=-4)   -> 8
  0012  RETURN    return R0..R-1
; ---------- proto4 [UpdateTutorialDatas] ----------
  ; fn ?  line 39-84 np=1 va=0 ms=17 code=106 consts=26 upvals=2 protos=0
  ;   K[0]='m_mapOngoingTutorials'
  ;   K[1]=nil
  ;   K[2]='pairs'
  ;   K[3]='OnRemove'
  ;   K[4]='m_mapTutorialListenEventType'
  ;   K[5]='EventDispatcher'
  ;   K[6]='RemoveListener'
  ;   K[7]='require'
  ;   K[8]='Data.Tutorial.TutorialConfig'
  ;   K[9]='m_mapTutorialConfigDatas'
  ;   K[10]='m_mapNotStartedTutorials'
  ;   K[11]='ipairs'
  ;   K[12]='TutorialConfigData'
  ;   K[13]='Create'
  ;   K[14]='GetTutorialId'
  ;   K[15]='m_dbTable'
  ;   K[16]='GetValue'
  ;   K[17]='ETutorialState'
  ;   K[18]='NotStarted'
  ;   K[19]='GetMapSpecialEventListeners'
  ;   K[20]=true
  ;   K[21]='Ongoing'
  ;   K[22]='_StartTutorial'
  ;   K[23]='GetArgs'
  ;   K[24]='AddListener'
  ;   K[25]='TryToStartTutorials'
  ;   upvals: _ENV, DBColumnState
  ;   locals: self(0-106), (for generator)(6-11), (for state)(6-11), (for control)(6-11), _(7-9), executer(7-9), (for generator)(17-25), (for state)(17-25), (for control)(17-25), type(18-23), _(18-23), arrTutorialConfigs(28-106), state(37-106), data(37-106), executer(37-106), mapEventType(37-106), (for generator)(40-93), (for state)(40-93), (for control)(40-93), i(41-91), tbData(41-91), (for generator)(75-80), (for state)(75-80), (for control)(75-80), eventType(76-78), _(76-78), (for generator)(96-105), (for state)(96-105), (for control)(96-105), eventType(97-103), _(97-103)
  0000  GETTABLE  R1 = R0[K0('m_mapOngoingTutorials')]
  0001  EQ        if R1 eq K1(nil)   -> -130300
  0002  JMP       (jump)   -> 11
  0003  GETTABUP  R1 = _ENV[K2('pairs')]
  0004  GETTABLE  R2 = R0[K0('m_mapOngoingTutorials')]
  0005  CALL      R1 = call(R1, 3 args, 1 rets)
  0006  JMP       (jump)   -> 9
  0007  SELF      R7 = R5[K3('OnRemove')] (self)
  0008  CALL      R6 = call(R6, 0 args, 1 rets)
  0009  TFORCALL  tforcall R1
  0010  TFORLOOP  tforloop R3(sBx=-4)   -> 7
  0011  GETTABLE  R1 = R0[K4('m_mapTutorialListenEventType')]
  0012  EQ        if R1 eq K1(nil)   -> -130289
  0013  JMP       (jump)   -> 25
  0014  GETTABUP  R1 = _ENV[K2('pairs')]
  0015  GETTABLE  R2 = R0[K4('m_mapTutorialListenEventType')]
  0016  CALL      R1 = call(R1, 3 args, 1 rets)
  0017  JMP       (jump)   -> 23
  0018  GETTABUP  R6 = _ENV[K5('EventDispatcher')]
  0019  GETTABLE  R6 = R6[K6('RemoveListener')]
  0020  MOVE      R7 = R0
  0021  MOVE      R8 = R0
  0022  CALL      R6 = call(R6, 0 args, 2 rets)
  0023  TFORCALL  tforcall R1
  0024  TFORLOOP  tforloop R3(sBx=-7)   -> 18
  0025  GETTABUP  R1 = _ENV[K7('require')]
  0026  LOADK     R2 = K8 'Data.Tutorial.TutorialConfig'
  0027  CALL      R1 = call(R1, 1 args, 1 rets)
  0028  NEWTABLE  R2 = {} (0 items)
  0029  SETTABLE  R0[K9('m_mapTutorialConfigDatas')] = R2
  0030  NEWTABLE  R2 = {} (0 items)
  0031  SETTABLE  R0[K0('m_mapOngoingTutorials')] = R2
  0032  NEWTABLE  R2 = {} (0 items)
  0033  SETTABLE  R0[K10('m_mapNotStartedTutorials')] = R2
  0034  NEWTABLE  R2 = {} (0 items)
  0035  SETTABLE  R0[K4('m_mapTutorialListenEventType')] = R2
  0036  LOADNIL   R2..R2 = nil
  0037  GETTABUP  R6 = _ENV[K11('ipairs')]
  0038  MOVE      R7 = R0
  0039  CALL      R6 = call(R6, 3 args, 1 rets)
  0040  JMP       (jump)   -> 91
  0041  GETTABUP  R11 = _ENV[K12('TutorialConfigData')]
  0042  GETTABLE  R11 = R11[K13('Create')]
  0043  MOVE      R12 = R0
  0044  CALL      R11 = call(R11, 1 args, 1 rets)
  0045  MOVE      R3 = R0
  0046  GETTABLE  R11 = R0[K9('m_mapTutorialConfigDatas')]
  0047  SELF      R13 = R3[K14('GetTutorialId')] (self)
  0048  CALL      R12 = call(R12, 1 args, 1 rets)
  0049  SETTABLE  R11[R12] = R3
  0050  GETTABLE  R11 = R0[K15('m_dbTable')]
  0051  SELF      R12 = R11[K16('GetValue')] (self)
  0052  SELF      R14 = R3[K14('GetTutorialId')] (self)
  0053  CALL      R13 = call(R13, 1 args, 1 rets)
  0054  GETUPVAL  R14 = _ENV
  0055  CALL      R11 = call(R11, 1 args, 3 rets)
  0056  MOVE      R2 = R0
  0057  EQ        if R1 eq K1(nil)   -> -129732
  0058  JMP       (jump)   -> 63
  0059  GETTABUP  R11 = _ENV[K17('ETutorialState')]
  0060  GETTABLE  R11 = R11[K18('NotStarted')]
  0061  EQ        if R0 eq R11   -> -129974
  0062  JMP       (jump)   -> 81
  0063  GETTABLE  R11 = R0[K10('m_mapNotStartedTutorials')]
  0064  SELF      R13 = R3[K14('GetTutorialId')] (self)
  0065  CALL      R12 = call(R12, 1 args, 1 rets)
  0066  SETTABLE  R11[R12] = R3
  0067  SELF      R12 = R3[K19('GetMapSpecialEventListeners')] (self)
  0068  CALL      R11 = call(R11, 1 args, 1 rets)
  0069  MOVE      R5 = R0
  0070  EQ        if R1 eq K1(nil)   -> -128183
  0071  JMP       (jump)   -> 91
  0072  GETTABUP  R11 = _ENV[K2('pairs')]
  0073  MOVE      R12 = R0
  0074  CALL      R11 = call(R11, 3 args, 1 rets)
  0075  JMP       (jump)   -> 78
  0076  GETTABLE  R16 = R0[K4('m_mapTutorialListenEventType')]
  0077  SETTABLE  R16[R14] = K20(true)
  0078  TFORCALL  tforcall R11
  0079  TFORLOOP  tforloop R13(sBx=-4)   -> 76
  0080  JMP       (jump)   -> 91
  0081  GETTABUP  R11 = _ENV[K17('ETutorialState')]
  0082  GETTABLE  R11 = R11[K21('Ongoing')]
  0083  EQ        if R0 eq R11   -> -129952
  0084  JMP       (jump)   -> 91
  0085  SELF      R12 = R0[K22('_StartTutorial')] (self)
  0086  SELF      R14 = R3[K14('GetTutorialId')] (self)
  0087  CALL      R13 = call(R13, 1 args, 1 rets)
  0088  SELF      R15 = R3[K23('GetArgs')] (self)
  0089  CALL      R14 = call(R14, -1 args, 1 rets)
  0090  CALL      R11 = call(R11, 0 args, -1 rets)
  0091  TFORCALL  tforcall R6
  0092  TFORLOOP  tforloop R8(sBx=-52)   -> 41
  0093  GETTABUP  R6 = _ENV[K2('pairs')]
  0094  GETTABLE  R7 = R0[K4('m_mapTutorialListenEventType')]
  0095  CALL      R6 = call(R6, 3 args, 1 rets)
  0096  JMP       (jump)   -> 103
  0097  GETTABUP  R11 = _ENV[K5('EventDispatcher')]
  0098  GETTABLE  R11 = R11[K24('AddListener')]
  0099  MOVE      R12 = R0
  0100  MOVE      R13 = R0
  0101  GETTABLE  R14 = R0[K25('TryToStartTutorials')]
  0102  CALL      R11 = call(R11, 0 args, 3 rets)
  0103  TFORCALL  tforcall R6
  0104  TFORLOOP  tforloop R8(sBx=-8)   -> 97
  0105  RETURN    return R0..R-1
; ---------- proto5 [IsTutorialFinished] ----------
  ; fn ?  line 87-89 np=2 va=0 ms=5 code=11 consts=3 upvals=1 protos=0
  ;   K[0]='_GetState'
  ;   K[1]='ETutorialState'
  ;   K[2]='Finished'
  ;   upvals: _ENV
  ;   locals: self(0-11), tutorialId(0-11)
  0000  SELF      R3 = R0[K0('_GetState')] (self)
  0001  MOVE      R4 = R0
  0002  CALL      R2 = call(R2, 1 args, 2 rets)
  0003  GETTABUP  R3 = _ENV[K1('ETutorialState')]
  0004  GETTABLE  R3 = R3[K2('Finished')]
  0005  EQ        if R1 eq R3   -> -130038
  0006  JMP       (jump)   -> 8
  0007  LOADBOOL  R2 = false
  0008  LOADBOOL  R2 = true
  0009  RETURN    return R2..R1
  0010  RETURN    return R0..R-1
; ---------- proto6 [IsTutorialOnGoing] ----------
  ; fn ?  line 91-93 np=2 va=0 ms=5 code=11 consts=3 upvals=1 protos=0
  ;   K[0]='_GetState'
  ;   K[1]='ETutorialState'
  ;   K[2]='Ongoing'
  ;   upvals: _ENV
  ;   locals: self(0-11), tutorialId(0-11)
  0000  SELF      R3 = R0[K0('_GetState')] (self)
  0001  MOVE      R4 = R0
  0002  CALL      R2 = call(R2, 1 args, 2 rets)
  0003  GETTABUP  R3 = _ENV[K1('ETutorialState')]
  0004  GETTABLE  R3 = R3[K2('Ongoing')]
  0005  EQ        if R1 eq R3   -> -130038
  0006  JMP       (jump)   -> 8
  0007  LOADBOOL  R2 = false
  0008  LOADBOOL  R2 = true
  0009  RETURN    return R2..R1
  0010  RETURN    return R0..R-1
; ---------- proto7 [HasAnyStrongTutorialOngoing] ----------
  ; fn ?  line 95-105 np=1 va=0 ms=9 code=22 consts=5 upvals=1 protos=0
  ;   K[0]='m_mapOngoingTutorials'
  ;   K[1]=nil
  ;   K[2]='pairs'
  ;   K[3]='IsInStrongTutorial'
  ;   K[4]='GetTutorialId'
  ;   upvals: _ENV
  ;   locals: self(0-22), (for generator)(8-19), (for state)(8-19), (for control)(8-19), _(9-17), executer(9-17)
  0000  GETTABLE  R1 = R0[K0('m_mapOngoingTutorials')]
  0001  EQ        if R0 eq K1(nil)   -> -130300
  0002  JMP       (jump)   -> 5
  0003  LOADBOOL  R1 = false
  0004  RETURN    return R1..R0
  0005  GETTABUP  R1 = _ENV[K2('pairs')]
  0006  GETTABLE  R2 = R0[K0('m_mapOngoingTutorials')]
  0007  CALL      R1 = call(R1, 3 args, 1 rets)
  0008  JMP       (jump)   -> 17
  0009  SELF      R7 = R5[K3('IsInStrongTutorial')] (self)
  0010  CALL      R6 = call(R6, 1 args, 1 rets)
  0011  TEST      if not R6 then   -> -131059
  0012  JMP       (jump)   -> 17
  0013  LOADBOOL  R6 = true
  0014  SELF      R8 = R5[K4('GetTutorialId')] (self)
  0015  CALL      R7 = call(R7, -1 args, 1 rets)
  0016  RETURN    return R6..R5
  0017  TFORCALL  tforcall R1
  0018  TFORLOOP  tforloop R3(sBx=-10)   -> 9
  0019  LOADBOOL  R1 = false
  0020  RETURN    return R1..R0
  0021  RETURN    return R0..R-1
; ---------- proto8 [GetOngoindDatas] ----------
  ; fn ?  line 107-112 np=2 va=0 ms=5 code=12 consts=2 upvals=0 protos=0
  ;   K[0]='IsTutorialOnGoing'
  ;   K[1]='_GetOngoingDatas'
  ;   locals: self(0-12), tutorialId(0-12)
  0000  SELF      R3 = R0[K0('IsTutorialOnGoing')] (self)
  0001  MOVE      R4 = R0
  0002  CALL      R2 = call(R2, 1 args, 2 rets)
  0003  TEST      if not R2 then   -> -131066
  0004  JMP       (jump)   -> 7
  0005  LOADNIL   R2..R2 = nil
  0006  RETURN    return R2..R1
  0007  SELF      R3 = R0[K1('_GetOngoingDatas')] (self)
  0008  MOVE      R4 = R0
  0009  TAILCALL  tailcall(R2, 0)
  0010  RETURN    return R2..R1
  0011  RETURN    return R0..R-1
; ---------- proto9 [_GetState] ----------
  ; fn ?  line 116-118 np=2 va=0 ms=6 code=7 consts=2 upvals=1 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='GetValue'
  ;   upvals: DBColumnState
  ;   locals: self(0-7), tutorialId(0-7)
  0000  GETTABLE  R2 = R0[K0('m_dbTable')]
  0001  SELF      R3 = R2[K1('GetValue')] (self)
  0002  MOVE      R4 = R0
  0003  GETUPVAL  R5 = DBColumnState
  0004  TAILCALL  tailcall(R2, 0)
  0005  RETURN    return R2..R1
  0006  RETURN    return R0..R-1
; ---------- proto10 [_GetOngoingDatas] ----------
  ; fn ?  line 120-122 np=2 va=0 ms=6 code=7 consts=2 upvals=1 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='GetValue'
  ;   upvals: DBColumnOngoingDatas
  ;   locals: self(0-7), tutorialId(0-7)
  0000  GETTABLE  R2 = R0[K0('m_dbTable')]
  0001  SELF      R3 = R2[K1('GetValue')] (self)
  0002  MOVE      R4 = R0
  0003  GETUPVAL  R5 = DBColumnOngoingDatas
  0004  TAILCALL  tailcall(R2, 0)
  0005  RETURN    return R2..R1
  0006  RETURN    return R0..R-1
; ---------- proto11 [UpdateOngoingDatas] ----------
  ; fn ?  line 124-126 np=3 va=0 ms=8 code=7 consts=2 upvals=1 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='Set'
  ;   upvals: DBColumnOngoingDatas
  ;   locals: self(0-7), tutorialId(0-7), strOngoingDatas(0-7)
  0000  GETTABLE  R3 = R0[K0('m_dbTable')]
  0001  SELF      R4 = R3[K1('Set')] (self)
  0002  MOVE      R5 = R0
  0003  GETUPVAL  R6 = DBColumnOngoingDatas
  0004  MOVE      R7 = R0
  0005  CALL      R3 = call(R3, 0 args, 4 rets)
  0006  RETURN    return R0..R-1
; ---------- proto12 [SetTutorialOngoing] ----------
  ; fn ?  line 128-131 np=2 va=0 ms=7 code=14 consts=5 upvals=3 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='Set'
  ;   K[2]='ETutorialState'
  ;   K[3]='Ongoing'
  ;   K[4]=''
  ;   upvals: DBColumnState, _ENV, DBColumnOngoingDatas
  ;   locals: self(0-14), tutorialId(0-14)
  0000  GETTABLE  R2 = R0[K0('m_dbTable')]
  0001  SELF      R3 = R2[K1('Set')] (self)
  0002  MOVE      R4 = R0
  0003  GETUPVAL  R5 = DBColumnState
  0004  GETTABUP  R6 = _ENV[K2('ETutorialState')]
  0005  GETTABLE  R6 = R6[K3('Ongoing')]
  0006  CALL      R2 = call(R2, 0 args, 4 rets)
  0007  GETTABLE  R2 = R0[K0('m_dbTable')]
  0008  SELF      R3 = R2[K1('Set')] (self)
  0009  MOVE      R4 = R0
  0010  GETUPVAL  R5 = DBColumnState
  0011  LOADK     R6 = K4 ''
  0012  CALL      R2 = call(R2, 0 args, 4 rets)
  0013  RETURN    return R0..R-1
; ---------- proto13 [SetTutorialFinished] ----------
  ; fn ?  line 133-136 np=2 va=0 ms=7 code=14 consts=5 upvals=3 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='Set'
  ;   K[2]='ETutorialState'
  ;   K[3]='Finished'
  ;   K[4]=''
  ;   upvals: DBColumnState, _ENV, DBColumnOngoingDatas
  ;   locals: self(0-14), tutorialId(0-14)
  0000  GETTABLE  R2 = R0[K0('m_dbTable')]
  0001  SELF      R3 = R2[K1('Set')] (self)
  0002  MOVE      R4 = R0
  0003  GETUPVAL  R5 = DBColumnState
  0004  GETTABUP  R6 = _ENV[K2('ETutorialState')]
  0005  GETTABLE  R6 = R6[K3('Finished')]
  0006  CALL      R2 = call(R2, 0 args, 4 rets)
  0007  GETTABLE  R2 = R0[K0('m_dbTable')]
  0008  SELF      R3 = R2[K1('Set')] (self)
  0009  MOVE      R4 = R0
  0010  GETUPVAL  R5 = DBColumnState
  0011  LOADK     R6 = K4 ''
  0012  CALL      R2 = call(R2, 0 args, 4 rets)
  0013  RETURN    return R0..R-1
; ---------- proto14 [GetData] ----------
  ; fn ?  line 138-140 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_dbTable'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_dbTable')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto15 [FromSyncData] ----------
  ; fn ?  line 142-144 np=2 va=0 ms=5 code=5 consts=2 upvals=0 protos=0
  ;   K[0]='m_dbTable'
  ;   K[1]='FromArr'
  ;   locals: self(0-5), dataArr(0-5)
  0000  GETTABLE  R2 = R0[K0('m_dbTable')]
  0001  SELF      R3 = R2[K1('FromArr')] (self)
  0002  MOVE      R4 = R0
  0003  CALL      R2 = call(R2, 0 args, 2 rets)
  0004  RETURN    return R0..R-1
; ---------- proto16 [_GetExecuterName] ----------
  ; fn ?  line 147-149 np=2 va=0 ms=4 code=10 consts=2 upvals=0 protos=0
  ;   K[0]='m_mapTutorialConfigDatas'
  ;   K[1]='GetExecuterName'
  ;   locals: self(0-10), tutorialId(0-10)
  0000  GETTABLE  R2 = R0[K0('m_mapTutorialConfigDatas')]
  0001  GETTABLE  R2 = R2[R1]
  0002  TEST      if not R2 then   -> -131068
  0003  JMP       (jump)   -> 8
  0004  GETTABLE  R2 = R0[K0('m_mapTutorialConfigDatas')]
  0005  GETTABLE  R2 = R2[R1]
  0006  SELF      R3 = R2[K1('GetExecuterName')] (self)
  0007  CALL      R2 = call(R2, 1 args, 1 rets)
  0008  RETURN    return R2..R1
  0009  RETURN    return R0..R-1
; ---------- proto17 [_GetExecuterTemplatePath] ----------
  ; fn ?  line 151-153 np=2 va=0 ms=4 code=5 consts=1 upvals=0 protos=0
  ;   K[0]='Model.Tutorial.Executer.TutorialExecuter'
  ;   locals: self(0-5), executerName(0-5)
  0000  LOADK     R2 = K0 'Model.Tutorial.Executer.TutorialExecuter'
  0001  MOVE      R3 = R0
  0002  CONCAT    R2 = concat(R2..R2)
  0003  RETURN    return R2..R1
  0004  RETURN    return R0..R-1
; ---------- proto18 [_CreateExecuter] ----------
  ; fn ?  line 155-162 np=3 va=0 ms=10 code=21 consts=5 upvals=1 protos=0
  ;   K[0]='_GetExecuterName'
  ;   K[1]=nil
  ;   K[2]='require'
  ;   K[3]='_GetExecuterTemplatePath'
  ;   K[4]='_GetOngoingDatas'
  ;   upvals: _ENV
  ;   locals: self(0-21), tutorialId(0-21), args(0-21), executerName(3-21), creator(10-18)
  0000  SELF      R4 = R0[K0('_GetExecuterName')] (self)
  0001  MOVE      R5 = R0
  0002  CALL      R3 = call(R3, 1 args, 2 rets)
  0003  EQ        if R1 eq K1(nil)   -> -129274
  0004  JMP       (jump)   -> 18
  0005  GETTABUP  R4 = _ENV[K2('require')]
  0006  SELF      R6 = R0[K3('_GetExecuterTemplatePath')] (self)
  0007  MOVE      R7 = R0
  0008  CALL      R5 = call(R5, -1 args, 2 rets)
  0009  CALL      R4 = call(R4, 1 args, -1 rets)
  0010  MOVE      R5 = R0
  0011  MOVE      R6 = R0
  0012  SELF      R8 = R0[K4('_GetOngoingDatas')] (self)
  0013  MOVE      R9 = R0
  0014  CALL      R7 = call(R7, 1 args, 2 rets)
  0015  MOVE      R8 = R0
  0016  TAILCALL  tailcall(R5, 0)
  0017  RETURN    return R5..R4
  0018  LOADNIL   R4..R4 = nil
  0019  RETURN    return R4..R3
  0020  RETURN    return R0..R-1
; ---------- proto19 [TryToStartTutorials] ----------
  ; fn ?  line 164-175 np=1 va=0 ms=11 code=33 consts=15 upvals=1 protos=0
  ;   K[0]='GameConfig'
  ;   K[1]='IsTestMode'
  ;   K[2]='PlayerPrefs'
  ;   K[3]='GetInt'
  ;   K[4]='EPlayerPrefKey'
  ;   K[5]='TestIgnoreTutorial'
  ;   K[6]=0
  ;   K[7]=1
  ;   K[8]='pairs'
  ;   K[9]='m_mapNotStartedTutorials'
  ;   K[10]='IsSatisfied'
  ;   K[11]=nil
  ;   K[12]='_StartTutorial'
  ;   K[13]='GetTutorialId'
  ;   K[14]='GetArgs'
  ;   upvals: _ENV
  ;   locals: self(0-33), (for generator)(17-32), (for state)(17-32), (for control)(17-32), tutorialId(18-30), configData(18-30)
  0000  GETTABUP  R1 = _ENV[K0('GameConfig')]
  0001  GETTABLE  R1 = R1[K1('IsTestMode')]
  0002  CALL      R1 = call(R1, 1 args, 0 rets)
  0003  TEST      if not R1 then   -> -131067
  0004  JMP       (jump)   -> 14
  0005  GETTABUP  R1 = _ENV[K2('PlayerPrefs')]
  0006  GETTABLE  R1 = R1[K3('GetInt')]
  0007  GETTABUP  R2 = _ENV[K4('EPlayerPrefKey')]
  0008  GETTABLE  R2 = R2[K5('TestIgnoreTutorial')]
  0009  LOADK     R3 = K6 0
  0010  CALL      R1 = call(R1, 1 args, 2 rets)
  0011  EQ        if R0 eq K7(1)   -> -130284
  0012  JMP       (jump)   -> 14
  0013  RETURN    return R0..R-1
  0014  GETTABUP  R1 = _ENV[K8('pairs')]
  0015  GETTABLE  R2 = R0[K9('m_mapNotStartedTutorials')]
  0016  CALL      R1 = call(R1, 3 args, 1 rets)
  0017  JMP       (jump)   -> 30
  0018  SELF      R7 = R5[K10('IsSatisfied')] (self)
  0019  CALL      R6 = call(R6, 1 args, 1 rets)
  0020  TEST      if not R6 then   -> -131050
  0021  JMP       (jump)   -> 30
  0022  GETTABLE  R6 = R0[K9('m_mapNotStartedTutorials')]
  0023  SETTABLE  R6[R4] = K11(nil)
  0024  SELF      R7 = R0[K12('_StartTutorial')] (self)
  0025  SELF      R9 = R5[K13('GetTutorialId')] (self)
  0026  CALL      R8 = call(R8, 1 args, 1 rets)
  0027  SELF      R10 = R5[K14('GetArgs')] (self)
  0028  CALL      R9 = call(R9, -1 args, 1 rets)
  0029  CALL      R6 = call(R6, 0 args, -1 rets)
  0030  TFORCALL  tforcall R1
  0031  TFORLOOP  tforloop R3(sBx=-14)   -> 18
  0032  RETURN    return R0..R-1
; ---------- proto20 [_StartTutorial] ----------
  ; fn ?  line 177-188 np=3 va=0 ms=7 code=23 consts=6 upvals=0 protos=0
  ;   K[0]='_CreateExecuter'
  ;   K[1]=nil
  ;   K[2]='m_mapOngoingTutorials'
  ;   K[3]='IsTutorialOnGoing'
  ;   K[4]='SetTutorialOngoing'
  ;   K[5]='OnStart'
  ;   locals: self(0-23), tutorialId(0-23), args(0-23), executer(4-23)
  0000  SELF      R4 = R0[K0('_CreateExecuter')] (self)
  0001  MOVE      R5 = R0
  0002  MOVE      R6 = R0
  0003  CALL      R3 = call(R3, 1 args, 3 rets)
  0004  EQ        if R1 eq K1(nil)   -> -129273
  0005  JMP       (jump)   -> 20
  0006  GETTABLE  R4 = R0[K2('m_mapOngoingTutorials')]
  0007  SETTABLE  R4[R1] = R3
  0008  SELF      R5 = R0[K3('IsTutorialOnGoing')] (self)
  0009  MOVE      R6 = R0
  0010  CALL      R4 = call(R4, 1 args, 2 rets)
  0011  TEST      if not R4 then   -> -131058
  0012  JMP       (jump)   -> 16
  0013  SELF      R5 = R0[K4('SetTutorialOngoing')] (self)
  0014  MOVE      R6 = R0
  0015  CALL      R4 = call(R4, 0 args, 2 rets)
  0016  SELF      R5 = R3[K5('OnStart')] (self)
  0017  CALL      R4 = call(R4, 0 args, 1 rets)
  0018  LOADBOOL  R4 = true
  0019  RETURN    return R4..R3
  0020  LOADBOOL  R4 = false
  0021  RETURN    return R4..R3
  0022  RETURN    return R0..R-1
; ---------- proto21 [FinishTutorial] ----------
  ; fn ?  line 190-202 np=2 va=0 ms=6 code=30 consts=14 upvals=1 protos=0
  ;   K[0]='m_mapOngoingTutorials'
  ;   K[1]='LogTutorialStepFinish'
  ;   K[2]='TutorialExecuter'
  ;   K[3]='StepEnd'
  ;   K[4]='OnRemove'
  ;   K[5]='m_mapNotStartedTutorials'
  ;   K[6]=nil
  ;   K[7]='SetTutorialFinished'
  ;   K[8]='TryToStartTutorials'
  ;   K[9]='EventDispatcher'
  ;   K[10]='DispatchEvent'
  ;   K[11]='EEventType'
  ;   K[12]='TutorialFinished'
  ;   K[13]='id'
  ;   upvals: _ENV
  ;   locals: self(0-30), tutorialId(0-30), executer(5-30)
  0000  GETTABLE  R2 = R0[K0('m_mapOngoingTutorials')]
  0001  TEST      if not R2 then   -> -131069
  0002  JMP       (jump)   -> 5
  0003  GETTABLE  R2 = R0[K0('m_mapOngoingTutorials')]
  0004  GETTABLE  R2 = R2[R1]
  0005  TEST      if not R2 then   -> -131065
  0006  JMP       (jump)   -> 13
  0007  SELF      R4 = R2[K1('LogTutorialStepFinish')] (self)
  0008  GETTABUP  R5 = _ENV[K2('TutorialExecuter')]
  0009  GETTABLE  R5 = R5[K3('StepEnd')]
  0010  CALL      R3 = call(R3, 0 args, 2 rets)
  0011  SELF      R4 = R2[K4('OnRemove')] (self)
  0012  CALL      R3 = call(R3, 0 args, 1 rets)
  0013  GETTABLE  R3 = R0[K5('m_mapNotStartedTutorials')]
  0014  SETTABLE  R3[R1] = K6(nil)
  0015  GETTABLE  R3 = R0[K0('m_mapOngoingTutorials')]
  0016  SETTABLE  R3[R1] = K6(nil)
  0017  SELF      R4 = R0[K7('SetTutorialFinished')] (self)
  0018  MOVE      R5 = R0
  0019  CALL      R3 = call(R3, 0 args, 2 rets)
  0020  SELF      R4 = R0[K8('TryToStartTutorials')] (self)
  0021  CALL      R3 = call(R3, 0 args, 1 rets)
  0022  GETTABUP  R3 = _ENV[K9('EventDispatcher')]
  0023  GETTABLE  R3 = R3[K10('DispatchEvent')]
  0024  GETTABUP  R4 = _ENV[K11('EEventType')]
  0025  GETTABLE  R4 = R4[K12('TutorialFinished')]
  0026  NEWTABLE  R5 = {} (0 items)
  0027  SETTABLE  R5[K13('id')] = R1
  0028  CALL      R3 = call(R3, 0 args, 2 rets)
  0029  RETURN    return R0..R-1
; ---------- proto22 [ClearTempDatas] ----------
  ; fn ?  line 205-208 np=1 va=0 ms=3 code=5 consts=2 upvals=0 protos=0
  ;   K[0]='SetForceSourceBoardPosition'
  ;   K[1]='SetForceTargetBoardPosition'
  ;   locals: self(0-5)
  0000  SELF      R2 = R0[K0('SetForceSourceBoardPosition')] (self)
  0001  CALL      R1 = call(R1, 0 args, 1 rets)
  0002  SELF      R2 = R0[K1('SetForceTargetBoardPosition')] (self)
  0003  CALL      R1 = call(R1, 0 args, 1 rets)
  0004  RETURN    return R0..R-1
; ---------- proto23 [SetForceSourceBoardPosition] ----------
  ; fn ?  line 211-213 np=2 va=0 ms=2 code=2 consts=1 upvals=0 protos=0
  ;   K[0]='m_sourceBoardPos'
  ;   locals: self(0-2), boardPos(0-2)
  0000  SETTABLE  R0[K0('m_sourceBoardPos')] = R1
  0001  RETURN    return R0..R-1
; ---------- proto24 [GetForceSourceBoardPosition] ----------
  ; fn ?  line 215-217 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_sourceBoardPos'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_sourceBoardPos')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto25 [SetForceTargetBoardPosition] ----------
  ; fn ?  line 219-221 np=2 va=0 ms=2 code=2 consts=1 upvals=0 protos=0
  ;   K[0]='m_targetBoardPos'
  ;   locals: self(0-2), boardPos(0-2)
  0000  SETTABLE  R0[K0('m_targetBoardPos')] = R1
  0001  RETURN    return R0..R-1
; ---------- proto26 [GetForceTargetBoardPosition] ----------
  ; fn ?  line 223-225 np=1 va=0 ms=2 code=3 consts=1 upvals=0 protos=0
  ;   K[0]='m_targetBoardPos'
  ;   locals: self(0-3)
  0000  GETTABLE  R1 = R0[K0('m_targetBoardPos')]
  0001  RETURN    return R1..R0
  0002  RETURN    return R0..R-1
; ---------- proto27 [AddAutoPopup] ----------
  ; fn ?  line 227-229 np=2 va=0 ms=3 code=3 consts=2 upvals=0 protos=0
  ;   K[0]='m_mapAutoPopupExecuters'
  ;   K[1]=true
  ;   locals: self(0-3), executer(0-3)
  0000  GETTABLE  R2 = R0[K0('m_mapAutoPopupExecuters')]
  0001  SETTABLE  R2[R1] = K1(true)
  0002  RETURN    return R0..R-1
; ---------- proto28 [RemoveAutoPopup] ----------
  ; fn ?  line 231-233 np=2 va=0 ms=3 code=3 consts=2 upvals=0 protos=0
  ;   K[0]='m_mapAutoPopupExecuters'
  ;   K[1]=nil
  ;   locals: self(0-3), executer(0-3)
  0000  GETTABLE  R2 = R0[K0('m_mapAutoPopupExecuters')]
  0001  SETTABLE  R2[R1] = K1(nil)
  0002  RETURN    return R0..R-1
; ---------- proto29 [ShouldAutoPopup] ----------
  ; fn ?  line 235-237 np=1 va=0 ms=3 code=9 consts=3 upvals=1 protos=0
  ;   K[0]='next'
  ;   K[1]='m_mapAutoPopupExecuters'
  ;   K[2]=nil
  ;   upvals: _ENV
  ;   locals: self(0-9)
  0000  GETTABUP  R1 = _ENV[K0('next')]
  0001  GETTABLE  R2 = R0[K1('m_mapAutoPopupExecuters')]
  0002  CALL      R1 = call(R1, 1 args, 1 rets)
  0003  EQ        if R0 eq K2(nil)   -> -130297
  0004  JMP       (jump)   -> 6
  0005  LOADBOOL  R1 = false
  0006  LOADBOOL  R1 = true
  0007  RETURN    return R1..R0
  0008  RETURN    return R0..R-1
; ---------- proto30 [TryAutoPopup] ----------
  ; fn ?  line 239-254 np=1 va=0 ms=10 code=34 consts=14 upvals=1 protos=0
  ;   K[0]='Log'
  ;   K[1]='Assert'
  ;   K[2]='ShouldAutoPopup'
  ;   K[3]='引导自动弹出逻辑错误'
  ;   K[4]='Table'
  ;   K[5]='ShallowCopy'
  ;   K[6]='m_mapOngoingTutorials'
  ;   K[7]='pairs'
  ;   K[8]='m_mapAutoPopupExecuters'
  ;   K[9]='TryStartTutorial'
  ;   K[10]='LogTutorialStepFinish'
  ;   K[11]='TutorialExecuter'
  ;   K[12]='StepStart'
  ;   K[13]='RemoveAutoPopup'
  ;   upvals: _ENV
  ;   locals: self(0-34), mapOngoingTutorials(10-34), (for generator)(13-33), (for state)(13-33), (for control)(13-33), k(14-31), executer(14-31)
  0000  GETTABUP  R1 = _ENV[K0('Log')]
  0001  GETTABLE  R1 = R1[K1('Assert')]
  0002  SELF      R3 = R0[K2('ShouldAutoPopup')] (self)
  0003  CALL      R2 = call(R2, 1 args, 1 rets)
  0004  LOADK     R3 = K3 '引导自动弹出逻辑错误'
  0005  CALL      R1 = call(R1, 0 args, 2 rets)
  0006  GETTABUP  R1 = _ENV[K4('Table')]
  0007  GETTABLE  R1 = R1[K5('ShallowCopy')]
  0008  GETTABLE  R2 = R0[K6('m_mapOngoingTutorials')]
  0009  CALL      R1 = call(R1, 1 args, 1 rets)
  0010  GETTABUP  R2 = _ENV[K7('pairs')]
  0011  MOVE      R3 = R0
  0012  CALL      R2 = call(R2, 3 args, 1 rets)
  0013  JMP       (jump)   -> 31
  0014  GETTABLE  R7 = R0[K8('m_mapAutoPopupExecuters')]
  0015  GETTABLE  R7 = R7[R6]
  0016  TEST      if not R7 then   -> -131054
  0017  JMP       (jump)   -> 31
  0018  SELF      R8 = R6[K9('TryStartTutorial')] (self)
  0019  CALL      R7 = call(R7, 1 args, 1 rets)
  0020  TEST      if not R7 then   -> -131050
  0021  JMP       (jump)   -> 31
  0022  SELF      R8 = R6[K10('LogTutorialStepFinish')] (self)
  0023  GETTABUP  R9 = _ENV[K11('TutorialExecuter')]
  0024  GETTABLE  R9 = R9[K12('StepStart')]
  0025  CALL      R7 = call(R7, 0 args, 2 rets)
  0026  SELF      R8 = R0[K13('RemoveAutoPopup')] (self)
  0027  MOVE      R9 = R0
  0028  CALL      R7 = call(R7, 0 args, 2 rets)
  0029  LOADBOOL  R7 = true
  0030  RETURN    return R7..R6
  0031  TFORCALL  tforcall R2
  0032  TFORLOOP  tforloop R4(sBx=-19)   -> 14
  0033  RETURN    return R0..R-1
; ---------- proto31 [TryPopupTargetTutorial] ----------
  ; fn ?  line 256-267 np=2 va=0 ms=6 code=17 consts=6 upvals=1 protos=0
  ;   K[0]='m_mapOngoingTutorials'
  ;   K[1]=nil
  ;   K[2]='TryStartTutorial'
  ;   K[3]='LogTutorialStepFinish'
  ;   K[4]='TutorialExecuter'
  ;   K[5]='StepStart'
  ;   upvals: _ENV
  ;   locals: self(0-17), tutorialId(0-17), executer(2-17)
  0000  GETTABLE  R2 = R0[K0('m_mapOngoingTutorials')]
  0001  GETTABLE  R2 = R2[R1]
  0002  EQ        if R0 eq K1(nil)   -> -129787
  0003  JMP       (jump)   -> 6
  0004  LOADBOOL  R3 = false
  0005  RETURN    return R3..R2
  0006  SELF      R4 = R2[K2('TryStartTutorial')] (self)
  0007  CALL      R3 = call(R3, 1 args, 1 rets)
  0008  TEST      if not R3 then   -> -131062
  0009  JMP       (jump)   -> 16
  0010  SELF      R4 = R2[K3('LogTutorialStepFinish')] (self)
  0011  GETTABUP  R5 = _ENV[K4('TutorialExecuter')]
  0012  GETTABLE  R5 = R5[K5('StepStart')]
  0013  CALL      R3 = call(R3, 0 args, 2 rets)
  0014  LOADBOOL  R3 = true
  0015  RETURN    return R3..R2
  0016  RETURN    return R0..R-1
; ---------- proto32 [TestFinishTutorial] ----------
  ; fn ?  line 272-301 np=2 va=0 ms=11 code=66 consts=15 upvals=1 protos=0
  ;   K[0]='GameConfig'
  ;   K[1]='IsTestMode'
  ;   K[2]='pairs'
  ;   K[3]='m_mapNotStartedTutorials'
  ;   K[4]='GetTutorialId'
  ;   K[5]='SetTutorialFinished'
  ;   K[6]=nil
  ;   K[7]='tutorial_2'
  ;   K[8]='GM'
  ;   K[9]='MiscModel'
  ;   K[10]='SetIntroTimelineFinished'
  ;   K[11]='m_mapOngoingTutorials'
  ;   K[12]='OnRemove'
  ;   K[13]='TutorialModel'
  ;   K[14]='ClearTempDatas'
  ;   upvals: _ENV
  ;   locals: self(0-66), tutorialId(0-66), (for generator)(10-32), (for state)(10-32), (for control)(10-32), k(11-30), data(11-30), (for generator)(35-63), (for state)(35-63), (for control)(35-63), k(36-61), executer(36-61)
  0000  GETTABUP  R2 = _ENV[K0('GameConfig')]
  0001  GETTABLE  R2 = R2[K1('IsTestMode')]
  0002  CALL      R2 = call(R2, 1 args, 0 rets)
  0003  TEST      if not R2 then   -> -131066
  0004  JMP       (jump)   -> 7
  0005  LOADBOOL  R2 = false
  0006  RETURN    return R2..R1
  0007  GETTABUP  R2 = _ENV[K2('pairs')]
  0008  GETTABLE  R3 = R0[K3('m_mapNotStartedTutorials')]
  0009  CALL      R2 = call(R2, 3 args, 1 rets)
  0010  JMP       (jump)   -> 30
  0011  SELF      R8 = R6[K4('GetTutorialId')] (self)
  0012  CALL      R7 = call(R7, 1 args, 1 rets)
  0013  EQ        if R0 eq R7   -> -130538
  0014  JMP       (jump)   -> 30
  0015  SELF      R8 = R0[K5('SetTutorialFinished')] (self)
  0016  SELF      R10 = R6[K4('GetTutorialId')] (self)
  0017  CALL      R9 = call(R9, -1 args, 1 rets)
  0018  CALL      R7 = call(R7, 0 args, -1 rets)
  0019  GETTABLE  R7 = R0[K3('m_mapNotStartedTutorials')]
  0020  SETTABLE  R7[R5] = K6(nil)
  0021  EQ        if R0 eq K7('tutorial_2')   -> -130274
  0022  JMP       (jump)   -> 28
  0023  GETTABUP  R7 = _ENV[K8('GM')]
  0024  GETTABLE  R7 = R7[K9('MiscModel')]
  0025  SELF      R8 = R7[K10('SetIntroTimelineFinished')] (self)
  0026  LOADBOOL  R9 = true
  0027  CALL      R7 = call(R7, 0 args, 2 rets)
  0028  LOADBOOL  R7 = true
  0029  RETURN    return R7..R6
  0030  TFORCALL  tforcall R2
  0031  TFORLOOP  tforloop R4(sBx=-21)   -> 11
  0032  GETTABUP  R2 = _ENV[K2('pairs')]
  0033  GETTABLE  R3 = R0[K11('m_mapOngoingTutorials')]
  0034  CALL      R2 = call(R2, 3 args, 1 rets)
  0035  JMP       (jump)   -> 61
  0036  SELF      R8 = R6[K4('GetTutorialId')] (self)
  0037  CALL      R7 = call(R7, 1 args, 1 rets)
  0038  EQ        if R0 eq R7   -> -130513
  0039  JMP       (jump)   -> 61
  0040  SELF      R8 = R0[K5('SetTutorialFinished')] (self)
  0041  SELF      R10 = R6[K4('GetTutorialId')] (self)
  0042  CALL      R9 = call(R9, -1 args, 1 rets)
  0043  CALL      R7 = call(R7, 0 args, -1 rets)
  0044  SELF      R8 = R6[K12('OnRemove')] (self)
  0045  CALL      R7 = call(R7, 0 args, 1 rets)
  0046  GETTABLE  R7 = R0[K11('m_mapOngoingTutorials')]
  0047  SETTABLE  R7[R5] = K6(nil)
  0048  EQ        if R0 eq K7('tutorial_2')   -> -130247
  0049  JMP       (jump)   -> 55
  0050  GETTABUP  R7 = _ENV[K8('GM')]
  0051  GETTABLE  R7 = R7[K9('MiscModel')]
  0052  SELF      R8 = R7[K10('SetIntroTimelineFinished')] (self)
  0053  LOADBOOL  R9 = true
  0054  CALL      R7 = call(R7, 0 args, 2 rets)
  0055  GETTABUP  R7 = _ENV[K8('GM')]
  0056  GETTABLE  R7 = R7[K13('TutorialModel')]
  0057  SELF      R8 = R7[K14('ClearTempDatas')] (self)
  0058  CALL      R7 = call(R7, 0 args, 1 rets)
  0059  LOADBOOL  R7 = true
  0060  RETURN    return R7..R6
  0061  TFORCALL  tforcall R2
  0062  TFORLOOP  tforloop R4(sBx=-27)   -> 36
  0063  LOADBOOL  R2 = false
  0064  RETURN    return R2..R1
  0065  RETURN    return R0..R-1
; ---------- proto33 [TestUnFinishTutorial] ----------
  ; fn ?  line 303-317 np=2 va=0 ms=7 code=37 consts=16 upvals=3 protos=0
  ;   K[0]='GameConfig'
  ;   K[1]='IsTestMode'
  ;   K[2]='m_mapNotStartedTutorials'
  ;   K[3]='m_mapTutorialConfigDatas'
  ;   K[4]='m_dbTable'
  ;   K[5]='Set'
  ;   K[6]='ETutorialState'
  ;   K[7]='NotStarted'
  ;   K[8]=''
  ;   K[9]='PlayerPrefs'
  ;   K[10]='SetInt'
  ;   K[11]='EPlayerPrefKey'
  ;   K[12]='TestIgnoreTutorial'
  ;   K[13]=0
  ;   K[14]='UpdateTutorialDatas'
  ;   K[15]='TryToStartTutorials'
  ;   upvals: _ENV, DBColumnState, DBColumnOngoingDatas
  ;   locals: self(0-37), tutorialId(0-37)
  0000  GETTABUP  R2 = _ENV[K0('GameConfig')]
  0001  GETTABLE  R2 = R2[K1('IsTestMode')]
  0002  CALL      R2 = call(R2, 1 args, 0 rets)
  0003  TEST      if not R2 then   -> -131066
  0004  JMP       (jump)   -> 7
  0005  LOADBOOL  R2 = false
  0006  RETURN    return R2..R1
  0007  GETTABLE  R2 = R0[K2('m_mapNotStartedTutorials')]
  0008  GETTABLE  R3 = R0[K3('m_mapTutorialConfigDatas')]
  0009  GETTABLE  R3 = R3[R1]
  0010  SETTABLE  R2[R1] = R3
  0011  GETTABLE  R2 = R0[K4('m_dbTable')]
  0012  SELF      R3 = R2[K5('Set')] (self)
  0013  MOVE      R4 = R0
  0014  GETUPVAL  R5 = _ENV
  0015  GETTABUP  R6 = _ENV[K6('ETutorialState')]
  0016  GETTABLE  R6 = R6[K7('NotStarted')]
  0017  CALL      R2 = call(R2, 0 args, 4 rets)
  0018  GETTABLE  R2 = R0[K4('m_dbTable')]
  0019  SELF      R3 = R2[K5('Set')] (self)
  0020  MOVE      R4 = R0
  0021  GETUPVAL  R5 = _ENV
  0022  LOADK     R6 = K8 ''
  0023  CALL      R2 = call(R2, 0 args, 4 rets)
  0024  GETTABUP  R2 = _ENV[K9('PlayerPrefs')]
  0025  GETTABLE  R2 = R2[K10('SetInt')]
  0026  GETTABUP  R3 = _ENV[K11('EPlayerPrefKey')]
  0027  GETTABLE  R3 = R3[K12('TestIgnoreTutorial')]
  0028  LOADK     R4 = K13 0
  0029  CALL      R2 = call(R2, 0 args, 2 rets)
  0030  SELF      R3 = R0[K14('UpdateTutorialDatas')] (self)
  0031  CALL      R2 = call(R2, 0 args, 1 rets)
  0032  SELF      R3 = R0[K15('TryToStartTutorials')] (self)
  0033  CALL      R2 = call(R2, 0 args, 1 rets)
  0034  LOADBOOL  R2 = true
  0035  RETURN    return R2..R1
  0036  RETURN    return R0..R-1
; ---------- proto34 [TestFinishAllTutorials] ----------
  ; fn ?  line 319-334 np=1 va=0 ms=10 code=37 consts=14 upvals=1 protos=0
  ;   K[0]='GameConfig'
  ;   K[1]='IsTestMode'
  ;   K[2]='require'
  ;   K[3]='Data.Tutorial.TutorialConfig'
  ;   K[4]='ipairs'
  ;   K[5]='SetTutorialFinished'
  ;   K[6]='id'
  ;   K[7]='GM'
  ;   K[8]='MiscModel'
  ;   K[9]='SetIntroTimelineFinished'
  ;   K[10]='m_mapNotStartedTutorials'
  ;   K[11]='pairs'
  ;   K[12]='m_mapOngoingTutorials'
  ;   K[13]='OnRemove'
  ;   upvals: _ENV
  ;   locals: self(0-37), arrTutorialConfigs(10-37), (for generator)(13-19), (for state)(13-19), (for control)(13-19), _(14-17), config(14-17), (for generator)(29-34), (for state)(29-34), (for control)(29-34), _(30-32), executer(30-32)
  0000  GETTABUP  R1 = _ENV[K0('GameConfig')]
  0001  GETTABLE  R1 = R1[K1('IsTestMode')]
  0002  CALL      R1 = call(R1, 1 args, 0 rets)
  0003  TEST      if not R1 then   -> -131066
  0004  JMP       (jump)   -> 7
  0005  LOADBOOL  R1 = false
  0006  RETURN    return R1..R0
  0007  GETTABUP  R1 = _ENV[K2('require')]
  0008  LOADK     R2 = K3 'Data.Tutorial.TutorialConfig'
  0009  CALL      R1 = call(R1, 1 args, 1 rets)
  0010  GETTABUP  R2 = _ENV[K4('ipairs')]
  0011  MOVE      R3 = R0
  0012  CALL      R2 = call(R2, 3 args, 1 rets)
  0013  JMP       (jump)   -> 17
  0014  SELF      R8 = R0[K5('SetTutorialFinished')] (self)
  0015  GETTABLE  R9 = R6[K6('id')]
  0016  CALL      R7 = call(R7, 0 args, 2 rets)
  0017  TFORCALL  tforcall R2
  0018  TFORLOOP  tforloop R4(sBx=-5)   -> 14
  0019  GETTABUP  R2 = _ENV[K7('GM')]
  0020  GETTABLE  R2 = R2[K8('MiscModel')]
  0021  SELF      R3 = R2[K9('SetIntroTimelineFinished')] (self)
  0022  LOADBOOL  R4 = true
  0023  CALL      R2 = call(R2, 0 args, 2 rets)
  0024  NEWTABLE  R2 = {} (0 items)
  0025  SETTABLE  R0[K10('m_mapNotStartedTutorials')] = R2
  0026  GETTABUP  R2 = _ENV[K11('pairs')]
  0027  GETTABLE  R3 = R0[K12('m_mapOngoingTutorials')]
  0028  CALL      R2 = call(R2, 3 args, 1 rets)
  0029  JMP       (jump)   -> 32
  0030  SELF      R8 = R6[K13('OnRemove')] (self)
  0031  CALL      R7 = call(R7, 0 args, 1 rets)
  0032  TFORCALL  tforcall R2
  0033  TFORLOOP  tforloop R4(sBx=-4)   -> 30
  0034  NEWTABLE  R2 = {} (0 items)
  0035  SETTABLE  R0[K12('m_mapOngoingTutorials')] = R2
  0036  RETURN    return R0..R-1
