File 8base_80736669542d3727c77ccda1589f9d7c17568a1d97d98ffae84afbbbf081be67.elf
Function:
    00403f88
    00403f88fcontract:
    00403f88stp x29, x30, [sp-128]!
    00403f8cadd x29, sp, 0
    00403f90str x0, [sp+24]
    00403f94str x1, [sp+16]
    00403f98str wzr, [sp+124]
    00403f9cb 0x403fd4
    00403fa0
    00403fa0loc_403fa0:
    00403fa0ldrsw x0, [sp+124]
    00403fa4ubfm x0, x0, 61, 60
    00403fa8ldr x1, [sp+16]
    00403facadd x0, x1, x0
    00403fb0ldr x0, [x0]
    00403fb4mov w2, w0
    00403fb8ldrsw x0, [sp+124]
    00403fbcubfm x0, x0, 62, 61
    00403fc0add x1, sp, 32
    00403fc4str w2, [x1+x0]
    00403fc8ldr w0, [sp+124]
    00403fccadd w0, w0, 1
    00403fd0str w0, [sp+124]
    00403fd4
    00403fd4loc_403fd4:
    00403fd4ldr w0, [sp+124]
    00403fd8subs wzr, w0, 9
    00403fdcb.le 0x403fa0
    00403fe0str wzr, [sp+120]
    00403fe4b 0x4041b8
    00403fe8
    00403fe8loc_403fe8:
    00403fe8str wzr, [sp+124]
    00403fecb 0x404150
    00403ff0
    00403ff0loc_403ff0:
    00403ff0ldr w0, [sp+124]
    00403ff4and w0, w0, 1
    00403ff8subs wzr, w0, 0
    00403ffcb.eq 0x4040a4
    00404000ldrsw x0, [sp+124]
    00404004ubfm x0, x0, 62, 61
    00404008add x1, sp, 32
    0040400cldr w0, [x1+x0]
    00404010sbfm w0, w0, 31, 31
    00404014str w0, [sp+76]
    00404018ldrsw x0, [sp+124]
    0040401cubfm x0, x0, 62, 61
    00404020add x1, sp, 32
    00404024ldr w1, [x1+x0]
    00404028ldr w0, [sp+76]
    0040402cand w0, w1, w0
    00404030sbfm w0, w0, 25, 31
    00404034sub w0, wzr, w0
    00404038str w0, [sp+72]
    0040403cldrsw x0, [sp+124]
    00404040ubfm x0, x0, 62, 61
    00404044add x1, sp, 32
    00404048ldr w1, [x1+x0]
    0040404cldr w0, [sp+72]
    00404050ubfm w0, w0, 7, 6
    00404054add w2, w1, w0
    00404058ldrsw x0, [sp+124]
    0040405cubfm x0, x0, 62, 61
    00404060add x1, sp, 32
    00404064str w2, [x1+x0]
    00404068ldr w0, [sp+124]
    0040406cadd w0, w0, 1
    00404070sbfm x0, x0, 0, 31
    00404074ubfm x0, x0, 62, 61
    00404078add x1, sp, 32
    0040407cldr w1, [x1+x0]
    00404080ldr w0, [sp+124]
    00404084add w3, w0, 1
    00404088ldr w0, [sp+72]
    0040408csub w2, w1, w0
    00404090sbfm x0, x3, 0, 31
    00404094ubfm x0, x0, 62, 61
    00404098add x1, sp, 32
    0040409cstr w2, [x1+x0]
    004040a0b 0x404144
    004040a4
    004040a4loc_4040a4:
    004040a4ldrsw x0, [sp+124]
    004040a8ubfm x0, x0, 62, 61
    004040acadd x1, sp, 32
    004040b0ldr w0, [x1+x0]
    004040b4sbfm w0, w0, 31, 31
    004040b8str w0, [sp+84]
    004040bcldrsw x0, [sp+124]
    004040c0ubfm x0, x0, 62, 61
    004040c4add x1, sp, 32
    004040c8ldr w1, [x1+x0]
    004040ccldr w0, [sp+84]
    004040d0and w0, w1, w0
    004040d4sbfm w0, w0, 26, 31
    004040d8sub w0, wzr, w0
    004040dcstr w0, [sp+80]
    004040e0ldrsw x0, [sp+124]
    004040e4ubfm x0, x0, 62, 61
    004040e8add x1, sp, 32
    004040ecldr w1, [x1+x0]
    004040f0ldr w0, [sp+80]
    004040f4ubfm w0, w0, 6, 5
    004040f8add w2, w1, w0
    004040fcldrsw x0, [sp+124]
    00404100ubfm x0, x0, 62, 61
    00404104add x1, sp, 32
    00404108str w2, [x1+x0]
    0040410cldr w0, [sp+124]
    00404110add w0, w0, 1
    00404114sbfm x0, x0, 0, 31
    00404118ubfm x0, x0, 62, 61
    0040411cadd x1, sp, 32
    00404120ldr w1, [x1+x0]
    00404124ldr w0, [sp+124]
    00404128add w3, w0, 1
    0040412cldr w0, [sp+80]
    00404130sub w2, w1, w0
    00404134sbfm x0, x3, 0, 31
    00404138ubfm x0, x0, 62, 61
    0040413cadd x1, sp, 32
    00404140str w2, [x1+x0]
    00404144
    00404144loc_404144:
    00404144ldr w0, [sp+124]
    00404148add w0, w0, 1
    0040414cstr w0, [sp+124]
    00404150
    00404150loc_404150:
    00404150ldr w0, [sp+124]
    00404154subs wzr, w0, 8
    00404158b.le 0x403ff0
    0040415cldr w0, [sp+68]
    00404160sbfm w0, w0, 31, 31
    00404164str w0, [sp+92]
    00404168ldr w1, [sp+68]
    0040416cldr w0, [sp+92]
    00404170and w0, w1, w0
    00404174sbfm w0, w0, 25, 31
    00404178sub w0, wzr, w0
    0040417cstr w0, [sp+88]
    00404180ldr w1, [sp+68]
    00404184ldr w0, [sp+88]
    00404188ubfm w0, w0, 7, 6
    0040418cadd w0, w1, w0
    00404190str w0, [sp+68]
    00404194ldr w1, [sp+32]
    00404198ldr w2, [sp+88]
    0040419cmovn w0, 18
    004041a0madd w0, w2, w0, wzr
    004041a4add w0, w1, w0
    004041a8str w0, [sp+32]
    004041acldr w0, [sp+120]
    004041b0add w0, w0, 1
    004041b4str w0, [sp+120]
    004041b8
    004041b8loc_4041b8:
    004041b8ldr w0, [sp+120]
    004041bcsubs wzr, w0, 1
    004041c0b.le 0x403fe8
    004041c4ldr w0, [sp+32]
    004041c8sbfm w0, w0, 31, 31
    004041ccstr w0, [sp+112]
    004041d0ldr w1, [sp+32]
    004041d4ldr w0, [sp+112]
    004041d8and w0, w1, w0
    004041dcsbfm w0, w0, 26, 31
    004041e0sub w0, wzr, w0
    004041e4str w0, [sp+108]
    004041e8ldr w1, [sp+32]
    004041ecldr w0, [sp+108]
    004041f0ubfm w0, w0, 6, 5
    004041f4add w0, w1, w0
    004041f8str w0, [sp+32]
    004041fcldr w1, [sp+36]
    00404200ldr w0, [sp+108]
    00404204sub w0, w1, w0
    00404208str w0, [sp+36]
    0040420cstr wzr, [sp+120]
    00404210b 0x40436c
    00404214
    00404214loc_404214:
    00404214str wzr, [sp+124]
    00404218b 0x404324
    0040421c
    0040421cloc_40421c:
    0040421cldr w0, [sp+124]
    00404220and w0, w0, 1
    00404224subs wzr, w0, 0
    00404228b.eq 0x4042a4
    0040422cldrsw x0, [sp+124]
    00404230ubfm x0, x0, 62, 61
    00404234add x1, sp, 32
    00404238ldr w0, [x1+x0]
    0040423csbfm w0, w0, 25, 31
    00404240str w0, [sp+96]
    00404244ldrsw x0, [sp+124]
    00404248ubfm x0, x0, 62, 61
    0040424cadd x1, sp, 32
    00404250ldr w0, [x1+x0]
    00404254and w2, w0, 0x1ffffff
    00404258ldrsw x0, [sp+124]
    0040425cubfm x0, x0, 62, 61
    00404260add x1, sp, 32
    00404264str w2, [x1+x0]
    00404268ldr w0, [sp+124]
    0040426cadd w0, w0, 1
    00404270sbfm x0, x0, 0, 31
    00404274ubfm x0, x0, 62, 61
    00404278add x1, sp, 32
    0040427cldr w1, [x1+x0]
    00404280ldr w0, [sp+124]
    00404284add w3, w0, 1
    00404288ldr w0, [sp+96]
    0040428cadd w2, w1, w0
    00404290sbfm x0, x3, 0, 31
    00404294ubfm x0, x0, 62, 61
    00404298add x1, sp, 32
    0040429cstr w2, [x1+x0]
    004042a0b 0x404318
    004042a4
    004042a4loc_4042a4:
    004042a4ldrsw x0, [sp+124]
    004042a8ubfm x0, x0, 62, 61
    004042acadd x1, sp, 32
    004042b0ldr w0, [x1+x0]
    004042b4sbfm w0, w0, 26, 31
    004042b8str w0, [sp+100]
    004042bcldrsw x0, [sp+124]
    004042c0ubfm x0, x0, 62, 61
    004042c4add x1, sp, 32
    004042c8ldr w0, [x1+x0]
    004042ccand w2, w0, 0x3ffffff
    004042d0ldrsw x0, [sp+124]
    004042d4ubfm x0, x0, 62, 61
    004042d8add x1, sp, 32
    004042dcstr w2, [x1+x0]
    004042e0ldr w0, [sp+124]
    004042e4add w0, w0, 1
    004042e8sbfm x0, x0, 0, 31
    004042ecubfm x0, x0, 62, 61
    004042f0add x1, sp, 32
    004042f4ldr w1, [x1+x0]
    004042f8ldr w0, [sp+124]
    004042fcadd w3, w0, 1
    00404300ldr w0, [sp+100]
    00404304add w2, w1, w0
    00404308sbfm x0, x3, 0, 31
    0040430cubfm x0, x0, 62, 61
    00404310add x1, sp, 32
    00404314str w2, [x1+x0]
    00404318
    00404318loc_404318:
    00404318ldr w0, [sp+124]
    0040431cadd w0, w0, 1
    00404320str w0, [sp+124]
    00404324
    00404324loc_404324:
    00404324ldr w0, [sp+124]
    00404328subs wzr, w0, 8
    0040432cb.le 0x40421c
    00404330ldr w0, [sp+68]
    00404334sbfm w0, w0, 25, 31
    00404338str w0, [sp+104]
    0040433cldr w0, [sp+68]
    00404340and w0, w0, 0x1ffffff
    00404344str w0, [sp+68]
    00404348ldr w1, [sp+32]
    0040434cldr w2, [sp+104]
    00404350movz w0, 19
    00404354madd w0, w2, w0, wzr
    00404358add w0, w1, w0
    0040435cstr w0, [sp+32]
    00404360ldr w0, [sp+120]
    00404364add w0, w0, 1
    00404368str w0, [sp+120]
    0040436c
    0040436cloc_40436c:
    0040436cldr w0, [sp+120]
    00404370subs wzr, w0, 1
    00404374b.le 0x404214
    00404378ldr w0, [sp+32]
    0040437cmovz w1, 65517
    00404380movk w1, 0x3ff0000
    00404384bl s32_gte
    00404388str w0, [sp+116]
    0040438cmovz w0, 1
    00404390str w0, [sp+124]
    00404394b 0x404408
    00404398
    00404398loc_404398:
    00404398ldr w0, [sp+124]
    0040439cand w0, w0, 1
    004043a0subs wzr, w0, 0
    004043a4b.eq 0x4043d4
    004043a8ldrsw x0, [sp+124]
    004043acubfm x0, x0, 62, 61
    004043b0add x1, sp, 32
    004043b4ldr w0, [x1+x0]
    004043b8movn w1, 0xfe000000
    004043bcbl s32_eq
    004043c0mov w1, w0
    004043c4ldr w0, [sp+116]
    004043c8and w0, w0, w1
    004043ccstr w0, [sp+116]
    004043d0b 0x4043fc
    004043d4
    004043d4loc_4043d4:
    004043d4ldrsw x0, [sp+124]
    004043d8ubfm x0, x0, 62, 61
    004043dcadd x1, sp, 32
    004043e0ldr w0, [x1+x0]
    004043e4movn w1, 0xfc000000
    004043e8bl s32_eq
    004043ecmov w1, w0
    004043f0ldr w0, [sp+116]
    004043f4and w0, w0, w1
    004043f8str w0, [sp+116]
    004043fc
    004043fcloc_4043fc:
    004043fcldr w0, [sp+124]
    00404400add w0, w0, 1
    00404404str w0, [sp+124]
    00404408
    00404408loc_404408:
    00404408ldr w0, [sp+124]
    0040440csubs wzr, w0, 9
    00404410b.le 0x404398
    00404414ldr w1, [sp+32]
    00404418ldr w2, [sp+116]
    0040441cmovz w0, 65517
    00404420movk w0, 0x3ff0000
    00404424and w0, w2, w0
    00404428sub w0, w1, w0
    0040442cstr w0, [sp+32]
    00404430movz w0, 1
    00404434str w0, [sp+124]
    00404438b 0x4044b4
    0040443c
    0040443cloc_40443c:
    0040443cldr w0, [sp+124]
    00404440and w0, w0, 1
    00404444subs wzr, w0, 0
    00404448b.eq 0x40447c
    0040444cldrsw x0, [sp+124]
    00404450ubfm x0, x0, 62, 61
    00404454add x1, sp, 32
    00404458ldr w1, [x1+x0]
    0040445cldr w0, [sp+116]
    00404460and w0, w0, 0x1ffffff
    00404464sub w2, w1, w0
    00404468ldrsw x0, [sp+124]
    0040446cubfm x0, x0, 62, 61
    00404470add x1, sp, 32
    00404474str w2, [x1+x0]
    00404478b 0x4044a8
    0040447c
    0040447cloc_40447c:
    0040447cldrsw x0, [sp+124]
    00404480ubfm x0, x0, 62, 61
    00404484add x1, sp, 32
    00404488ldr w1, [x1+x0]
    0040448cldr w0, [sp+116]
    00404490and w0, w0, 0x3ffffff
    00404494sub w2, w1, w0
    00404498ldrsw x0, [sp+124]
    0040449cubfm x0, x0, 62, 61
    004044a0add x1, sp, 32
    004044a4str w2, [x1+x0]
    004044a8
    004044a8loc_4044a8:
    004044a8ldr w0, [sp+124]
    004044acadd w0, w0, 1
    004044b0str w0, [sp+124]
    004044b4
    004044b4loc_4044b4:
    004044b4ldr w0, [sp+124]
    004044b8subs wzr, w0, 9
    004044bcb.le 0x40443c
    004044c0ldr w0, [sp+36]
    004044c4ubfm w0, w0, 30, 29
    004044c8str w0, [sp+36]
    004044ccldr w0, [sp+40]
    004044d0ubfm w0, w0, 29, 28
    004044d4str w0, [sp+40]
    004044d8ldr w0, [sp+44]
    004044dcubfm w0, w0, 27, 26
    004044e0str w0, [sp+44]
    004044e4ldr w0, [sp+48]
    004044e8ubfm w0, w0, 26, 25
    004044ecstr w0, [sp+48]
    004044f0ldr w0, [sp+56]
    004044f4ubfm w0, w0, 31, 30
    004044f8str w0, [sp+56]
    004044fcldr w0, [sp+60]
    00404500ubfm w0, w0, 29, 28
    00404504str w0, [sp+60]
    00404508ldr w0, [sp+64]
    0040450cubfm w0, w0, 28, 27
    00404510str w0, [sp+64]
    00404514ldr w0, [sp+68]
    00404518ubfm w0, w0, 26, 25
    0040451cstr w0, [sp+68]
    00404520ldr x0, [sp+24]
    00404524strb wzr, [x0]
    00404528ldr x0, [sp+24]
    0040452cadd x0, x0, 16
    00404530strb wzr, [x0]
    00404534ldr x0, [sp+24]
    00404538ldrb w0, [x0]
    0040453csbfm w1, w0, 0, 7
    00404540ldr w0, [sp+32]
    00404544sbfm w0, w0, 0, 7
    00404548orr w0, w1, w0
    0040454csbfm w0, w0, 0, 7
    00404550and w1, w0, 255
    00404554ldr x0, [sp+24]
    00404558strb w1, [x0]
    0040455cldr w0, [sp+32]
    00404560sbfm w1, w0, 8, 31
    00404564ldr x0, [sp+24]
    00404568add x0, x0, 1
    0040456cand w1, w1, 255
    00404570strb w1, [x0]
    00404574ldr w0, [sp+32]
    00404578sbfm w1, w0, 16, 31
    0040457cldr x0, [sp+24]
    00404580add x0, x0, 2
    00404584and w1, w1, 255
    00404588strb w1, [x0]
    0040458cldr w0, [sp+32]
    00404590ubfm w1, w0, 24, 31
    00404594ldr x0, [sp+24]
    00404598add x0, x0, 3
    0040459cand w1, w1, 255
    004045a0strb w1, [x0]
    004045a4ldr x0, [sp+24]
    004045a8add x0, x0, 3
    004045acldrb w0, [x0]
    004045b0sbfm w1, w0, 0, 7
    004045b4ldr w0, [sp+36]
    004045b8sbfm w0, w0, 0, 7
    004045bcorr w0, w1, w0
    004045c0sbfm w1, w0, 0, 7
    004045c4ldr x0, [sp+24]
    004045c8add x0, x0, 3
    004045ccand w1, w1, 255
    004045d0strb w1, [x0]
    004045d4ldr w0, [sp+36]
    004045d8sbfm w1, w0, 8, 31
    004045dcldr x0, [sp+24]
    004045e0add x0, x0, 4
    004045e4and w1, w1, 255
    004045e8strb w1, [x0]
    004045ecldr w0, [sp+36]
    004045f0sbfm w1, w0, 16, 31
    004045f4ldr x0, [sp+24]
    004045f8add x0, x0, 5
    004045fcand w1, w1, 255
    00404600strb w1, [x0]
    00404604ldr w0, [sp+36]
    00404608ubfm w1, w0, 24, 31
    0040460cldr x0, [sp+24]
    00404610add x0, x0, 6
    00404614and w1, w1, 255
    00404618strb w1, [x0]
    0040461cldr x0, [sp+24]
    00404620add x0, x0, 6
    00404624ldrb w0, [x0]
    00404628sbfm w1, w0, 0, 7
    0040462cldr w0, [sp+40]
    00404630sbfm w0, w0, 0, 7
    00404634orr w0, w1, w0
    00404638sbfm w1, w0, 0, 7
    0040463cldr x0, [sp+24]
    00404640add x0, x0, 6
    00404644and w1, w1, 255
    00404648strb w1, [x0]
    0040464cldr w0, [sp+40]
    00404650sbfm w1, w0, 8, 31
    00404654ldr x0, [sp+24]
    00404658add x0, x0, 7
    0040465cand w1, w1, 255
    00404660strb w1, [x0]
    00404664ldr w0, [sp+40]
    00404668sbfm w1, w0, 16, 31
    0040466cldr x0, [sp+24]
    00404670add x0, x0, 8
    00404674and w1, w1, 255
    00404678strb w1, [x0]
    0040467cldr w0, [sp+40]
    00404680ubfm w1, w0, 24, 31
    00404684ldr x0, [sp+24]
    00404688add x0, x0, 9
    0040468cand w1, w1, 255
    00404690strb w1, [x0]
    00404694ldr x0, [sp+24]
    00404698add x0, x0, 9
    0040469cldrb w0, [x0]
    004046a0sbfm w1, w0, 0, 7
    004046a4ldr w0, [sp+44]
    004046a8sbfm w0, w0, 0, 7
    004046acorr w0, w1, w0
    004046b0sbfm w1, w0, 0, 7
    004046b4ldr x0, [sp+24]
    004046b8add x0, x0, 9
    004046bcand w1, w1, 255
    004046c0strb w1, [x0]
    004046c4ldr w0, [sp+44]
    004046c8sbfm w1, w0, 8, 31
    004046ccldr x0, [sp+24]
    004046d0add x0, x0, 10
    004046d4and w1, w1, 255
    004046d8strb w1, [x0]
    004046dcldr w0, [sp+44]
    004046e0sbfm w1, w0, 16, 31
    004046e4ldr x0, [sp+24]
    004046e8add x0, x0, 11
    004046ecand w1, w1, 255
    004046f0strb w1, [x0]
    004046f4ldr w0, [sp+44]
    004046f8ubfm w1, w0, 24, 31
    004046fcldr x0, [sp+24]
    00404700add x0, x0, 12
    00404704and w1, w1, 255
    00404708strb w1, [x0]
    0040470cldr x0, [sp+24]
    00404710add x0, x0, 12
    00404714ldrb w0, [x0]
    00404718sbfm w1, w0, 0, 7
    0040471cldr w0, [sp+48]
    00404720sbfm w0, w0, 0, 7
    00404724orr w0, w1, w0
    00404728sbfm w1, w0, 0, 7
    0040472cldr x0, [sp+24]
    00404730add x0, x0, 12
    00404734and w1, w1, 255
    00404738strb w1, [x0]
    0040473cldr w0, [sp+48]
    00404740sbfm w1, w0, 8, 31
    00404744ldr x0, [sp+24]
    00404748add x0, x0, 13
    0040474cand w1, w1, 255
    00404750strb w1, [x0]
    00404754ldr w0, [sp+48]
    00404758sbfm w1, w0, 16, 31
    0040475cldr x0, [sp+24]
    00404760add x0, x0, 14
    00404764and w1, w1, 255
    00404768strb w1, [x0]
    0040476cldr w0, [sp+48]
    00404770ubfm w1, w0, 24, 31
    00404774ldr x0, [sp+24]
    00404778add x0, x0, 15
    0040477cand w1, w1, 255
    00404780strb w1, [x0]
    00404784ldr x0, [sp+24]
    00404788add x0, x0, 16
    0040478cldrb w0, [x0]
    00404790sbfm w1, w0, 0, 7
    00404794ldr w0, [sp+52]
    00404798sbfm w0, w0, 0, 7
    0040479corr w0, w1, w0
    004047a0sbfm w1, w0, 0, 7
    004047a4ldr x0, [sp+24]
    004047a8add x0, x0, 16
    004047acand w1, w1, 255
    004047b0strb w1, [x0]
    004047b4ldr w0, [sp+52]
    004047b8sbfm w1, w0, 8, 31
    004047bcldr x0, [sp+24]
    004047c0add x0, x0, 17
    004047c4and w1, w1, 255
    004047c8strb w1, [x0]
    004047ccldr w0, [sp+52]
    004047d0sbfm w1, w0, 16, 31
    004047d4ldr x0, [sp+24]
    004047d8add x0, x0, 18
    004047dcand w1, w1, 255
    004047e0strb w1, [x0]
    004047e4ldr w0, [sp+52]
    004047e8ubfm w1, w0, 24, 31
    004047ecldr x0, [sp+24]
    004047f0add x0, x0, 19
    004047f4and w1, w1, 255
    004047f8strb w1, [x0]
    004047fcldr x0, [sp+24]
    00404800add x0, x0, 19
    00404804ldrb w0, [x0]
    00404808sbfm w1, w0, 0, 7
    0040480cldr w0, [sp+56]
    00404810sbfm w0, w0, 0, 7
    00404814orr w0, w1, w0
    00404818sbfm w1, w0, 0, 7
    0040481cldr x0, [sp+24]
    00404820add x0, x0, 19
    00404824and w1, w1, 255
    00404828strb w1, [x0]
    0040482cldr w0, [sp+56]
    00404830sbfm w1, w0, 8, 31
    00404834ldr x0, [sp+24]
    00404838add x0, x0, 20
    0040483cand w1, w1, 255
    00404840strb w1, [x0]
    00404844ldr w0, [sp+56]
    00404848sbfm w1, w0, 16, 31
    0040484cldr x0, [sp+24]
    00404850add x0, x0, 21
    00404854and w1, w1, 255
    00404858strb w1, [x0]
    0040485cldr w0, [sp+56]
    00404860ubfm w1, w0, 24, 31
    00404864ldr x0, [sp+24]
    00404868add x0, x0, 22
    0040486cand w1, w1, 255
    00404870strb w1, [x0]
    00404874ldr x0, [sp+24]
    00404878add x0, x0, 22
    0040487cldrb w0, [x0]
    00404880sbfm w1, w0, 0, 7
    00404884ldr w0, [sp+60]
    00404888sbfm w0, w0, 0, 7
    0040488corr w0, w1, w0
    00404890sbfm w1, w0, 0, 7
    00404894ldr x0, [sp+24]
    00404898add x0, x0, 22
    0040489cand w1, w1, 255
    004048a0strb w1, [x0]
    004048a4ldr w0, [sp+60]
    004048a8sbfm w1, w0, 8, 31
    004048acldr x0, [sp+24]
    004048b0add x0, x0, 23
    004048b4and w1, w1, 255
    004048b8strb w1, [x0]
    004048bcldr w0, [sp+60]
    004048c0sbfm w1, w0, 16, 31
    004048c4ldr x0, [sp+24]
    004048c8add x0, x0, 24
    004048ccand w1, w1, 255
    004048d0strb w1, [x0]
    004048d4ldr w0, [sp+60]
    004048d8ubfm w1, w0, 24, 31
    004048dcldr x0, [sp+24]
    004048e0add x0, x0, 25
    004048e4and w1, w1, 255
    004048e8strb w1, [x0]
    004048ecldr x0, [sp+24]
    004048f0add x0, x0, 25
    004048f4ldrb w0, [x0]
    004048f8sbfm w1, w0, 0, 7
    004048fcldr w0, [sp+64]
    00404900sbfm w0, w0, 0, 7
    00404904orr w0, w1, w0
    00404908sbfm w1, w0, 0, 7
    0040490cldr x0, [sp+24]
    00404910add x0, x0, 25
    00404914and w1, w1, 255
    00404918strb w1, [x0]
    0040491cldr w0, [sp+64]
    00404920sbfm w1, w0, 8, 31
    00404924ldr x0, [sp+24]
    00404928add x0, x0, 26
    0040492cand w1, w1, 255
    00404930strb w1, [x0]
    00404934ldr w0, [sp+64]
    00404938sbfm w1, w0, 16, 31
    0040493cldr x0, [sp+24]
    00404940add x0, x0, 27
    00404944and w1, w1, 255
    00404948strb w1, [x0]
    0040494cldr w0, [sp+64]
    00404950ubfm w1, w0, 24, 31
    00404954ldr x0, [sp+24]
    00404958add x0, x0, 28
    0040495cand w1, w1, 255
    00404960strb w1, [x0]
    00404964ldr x0, [sp+24]
    00404968add x0, x0, 28
    0040496cldrb w0, [x0]
    00404970sbfm w1, w0, 0, 7
    00404974ldr w0, [sp+68]
    00404978sbfm w0, w0, 0, 7
    0040497corr w0, w1, w0
    00404980sbfm w1, w0, 0, 7
    00404984ldr x0, [sp+24]
    00404988add x0, x0, 28
    0040498cand w1, w1, 255
    00404990strb w1, [x0]
    00404994ldr w0, [sp+68]
    00404998sbfm w1, w0, 8, 31
    0040499cldr x0, [sp+24]
    004049a0add x0, x0, 29
    004049a4and w1, w1, 255
    004049a8strb w1, [x0]
    004049acldr w0, [sp+68]
    004049b0sbfm w1, w0, 16, 31
    004049b4ldr x0, [sp+24]
    004049b8add x0, x0, 30
    004049bcand w1, w1, 255
    004049c0strb w1, [x0]
    004049c4ldr w0, [sp+68]
    004049c8ubfm w1, w0, 24, 31
    004049ccldr x0, [sp+24]
    004049d0add x0, x0, 31
    004049d4and w1, w1, 255
    004049d8strb w1, [x0]
    004049dchint
    004049e0ldp x29, x30, [sp], 128
    004049e4ret x30
    00403f88
    004049e8
    004049e8fmonty:
    004049e8sub sp, sp, 1312
    004049ecstp x29, x30, [sp]
    004049f0add x29, sp, 0
    004049f4str x0, [sp+72]
    004049f8str x1, [sp+64]
    004049fcstr x2, [sp+56]
    00404a00str x3, [sp+48]
    00404a04str x4, [sp+40]
    00404a08str x5, [sp+32]
    00404a0cstr x6, [sp+24]
    00404a10str x7, [sp+16]
    00404a14add x0, sp, 1232
    00404a18movz x2, 80
    00404a1cldr x1, [sp+40]
    00404a20bl memcpy@plt
    00404a24ldr x1, [sp+32]
    00404a28ldr x0, [sp+40]
    00404a2cbl fsum
    00404a30add x0, sp, 1232
    00404a34mov x1, x0
    00404a38ldr x0, [sp+32]
    00404a3cbl fdifference
    00404a40add x0, sp, 1152
    00404a44movz x2, 80
    00404a48ldr x1, [sp+24]
    00404a4cbl memcpy@plt
    00404a50ldr x1, [sp+16]
    00404a54ldr x0, [sp+24]
    00404a58bl fsum
    00404a5cadd x0, sp, 1152
    00404a60mov x1, x0
    00404a64ldr x0, [sp+16]
    00404a68bl fdifference
    00404a6cadd x0, sp, 544
    00404a70ldr x2, [sp+32]
    00404a74ldr x1, [sp+24]
    00404a78bl fproduct
    00404a7cadd x0, sp, 392
    00404a80ldr x2, [sp+16]
    00404a84ldr x1, [sp+40]
    00404a88bl fproduct
    00404a8cadd x0, sp, 544
    00404a90bl freduce_degree
    00404a94add x0, sp, 544
    00404a98bl freduce_coefficients
    00404a9cadd x0, sp, 392
    00404aa0bl freduce_degree
    00404aa4add x0, sp, 392
    00404aa8bl freduce_coefficients
    00404aacadd x0, sp, 1152
    00404ab0add x1, sp, 544
    00404ab4ldp q0, q1, [x1]
    00404ab8stp q0, q1, [x0]
    00404abcldp q0, q1, [x1+32]
    00404ac0stp q0, q1, [x0+32]
    00404ac4ldr q0, [x1+64]
    00404ac8str q0, [x0+64]
    00404accadd x1, sp, 392
    00404ad0add x0, sp, 544
    00404ad4bl fsum
    00404ad8add x1, sp, 1152
    00404adcadd x0, sp, 392
    00404ae0bl fdifference
    00404ae4add x1, sp, 544
    00404ae8add x0, sp, 88
    00404aecbl fsquare
    00404af0add x1, sp, 392
    00404af4add x0, sp, 240
    00404af8bl fsquare
    00404afcadd x1, sp, 240
    00404b00add x0, sp, 392
    00404b04ldr x2, [sp+1312]
    00404b08bl fproduct
    00404b0cadd x0, sp, 392
    00404b10bl freduce_degree
    00404b14add x0, sp, 392
    00404b18bl freduce_coefficients
    00404b1cadd x0, sp, 88
    00404b20movz x2, 80
    00404b24mov x1, x0
    00404b28ldr x0, [sp+56]
    00404b2cbl memcpy@plt
    00404b30add x0, sp, 392
    00404b34movz x2, 80
    00404b38mov x1, x0
    00404b3cldr x0, [sp+48]
    00404b40bl memcpy@plt
    00404b44add x0, sp, 848
    00404b48ldr x1, [sp+40]
    00404b4cbl fsquare
    00404b50add x0, sp, 696
    00404b54ldr x1, [sp+32]
    00404b58bl fsquare
    00404b5cadd x1, sp, 696
    00404b60add x0, sp, 848
    00404b64mov x2, x1
    00404b68mov x1, x0
    00404b6cldr x0, [sp+72]
    00404b70bl fproduct
    00404b74ldr x0, [sp+72]
    00404b78bl freduce_degree
    00404b7cldr x0, [sp+72]
    00404b80bl freduce_coefficients
    00404b84add x1, sp, 848
    00404b88add x0, sp, 696
    00404b8cbl fdifference
    00404b90add x0, sp, 1000
    00404b94add x0, x0, 80
    00404b98movz x2, 72
    00404b9cmovz w1, 0
    00404ba0bl memset@plt
    00404ba4add x1, sp, 696
    00404ba8add x0, sp, 1000
    00404bacmovz x2, 56129
    00404bb0movk x2, 0x10000
    00404bb4bl fscalar_product
    00404bb8add x0, sp, 1000
    00404bbcbl freduce_coefficients
    00404bc0add x1, sp, 848
    00404bc4add x0, sp, 1000
    00404bc8bl fsum
    00404bccadd x1, sp, 1000
    00404bd0add x0, sp, 696
    00404bd4mov x2, x1
    00404bd8mov x1, x0
    00404bdcldr x0, [sp+64]
    00404be0bl fproduct
    00404be4ldr x0, [sp+64]
    00404be8bl freduce_degree
    00404becldr x0, [sp+64]
    00404bf0bl freduce_coefficients
    00404bf4hint
    00404bf8ldp x29, x30, [sp]
    00404bfcadd sp, sp, 1312
    00404c00ret x30
    004049e8
    00404c04
    00404c04swap_conditional:
    00404c04sub sp, sp, 48
    00404c08str x0, [sp+24]
    00404c0cstr x1, [sp+16]
    00404c10str x2, [sp+8]
    00404c14ldr x0, [sp+8]
    00404c18sub w0, wzr, w0
    00404c1cstr w0, [sp+40]
    00404c20str wzr, [sp+44]
    00404c24b 0x404ce0
    00404c28
    00404c28loc_404c28:
    00404c28ldr w0, [sp+44]
    00404c2cubfm x0, x0, 61, 60
    00404c30ldr x1, [sp+24]
    00404c34add x0, x1, x0
    00404c38ldr x0, [x0]
    00404c3cmov w2, w0
    00404c40ldr w0, [sp+44]
    00404c44ubfm x0, x0, 61, 60
    00404c48ldr x1, [sp+16]
    00404c4cadd x0, x1, x0
    00404c50ldr x0, [x0]
    00404c54eor w0, w2, w0
    00404c58ldr w1, [sp+40]
    00404c5cand w0, w1, w0
    00404c60str w0, [sp+36]
    00404c64ldr w0, [sp+44]
    00404c68ubfm x0, x0, 61, 60
    00404c6cldr x1, [sp+24]
    00404c70add x0, x1, x0
    00404c74ldr x0, [x0]
    00404c78mov w1, w0
    00404c7cldr w0, [sp+36]
    00404c80eor w2, w1, w0
    00404c84ldr w0, [sp+44]
    00404c88ubfm x0, x0, 61, 60
    00404c8cldr x1, [sp+24]
    00404c90add x0, x1, x0
    00404c94sbfm x1, x2, 0, 31
    00404c98str x1, [x0]
    00404c9cldr w0, [sp+44]
    00404ca0ubfm x0, x0, 61, 60
    00404ca4ldr x1, [sp+16]
    00404ca8add x0, x1, x0
    00404cacldr x0, [x0]
    00404cb0mov w1, w0
    00404cb4ldr w0, [sp+36]
    00404cb8eor w2, w1, w0
    00404cbcldr w0, [sp+44]
    00404cc0ubfm x0, x0, 61, 60
    00404cc4ldr x1, [sp+16]
    00404cc8add x0, x1, x0
    00404cccsbfm x1, x2, 0, 31
    00404cd0str x1, [x0]
    00404cd4ldr w0, [sp+44]
    00404cd8add w0, w0, 1
    00404cdcstr w0, [sp+44]
    00404ce0
    00404ce0loc_404ce0:
    00404ce0ldr w0, [sp+44]
    00404ce4subs wzr, w0, 9
    00404ce8b.ls 0x404c28
    00404cechint
    00404cf0hint
    00404cf4add sp, sp, 48
    00404cf8ret x30
    00404c04
    00404cfc
    00404cfccmult:
    00404cfcsub sp, sp, 1376
    00404d00stp x29, x30, [sp+16]
    00404d04add x29, sp, 16
    00404d08str x0, [sp+56]
    00404d0cstr x1, [sp+48]
    00404d10str x2, [sp+40]
    00404d14str x3, [sp+32]
    00404d18add x0, sp, 1128
    00404d1cstr x0, [sp+1368]
    00404d20add x0, sp, 976
    00404d24str x0, [sp+1360]
    00404d28add x0, sp, 824
    00404d2cstr x0, [sp+1352]
    00404d30add x0, sp, 672
    00404d34str x0, [sp+1344]
    00404d38add x0, sp, 520
    00404d3cstr x0, [sp+1336]
    00404d40add x0, sp, 368
    00404d44str x0, [sp+1328]
    00404d48add x0, sp, 216
    00404d4cstr x0, [sp+1320]
    00404d50add x0, sp, 64
    00404d54str x0, [sp+1312]
    00404d58str wzr, [sp+1308]
    00404d5cb 0x404dec
    00404d60
    00404d60loc_404d60:
    00404d60ldrsw x0, [sp+1308]
    00404d64ubfm x0, x0, 61, 60
    00404d68add x1, sp, 1128
    00404d6cstr xzr, [x1+x0]
    00404d70ldrsw x0, [sp+1308]
    00404d74ubfm x0, x0, 61, 60
    00404d78add x1, sp, 976
    00404d7cstr xzr, [x1+x0]
    00404d80ldrsw x0, [sp+1308]
    00404d84ubfm x0, x0, 61, 60
    00404d88add x1, sp, 824
    00404d8cstr xzr, [x1+x0]
    00404d90ldrsw x0, [sp+1308]
    00404d94ubfm x0, x0, 61, 60
    00404d98add x1, sp, 672
    00404d9cstr xzr, [x1+x0]
    00404da0ldrsw x0, [sp+1308]
    00404da4ubfm x0, x0, 61, 60
    00404da8add x1, sp, 520
    00404dacstr xzr, [x1+x0]
    00404db0ldrsw x0, [sp+1308]
    00404db4ubfm x0, x0, 61, 60
    00404db8add x1, sp, 368
    00404dbcstr xzr, [x1+x0]
    00404dc0ldrsw x0, [sp+1308]
    00404dc4ubfm x0, x0, 61, 60
    00404dc8add x1, sp, 216
    00404dccstr xzr, [x1+x0]
    00404dd0ldrsw x0, [sp+1308]
    00404dd4ubfm x0, x0, 61, 60
    00404dd8add x1, sp, 64
    00404ddcstr xzr, [x1+x0]
    00404de0ldr w0, [sp+1308]
    00404de4add w0, w0, 1
    00404de8str w0, [sp+1308]
    00404dec
    00404decloc_404dec:
    00404decldr w0, [sp+1308]
    00404df0subs wzr, w0, 18
    00404df4b.le 0x404d60
    00404df8movz x0, 1
    00404dfcstr x0, [sp+976]
    00404e00movz x0, 1
    00404e04str x0, [sp+824]
    00404e08movz x0, 1
    00404e0cstr x0, [sp+368]
    00404e10movz x0, 1
    00404e14str x0, [sp+64]
    00404e18movz x2, 80
    00404e1cldr x1, [sp+32]
    00404e20ldr x0, [sp+1368]
    00404e24bl memcpy@plt
    00404e28str wzr, [sp+1304]
    00404e2cb 0x404f68
    00404e30
    00404e30loc_404e30:
    00404e30movz w1, 31
    00404e34ldr w0, [sp+1304]
    00404e38sub w0, w1, w0
    00404e3cmov w0, w0
    00404e40ldr x1, [sp+40]
    00404e44add x0, x1, x0
    00404e48ldrb w0, [x0]
    00404e4cstrb w0, [sp+1299]
    00404e50str wzr, [sp+1300]
    00404e54b 0x404f50
    00404e58
    00404e58loc_404e58:
    00404e58ldrb w0, [sp+1299]
    00404e5cubfm w0, w0, 7, 31
    00404e60and w0, w0, 255
    00404e64and x0, x0, 255
    00404e68str x0, [sp+1288]
    00404e6cldr x2, [sp+1288]
    00404e70ldr x1, [sp+1368]
    00404e74ldr x0, [sp+1352]
    00404e78bl swap_conditional
    00404e7cldr x2, [sp+1288]
    00404e80ldr x1, [sp+1360]
    00404e84ldr x0, [sp+1344]
    00404e88bl swap_conditional
    00404e8cldr x0, [sp+32]
    00404e90str x0, [sp]
    00404e94ldr x7, [sp+1360]
    00404e98ldr x6, [sp+1368]
    00404e9cldr x5, [sp+1344]
    00404ea0ldr x4, [sp+1352]
    00404ea4ldr x3, [sp+1328]
    00404ea8ldr x2, [sp+1336]
    00404eacldr x1, [sp+1312]
    00404eb0ldr x0, [sp+1320]
    00404eb4bl fmonty
    00404eb8ldr x2, [sp+1288]
    00404ebcldr x1, [sp+1336]
    00404ec0ldr x0, [sp+1320]
    00404ec4bl swap_conditional
    00404ec8ldr x2, [sp+1288]
    00404eccldr x1, [sp+1328]
    00404ed0ldr x0, [sp+1312]
    00404ed4bl swap_conditional
    00404ed8ldr x0, [sp+1352]
    00404edcstr x0, [sp+1280]
    00404ee0ldr x0, [sp+1320]
    00404ee4str x0, [sp+1352]
    00404ee8ldr x0, [sp+1280]
    00404eecstr x0, [sp+1320]
    00404ef0ldr x0, [sp+1344]
    00404ef4str x0, [sp+1280]
    00404ef8ldr x0, [sp+1312]
    00404efcstr x0, [sp+1344]
    00404f00ldr x0, [sp+1280]
    00404f04str x0, [sp+1312]
    00404f08ldr x0, [sp+1368]
    00404f0cstr x0, [sp+1280]
    00404f10ldr x0, [sp+1336]
    00404f14str x0, [sp+1368]
    00404f18ldr x0, [sp+1280]
    00404f1cstr x0, [sp+1336]
    00404f20ldr x0, [sp+1360]
    00404f24str x0, [sp+1280]
    00404f28ldr x0, [sp+1328]
    00404f2cstr x0, [sp+1360]
    00404f30ldr x0, [sp+1280]
    00404f34str x0, [sp+1328]
    00404f38ldrb w0, [sp+1299]
    00404f3cubfm w0, w0, 31, 6
    00404f40strb w0, [sp+1299]
    00404f44ldr w0, [sp+1300]
    00404f48add w0, w0, 1
    00404f4cstr w0, [sp+1300]
    00404f50
    00404f50loc_404f50:
    00404f50ldr w0, [sp+1300]
    00404f54subs wzr, w0, 7
    00404f58b.ls 0x404e58
    00404f5cldr w0, [sp+1304]
    00404f60add w0, w0, 1
    00404f64str w0, [sp+1304]
    00404f68
    00404f68loc_404f68:
    00404f68ldr w0, [sp+1304]
    00404f6csubs wzr, w0, 31
    00404f70b.ls 0x404e30
    00404f74movz x2, 80
    00404f78ldr x1, [sp+1352]
    00404f7cldr x0, [sp+56]
    00404f80bl memcpy@plt
    00404f84movz x2, 80
    00404f88ldr x1, [sp+1344]
    00404f8cldr x0, [sp+48]
    00404f90bl memcpy@plt
    00404f94hint
    00404f98ldp x29, x30, [sp+16]
    00404f9cadd sp, sp, 1376
    00404fa0ret x30
    00404cfc
    00404fa4
    00404fa4crecip:
    00404fa4sub sp, sp, 848
    00404fa8stp x29, x30, [sp]
    00404facadd x29, sp, 0
    00404fb0str x0, [sp+24]
    00404fb4str x1, [sp+16]
    00404fb8add x0, sp, 760
    00404fbcldr x1, [sp+16]
    00404fc0bl fsquare
    00404fc4add x1, sp, 760
    00404fc8add x0, sp, 40
    00404fccbl fsquare
    00404fd0add x1, sp, 40
    00404fd4add x0, sp, 120
    00404fd8bl fsquare
    00404fdcadd x1, sp, 120
    00404fe0add x0, sp, 680
    00404fe4ldr x2, [sp+16]
    00404fe8bl fmul
    00404fecadd x2, sp, 760
    00404ff0add x1, sp, 680
    00404ff4add x0, sp, 600
    00404ff8bl fmul
    00404ffcadd x1, sp, 600
    00405000add x0, sp, 120
    00405004bl fsquare
    00405008add x2, sp, 680
    0040500cadd x1, sp, 120
    00405010add x0, sp, 520
    00405014bl fmul
    00405018add x1, sp, 520
    0040501cadd x0, sp, 120
    00405020bl fsquare
    00405024add x1, sp, 120
    00405028add x0, sp, 40
    0040502cbl fsquare
    00405030add x1, sp, 40
    00405034add x0, sp, 120
    00405038bl fsquare
    0040503cadd x1, sp, 120
    00405040add x0, sp, 40
    00405044bl fsquare
    00405048add x1, sp, 40
    0040504cadd x0, sp, 120
    00405050bl fsquare
    00405054add x2, sp, 520
    00405058add x1, sp, 120
    0040505cadd x0, sp, 440
    00405060bl fmul
    00405064add x1, sp, 440
    00405068add x0, sp, 120
    0040506cbl fsquare
    00405070add x1, sp, 120
    00405074add x0, sp, 40
    00405078bl fsquare
    0040507cmovz w0, 2
    00405080str w0, [sp+844]
    00405084b 0x4050ac
    00405088
    00405088loc_405088:
    00405088add x1, sp, 40
    0040508cadd x0, sp, 120
    00405090bl fsquare
    00405094add x1, sp, 120
    00405098add x0, sp, 40
    0040509cbl fsquare
    004050a0ldr w0, [sp+844]
    004050a4add w0, w0, 2
    004050a8str w0, [sp+844]
    004050ac
    004050acloc_4050ac:
    004050acldr w0, [sp+844]
    004050b0subs wzr, w0, 9
    004050b4b.le 0x405088
    004050b8add x2, sp, 440
    004050bcadd x1, sp, 40
    004050c0add x0, sp, 360
    004050c4bl fmul
    004050c8add x1, sp, 360
    004050ccadd x0, sp, 120
    004050d0bl fsquare
    004050d4add x1, sp, 120
    004050d8add x0, sp, 40
    004050dcbl fsquare
    004050e0movz w0, 2
    004050e4str w0, [sp+844]
    004050e8b 0x405110
    004050ec
    004050ecloc_4050ec:
    004050ecadd x1, sp, 40
    004050f0add x0, sp, 120
    004050f4bl fsquare
    004050f8add x1, sp, 120
    004050fcadd x0, sp, 40
    00405100bl fsquare
    00405104ldr w0, [sp+844]
    00405108add w0, w0, 2
    0040510cstr w0, [sp+844]
    00405110
    00405110loc_405110:
    00405110ldr w0, [sp+844]
    00405114subs wzr, w0, 19
    00405118b.le 0x4050ec
    0040511cadd x2, sp, 360
    00405120add x1, sp, 40
    00405124add x0, sp, 120
    00405128bl fmul
    0040512cadd x1, sp, 120
    00405130add x0, sp, 40
    00405134bl fsquare
    00405138add x1, sp, 40
    0040513cadd x0, sp, 120
    00405140bl fsquare
    00405144movz w0, 2
    00405148str w0, [sp+844]
    0040514cb 0x405174
    00405150
    00405150loc_405150:
    00405150add x1, sp, 120
    00405154add x0, sp, 40
    00405158bl fsquare
    0040515cadd x1, sp, 40
    00405160add x0, sp, 120
    00405164bl fsquare
    00405168ldr w0, [sp+844]
    0040516cadd w0, w0, 2
    00405170str w0, [sp+844]
    00405174
    00405174loc_405174:
    00405174ldr w0, [sp+844]
    00405178subs wzr, w0, 9
    0040517cb.le 0x405150
    00405180add x2, sp, 440
    00405184add x1, sp, 120
    00405188add x0, sp, 280
    0040518cbl fmul
    00405190add x1, sp, 280
    00405194add x0, sp, 120
    00405198bl fsquare
    0040519cadd x1, sp, 120
    004051a0add x0, sp, 40
    004051a4bl fsquare
    004051a8movz w0, 2
    004051acstr w0, [sp+844]
    004051b0b 0x4051d8
    004051b4
    004051b4loc_4051b4:
    004051b4add x1, sp, 40
    004051b8add x0, sp, 120
    004051bcbl fsquare
    004051c0add x1, sp, 120
    004051c4add x0, sp, 40
    004051c8bl fsquare
    004051ccldr w0, [sp+844]
    004051d0add w0, w0, 2
    004051d4str w0, [sp+844]
    004051d8
    004051d8loc_4051d8:
    004051d8ldr w0, [sp+844]
    004051dcsubs wzr, w0, 49
    004051e0b.le 0x4051b4
    004051e4add x2, sp, 280
    004051e8add x1, sp, 40
    004051ecadd x0, sp, 200
    004051f0bl fmul
    004051f4add x1, sp, 200
    004051f8add x0, sp, 40
    004051fcbl fsquare
    00405200add x1, sp, 40
    00405204add x0, sp, 120
    00405208bl fsquare
    0040520cmovz w0, 2
    00405210str w0, [sp+844]
    00405214b 0x40523c
    00405218
    00405218loc_405218:
    00405218add x1, sp, 120
    0040521cadd x0, sp, 40
    00405220bl fsquare
    00405224add x1, sp, 40
    00405228add x0, sp, 120
    0040522cbl fsquare
    00405230ldr w0, [sp+844]
    00405234add w0, w0, 2
    00405238str w0, [sp+844]
    0040523c
    0040523cloc_40523c:
    0040523cldr w0, [sp+844]
    00405240subs wzr, w0, 99
    00405244b.le 0x405218
    00405248add x2, sp, 200
    0040524cadd x1, sp, 120
    00405250add x0, sp, 40
    00405254bl fmul
    00405258add x1, sp, 40
    0040525cadd x0, sp, 120
    00405260bl fsquare
    00405264add x1, sp, 120
    00405268add x0, sp, 40
    0040526cbl fsquare
    00405270movz w0, 2
    00405274str w0, [sp+844]
    00405278b 0x4052a0
    0040527c
    0040527cloc_40527c:
    0040527cadd x1, sp, 40
    00405280add x0, sp, 120
    00405284bl fsquare
    00405288add x1, sp, 120
    0040528cadd x0, sp, 40
    00405290bl fsquare
    00405294ldr w0, [sp+844]
    00405298add w0, w0, 2
    0040529cstr w0, [sp+844]
    004052a0
    004052a0loc_4052a0:
    004052a0ldr w0, [sp+844]
    004052a4subs wzr, w0, 49
    004052a8b.le 0x40527c
    004052acadd x2, sp, 280
    004052b0add x1, sp, 40
    004052b4add x0, sp, 120
    004052b8bl fmul
    004052bcadd x1, sp, 120
    004052c0add x0, sp, 40
    004052c4bl fsquare
    004052c8add x1, sp, 40
    004052ccadd x0, sp, 120
    004052d0bl fsquare
    004052d4add x1, sp, 120
    004052d8add x0, sp, 40
    004052dcbl fsquare
    004052e0add x1, sp, 40
    004052e4add x0, sp, 120
    004052e8bl fsquare
    004052ecadd x1, sp, 120
    004052f0add x0, sp, 40
    004052f4bl fsquare
    004052f8add x1, sp, 600
    004052fcadd x0, sp, 40
    00405300mov x2, x1
    00405304mov x1, x0
    00405308ldr x0, [sp+24]
    0040530cbl fmul
    00405310hint
    00405314ldp x29, x30, [sp]
    00405318add sp, sp, 848
    0040531cret x30
    00404fa4
    00405320
    00405320curve25519_donna:
    00405320stp x29, x30, [sp-416]!
    00405324add x29, sp, 0
    00405328str x0, [sp+40]
    0040532cstr x1, [sp+32]
    00405330str x2, [sp+24]
    00405334str wzr, [sp+412]
    00405338b 0x405364
    0040533c
    0040533cloc_40533c:
    0040533cldrsw x0, [sp+412]
    00405340ldr x1, [sp+32]
    00405344add x0, x1, x0
    00405348ldrb w2, [x0]
    0040534cldrsw x0, [sp+412]
    00405350add x1, sp, 48
    00405354strb w2, [x1+x0]
    00405358ldr w0, [sp+412]
    0040535cadd w0, w0, 1
    00405360str w0, [sp+412]
    00405364
    00405364loc_405364:
    00405364ldr w0, [sp+412]
    00405368subs wzr, w0, 31
    0040536cb.le 0x40533c
    00405370ldrb w0, [sp+48]
    00405374and w0, w0, 0xfffffff8
    00405378and w0, w0, 255
    0040537cstrb w0, [sp+48]
    00405380ldrb w0, [sp+79]
    00405384and w0, w0, 127
    00405388and w0, w0, 255
    0040538cstrb w0, [sp+79]
    00405390ldrb w0, [sp+79]
    00405394orr w0, w0, 64
    00405398and w0, w0, 255
    0040539cstrb w0, [sp+79]
    004053a0add x0, sp, 328
    004053a4ldr x1, [sp+24]
    004053a8bl fexpand
    004053acadd x3, sp, 328
    004053b0add x2, sp, 48
    004053b4add x1, sp, 160
    004053b8add x0, sp, 248
    004053bcbl cmult
    004053c0add x1, sp, 160
    004053c4add x0, sp, 80
    004053c8bl crecip
    004053ccadd x2, sp, 80
    004053d0add x1, sp, 248
    004053d4add x0, sp, 160
    004053d8bl fmul
    004053dcadd x0, sp, 160
    004053e0mov x1, x0
    004053e4ldr x0, [sp+40]
    004053e8bl fcontract
    004053ecmovz w0, 0
    004053f0ldp x29, x30, [sp], 416
    004053f4ret x30
    00405320
    004053f8
    004053f8_bswapw:
    004053f8sub sp, sp, 16
    004053fcstr x0, [sp+8]
    00405400str w1, [sp+4]
    00405404b 0x405458
    00405408
    00405408loc_405408:
    00405408ldr w0, [sp+4]
    0040540cubfm x0, x0, 62, 61
    00405410ldr x1, [sp+8]
    00405414add x0, x1, x0
    00405418ldr w0, [x0]
    0040541cextr w0, w0, w0, 24
    00405420and w2, w0, 0xff00ff
    00405424ldr w0, [sp+4]
    00405428ubfm x0, x0, 62, 61
    0040542cldr x1, [sp+8]
    00405430add x0, x1, x0
    00405434ldr w0, [x0]
    00405438extr w0, w0, w0, 8
    0040543cand w1, w0, 0xff00ff00
    00405440ldr w0, [sp+4]
    00405444ubfm x0, x0, 62, 61
    00405448ldr x3, [sp+8]
    0040544cadd x0, x3, x0
    00405450orr w1, w2, w1
    00405454str w1, [x0]
    00405458
    00405458loc_405458:
    00405458ldr w0, [sp+4]
    0040545csub w1, w0, 1
    00405460str w1, [sp+4]
    00405464subs wzr, w0, 0
    00405468b.ne 0x405408
    0040546chint
    00405470hint
    00405474add sp, sp, 16
    00405478ret x30
    004053f8
    0040547c
    0040547c_memcp:
    0040547csub sp, sp, 48
    00405480str x0, [sp+24]
    00405484str x1, [sp+16]
    00405488str w2, [sp+12]
    0040548cldr x0, [sp+24]
    00405490str x0, [sp+40]
    00405494b 0x4054c0
    00405498
    00405498loc_405498:
    00405498ldr x0, [sp+16]
    0040549cldrb w1, [x0]
    004054a0ldr x0, [sp+24]
    004054a4strb w1, [x0]
    004054a8ldr x0, [sp+24]
    004054acadd x0, x0, 1
    004054b0str x0, [sp+24]
    004054b4ldr x0, [sp+16]
    004054b8add x0, x0, 1
    004054bcstr x0, [sp+16]
    004054c0
    004054c0loc_4054c0:
    004054c0ldr w0, [sp+12]
    004054c4sub w1, w0, 1
    004054c8str w1, [sp+12]
    004054ccsubs wzr, w0, 0
    004054d0b.ne 0x405498
    004054d4ldr x0, [sp+40]
    004054d8add sp, sp, 48
    004054dcret x30
    0040547c
    004054e0
    004054e0_rtrf:
    004054e0sub sp, sp, 32
    004054e4str x0, [sp+24]
    004054e8str x1, [sp+16]
    004054ecstr w2, [sp+12]
    004054f0str w3, [sp+8]
    004054f4ldr w0, [sp+8]
    004054f8subs wzr, w0, 0
    004054fcb.eq 0x40564c
    00405500ldr w0, [sp+12]
    00405504and x0, x0, 15
    00405508ubfm x0, x0, 62, 61
    0040550cldr x1, [sp+16]
    00405510add x0, x1, x0
    00405514ldr w2, [x0]
    00405518ldr w0, [sp+12]
    0040551cadd w0, w0, 14
    00405520mov w0, w0
    00405524and x0, x0, 15
    00405528ubfm x0, x0, 62, 61
    0040552cldr x1, [sp+16]
    00405530add x0, x1, x0
    00405534ldr w0, [x0]
    00405538extr w1, w0, w0, 17
    0040553cldr w0, [sp+12]
    00405540add w0, w0, 14
    00405544mov w0, w0
    00405548and x0, x0, 15
    0040554cubfm x0, x0, 62, 61
    00405550ldr x3, [sp+16]
    00405554add x0, x3, x0
    00405558ldr w0, [x0]
    0040555cextr w0, w0, w0, 19
    00405560eor w1, w1, w0
    00405564ldr w0, [sp+12]
    00405568add w0, w0, 14
    0040556cmov w0, w0
    00405570and x0, x0, 15
    00405574ubfm x0, x0, 62, 61
    00405578ldr x3, [sp+16]
    0040557cadd x0, x3, x0
    00405580ldr w0, [x0]
    00405584ubfm w0, w0, 10, 31
    00405588eor w1, w1, w0
    0040558cldr w0, [sp+12]
    00405590add w0, w0, 9
    00405594mov w0, w0
    00405598and x0, x0, 15
    0040559cubfm x0, x0, 62, 61
    004055a0ldr x3, [sp+16]
    004055a4add x0, x3, x0
    004055a8ldr w0, [x0]
    004055acadd w1, w1, w0
    004055b0ldr w0, [sp+12]
    004055b4add w0, w0, 1
    004055b8mov w0, w0
    004055bcand x0, x0, 15
    004055c0ubfm x0, x0, 62, 61
    004055c4ldr x3, [sp+16]
    004055c8add x0, x3, x0
    004055ccldr w0, [x0]
    004055d0extr w3, w0, w0, 7
    004055d4ldr w0, [sp+12]
    004055d8add w0, w0, 1
    004055dcmov w0, w0
    004055e0and x0, x0, 15
    004055e4ubfm x0, x0, 62, 61
    004055e8ldr x4, [sp+16]
    004055ecadd x0, x4, x0
    004055f0ldr w0, [x0]
    004055f4extr w0, w0, w0, 18
    004055f8eor w3, w3, w0
    004055fcldr w0, [sp+12]
    00405600add w0, w0, 1
    00405604mov w0, w0
    00405608and x0, x0, 15
    0040560cubfm x0, x0, 62, 61
    00405610ldr x4, [sp+16]
    00405614add x0, x4, x0
    00405618ldr w0, [x0]
    0040561cubfm w0, w0, 3, 31
    00405620eor w0, w3, w0
    00405624add w1, w1, w0
    00405628ldr w0, [sp+12]
    0040562cand x0, x0, 15
    00405630ubfm x0, x0, 62, 61
    00405634ldr x3, [sp+16]
    00405638add x0, x3, x0
    0040563cadd w1, w2, w1
    00405640str w1, [x0]
    00405644ldr w0, [x0]
    00405648b 0x405664
    0040564c
    0040564cloc_40564c:
    0040564cldr w0, [sp+12]
    00405650and x0, x0, 15
    00405654ubfm x0, x0, 62, 61
    00405658ldr x1, [sp+16]
    0040565cadd x0, x1, x0
    00405660ldr w0, [x0]
    00405664
    00405664loc_405664:
    00405664ldr w2, [sp+12]
    00405668ldr w1, [sp+8]
    0040566cadd w2, w2, w1
    00405670adrp x1, 8192
    00405674add x1, x1, 3656
    00405678mov w2, w2
    0040567cldr w1, [x1+2*x2]
    00405680add w1, w0, w1
    00405684movz w2, 4
    00405688ldr w0, [sp+12]
    0040568csub w0, w2, w0
    00405690mov w0, w0
    00405694and x0, x0, 7
    00405698ubfm x0, x0, 62, 61
    0040569cldr x2, [sp+24]
    004056a0add x0, x2, x0
    004056a4ldr w0, [x0]
    004056a8extr w2, w0, w0, 6
    004056acmovz w3, 4
    004056b0ldr w0, [sp+12]
    004056b4sub w0, w3, w0
    004056b8mov w0, w0
    004056bcand x0, x0, 7
    004056c0ubfm x0, x0, 62, 61
    004056c4ldr x3, [sp+24]
    004056c8add x0, x3, x0
    004056ccldr w0, [x0]
    004056d0extr w0, w0, w0, 11
    004056d4eor w2, w2, w0
    004056d8movz w3, 4
    004056dcldr w0, [sp+12]
    004056e0sub w0, w3, w0
    004056e4mov w0, w0
    004056e8and x0, x0, 7
    004056ecubfm x0, x0, 62, 61
    004056f0ldr x3, [sp+24]
    004056f4add x0, x3, x0
    004056f8ldr w0, [x0]
    004056fcextr w0, w0, w0, 25
    00405700eor w0, w2, w0
    00405704add w1, w1, w0
    00405708movz w2, 6
    0040570cldr w0, [sp+12]
    00405710sub w0, w2, w0
    00405714mov w0, w0
    00405718and x0, x0, 7
    0040571cubfm x0, x0, 62, 61
    00405720ldr x2, [sp+24]
    00405724add x0, x2, x0
    00405728ldr w2, [x0]
    0040572cmovz w3, 4
    00405730ldr w0, [sp+12]
    00405734sub w0, w3, w0
    00405738mov w0, w0
    0040573cand x0, x0, 7
    00405740ubfm x0, x0, 62, 61
    00405744ldr x3, [sp+24]
    00405748add x0, x3, x0
    0040574cldr w3, [x0]
    00405750movz w4, 5
    00405754ldr w0, [sp+12]
    00405758sub w0, w4, w0
    0040575cmov w0, w0
    00405760and x0, x0, 7
    00405764ubfm x0, x0, 62, 61
    00405768ldr x4, [sp+24]
    0040576cadd x0, x4, x0
    00405770ldr w4, [x0]
    00405774movz w5, 6
    00405778ldr w0, [sp+12]
    0040577csub w0, w5, w0
    00405780mov w0, w0
    00405784and x0, x0, 7
    00405788ubfm x0, x0, 62, 61
    0040578cldr x5, [sp+24]
    00405790add x0, x5, x0
    00405794ldr w0, [x0]
    00405798eor w0, w4, w0
    0040579cand w0, w3, w0
    004057a0eor w0, w2, w0
    004057a4add w2, w1, w0
    004057a8movz w1, 7
    004057acldr w0, [sp+12]
    004057b0sub w0, w1, w0
    004057b4mov w0, w0
    004057b8and x0, x0, 7
    004057bcubfm x0, x0, 62, 61
    004057c0ldr x1, [sp+24]
    004057c4add x0, x1, x0
    004057c8ldr w1, [x0]
    004057ccmovz w3, 7
    004057d0ldr w0, [sp+12]
    004057d4sub w0, w3, w0
    004057d8mov w0, w0
    004057dcand x0, x0, 7
    004057e0ubfm x0, x0, 62, 61
    004057e4ldr x3, [sp+24]
    004057e8add x0, x3, x0
    004057ecadd w1, w2, w1
    004057f0str w1, [x0]
    004057f4movz w1, 3
    004057f8ldr w0, [sp+12]
    004057fcsub w0, w1, w0
    00405800mov w0, w0
    00405804and x0, x0, 7
    00405808ubfm x0, x0, 62, 61
    0040580cldr x1, [sp+24]
    00405810add x0, x1, x0
    00405814ldr w2, [x0]
    00405818movz w1, 7
    0040581cldr w0, [sp+12]
    00405820sub w0, w1, w0
    00405824mov w0, w0
    00405828and x0, x0, 7
    0040582cubfm x0, x0, 62, 61
    00405830ldr x1, [sp+24]
    00405834add x0, x1, x0
    00405838ldr w1, [x0]
    0040583cmovz w3, 3
    00405840ldr w0, [sp+12]
    00405844sub w0, w3, w0
    00405848mov w0, w0
    0040584cand x0, x0, 7
    00405850ubfm x0, x0, 62, 61
    00405854ldr x3, [sp+24]
    00405858add x0, x3, x0
    0040585cadd w1, w2, w1
    00405860str w1, [x0]
    00405864movz w1, 7
    00405868ldr w0, [sp+12]
    0040586csub w0, w1, w0
    00405870mov w0, w0
    00405874and x0, x0, 7
    00405878ubfm x0, x0, 62, 61
    0040587cldr x1, [sp+24]
    00405880add x0, x1, x0
    00405884ldr w2, [x0]
    00405888ldr w0, [sp+12]
    0040588csub w0, wzr, w0
    00405890mov w0, w0
    00405894and x0, x0, 7
    00405898ubfm x0, x0, 62, 61
    0040589cldr x1, [sp+24]
    004058a0add x0, x1, x0
    004058a4ldr w0, [x0]
    004058a8extr w1, w0, w0, 2
    004058acldr w0, [sp+12]
    004058b0sub w0, wzr, w0
    004058b4mov w0, w0
    004058b8and x0, x0, 7
    004058bcubfm x0, x0, 62, 61
    004058c0ldr x3, [sp+24]
    004058c4add x0, x3, x0
    004058c8ldr w0, [x0]
    004058ccextr w0, w0, w0, 13
    004058d0eor w1, w1, w0
    004058d4ldr w0, [sp+12]
    004058d8sub w0, wzr, w0
    004058dcmov w0, w0
    004058e0and x0, x0, 7
    004058e4ubfm x0, x0, 62, 61
    004058e8ldr x3, [sp+24]
    004058ecadd x0, x3, x0
    004058f0ldr w0, [x0]
    004058f4extr w0, w0, w0, 22
    004058f8eor w1, w1, w0
    004058fcldr w0, [sp+12]
    00405900sub w0, wzr, w0
    00405904mov w0, w0
    00405908and x0, x0, 7
    0040590cubfm x0, x0, 62, 61
    00405910ldr x3, [sp+24]
    00405914add x0, x3, x0
    00405918ldr w3, [x0]
    0040591cmovz w4, 1
    00405920ldr w0, [sp+12]
    00405924sub w0, w4, w0
    00405928mov w0, w0
    0040592cand x0, x0, 7
    00405930ubfm x0, x0, 62, 61
    00405934ldr x4, [sp+24]
    00405938add x0, x4, x0
    0040593cldr w0, [x0]
    00405940and w3, w3, w0
    00405944movz w4, 2
    00405948ldr w0, [sp+12]
    0040594csub w0, w4, w0
    00405950mov w0, w0
    00405954and x0, x0, 7
    00405958ubfm x0, x0, 62, 61
    0040595cldr x4, [sp+24]
    00405960add x0, x4, x0
    00405964ldr w4, [x0]
    00405968ldr w0, [sp+12]
    0040596csub w0, wzr, w0
    00405970mov w0, w0
    00405974and x0, x0, 7
    00405978ubfm x0, x0, 62, 61
    0040597cldr x5, [sp+24]
    00405980add x0, x5, x0
    00405984ldr w5, [x0]
    00405988movz w6, 1
    0040598cldr w0, [sp+12]
    00405990sub w0, w6, w0
    00405994mov w0, w0
    00405998and x0, x0, 7
    0040599cubfm x0, x0, 62, 61
    004059a0ldr x6, [sp+24]
    004059a4add x0, x6, x0
    004059a8ldr w0, [x0]
    004059aceor w0, w5, w0
    004059b0and w0, w4, w0
    004059b4orr w0, w3, w0
    004059b8add w1, w1, w0
    004059bcmovz w3, 7
    004059c0ldr w0, [sp+12]
    004059c4sub w0, w3, w0
    004059c8mov w0, w0
    004059ccand x0, x0, 7
    004059d0ubfm x0, x0, 62, 61
    004059d4ldr x3, [sp+24]
    004059d8add x0, x3, x0
    004059dcadd w1, w2, w1
    004059e0str w1, [x0]
    004059e4hint
    004059e8add sp, sp, 32
    004059ecret x30
    004054e0
    004059f0
    004059f0_hash:
    004059f0stp x29, x30, [sp-80]!
    004059f4add x29, sp, 0
    004059f8str x0, [sp+24]
    004059fcldr x0, [sp+24]
    00405a00ldr w0, [x0+64]
    00405a04str w0, [sp+32]
    00405a08ldr x0, [sp+24]
    00405a0cldr w0, [x0+68]
    00405a10str w0, [sp+36]
    00405a14ldr x0, [sp+24]
    00405a18ldr w0, [x0+72]
    00405a1cstr w0, [sp+40]
    00405a20ldr x0, [sp+24]
    00405a24ldr w0, [x0+76]
    00405a28str w0, [sp+44]
    00405a2cldr x0, [sp+24]
    00405a30ldr w0, [x0+80]
    00405a34str w0, [sp+48]
    00405a38ldr x0, [sp+24]
    00405a3cldr w0, [x0+84]
    00405a40str w0, [sp+52]
    00405a44ldr x0, [sp+24]
    00405a48ldr w0, [x0+88]
    00405a4cstr w0, [sp+56]
    00405a50ldr x0, [sp+24]
    00405a54ldr w0, [x0+92]
    00405a58str w0, [sp+60]
    00405a5cldr x0, [sp+24]
    00405a60str x0, [sp+64]
    00405a64str wzr, [sp+76]
    00405a68b 0x405bb8
    00405a6c
    00405a6cloc_405a6c:
    00405a6cadd x0, sp, 32
    00405a70ldr w3, [sp+76]
    00405a74movz w2, 0
    00405a78ldr x1, [sp+64]
    00405a7cbl _rtrf
    00405a80add x0, sp, 32
    00405a84ldr w3, [sp+76]
    00405a88movz w2, 1
    00405a8cldr x1, [sp+64]
    00405a90bl _rtrf
    00405a94add x0, sp, 32
    00405a98ldr w3, [sp+76]
    00405a9cmovz w2, 2
    00405aa0ldr x1, [sp+64]
    00405aa4bl _rtrf
    00405aa8add x0, sp, 32
    00405aacldr w3, [sp+76]
    00405ab0movz w2, 3
    00405ab4ldr x1, [sp+64]
    00405ab8bl _rtrf
    00405abcadd x0, sp, 32
    00405ac0ldr w3, [sp+76]
    00405ac4movz w2, 4
    00405ac8ldr x1, [sp+64]
    00405accbl _rtrf
    00405ad0add x0, sp, 32
    00405ad4ldr w3, [sp+76]
    00405ad8movz w2, 5
    00405adcldr x1, [sp+64]
    00405ae0bl _rtrf
    00405ae4add x0, sp, 32
    00405ae8ldr w3, [sp+76]
    00405aecmovz w2, 6
    00405af0ldr x1, [sp+64]
    00405af4bl _rtrf
    00405af8add x0, sp, 32
    00405afcldr w3, [sp+76]
    00405b00movz w2, 7
    00405b04ldr x1, [sp+64]
    00405b08bl _rtrf
    00405b0cadd x0, sp, 32
    00405b10ldr w3, [sp+76]
    00405b14movz w2, 8
    00405b18ldr x1, [sp+64]
    00405b1cbl _rtrf
    00405b20add x0, sp, 32
    00405b24ldr w3, [sp+76]
    00405b28movz w2, 9
    00405b2cldr x1, [sp+64]
    00405b30bl _rtrf
    00405b34add x0, sp, 32
    00405b38ldr w3, [sp+76]
    00405b3cmovz w2, 10
    00405b40ldr x1, [sp+64]
    00405b44bl _rtrf
    00405b48add x0, sp, 32
    00405b4cldr w3, [sp+76]
    00405b50movz w2, 11
    00405b54ldr x1, [sp+64]
    00405b58bl _rtrf
    00405b5cadd x0, sp, 32
    00405b60ldr w3, [sp+76]
    00405b64movz w2, 12
    00405b68ldr x1, [sp+64]
    00405b6cbl _rtrf
    00405b70add x0, sp, 32
    00405b74ldr w3, [sp+76]
    00405b78movz w2, 13
    00405b7cldr x1, [sp+64]
    00405b80bl _rtrf
    00405b84add x0, sp, 32
    00405b88ldr w3, [sp+76]
    00405b8cmovz w2, 14
    00405b90ldr x1, [sp+64]
    00405b94bl _rtrf
    00405b98add x0, sp, 32
    00405b9cldr w3, [sp+76]
    00405ba0movz w2, 15
    00405ba4ldr x1, [sp+64]
    00405ba8bl _rtrf
    00405bacldr w0, [sp+76]
    00405bb0add w0, w0, 16
    00405bb4str w0, [sp+76]
    00405bb8
    00405bb8loc_405bb8:
    00405bb8ldr w0, [sp+76]
    00405bbcsubs wzr, w0, 63
    00405bc0b.ls 0x405a6c
    00405bc4ldr x0, [sp+24]
    00405bc8ldr w1, [x0+64]
    00405bccldr w0, [sp+32]
    00405bd0add w1, w1, w0
    00405bd4ldr x0, [sp+24]
    00405bd8str w1, [x0+64]
    00405bdcldr x0, [sp+24]
    00405be0ldr w1, [x0+68]
    00405be4ldr w0, [sp+36]
    00405be8add w1, w1, w0
    00405becldr x0, [sp+24]
    00405bf0str w1, [x0+68]
    00405bf4ldr x0, [sp+24]
    00405bf8ldr w1, [x0+72]
    00405bfcldr w0, [sp+40]
    00405c00add w1, w1, w0
    00405c04ldr x0, [sp+24]
    00405c08str w1, [x0+72]
    00405c0cldr x0, [sp+24]
    00405c10ldr w1, [x0+76]
    00405c14ldr w0, [sp+44]
    00405c18add w1, w1, w0
    00405c1cldr x0, [sp+24]
    00405c20str w1, [x0+76]
    00405c24ldr x0, [sp+24]
    00405c28ldr w1, [x0+80]
    00405c2cldr w0, [sp+48]
    00405c30add w1, w1, w0
    00405c34ldr x0, [sp+24]
    00405c38str w1, [x0+80]
    00405c3cldr x0, [sp+24]
    00405c40ldr w1, [x0+84]
    00405c44ldr w0, [sp+52]
    00405c48add w1, w1, w0
    00405c4cldr x0, [sp+24]
    00405c50str w1, [x0+84]
    00405c54ldr x0, [sp+24]
    00405c58ldr w1, [x0+88]
    00405c5cldr w0, [sp+56]
    00405c60add w1, w1, w0
    00405c64ldr x0, [sp+24]
    00405c68str w1, [x0+88]
    00405c6cldr x0, [sp+24]
    00405c70ldr w1, [x0+92]
    00405c74ldr w0, [sp+60]
    00405c78add w1, w1, w0
    00405c7cldr x0, [sp+24]
    00405c80str w1, [x0+92]
    00405c84hint
    00405c88ldp x29, x30, [sp], 80
    00405c8cret x30
    004059f0
    00405c90
    00405c90sha256_init:
    00405c90sub sp, sp, 16
    00405c94str x0, [sp+8]
    00405c98ldr x0, [sp+8]
    00405c9cstr wzr, [x0+100]
    00405ca0ldr x0, [sp+8]
    00405ca4ldr w1, [x0+100]
    00405ca8ldr x0, [sp+8]
    00405cacstr w1, [x0+96]
    00405cb0ldr x0, [sp+8]
    00405cb4movz w1, 58983
    00405cb8movk w1, 0x6a090000
    00405cbcstr w1, [x0+64]
    00405cc0ldr x0, [sp+8]
    00405cc4movz w1, 44677
    00405cc8movk w1, 0xbb670000
    00405cccstr w1, [x0+68]
    00405cd0ldr x0, [sp+8]
    00405cd4movz w1, 62322
    00405cd8movk w1, 0x3c6e0000
    00405cdcstr w1, [x0+72]
    00405ce0ldr x0, [sp+8]
    00405ce4movz w1, 62778
    00405ce8movk w1, 0xa54f0000
    00405cecstr w1, [x0+76]
    00405cf0ldr x0, [sp+8]
    00405cf4movz w1, 21119
    00405cf8movk w1, 0x510e0000
    00405cfcstr w1, [x0+80]
    00405d00ldr x0, [sp+8]
    00405d04movz w1, 26764
    00405d08movk w1, 0x9b050000
    00405d0cstr w1, [x0+84]
    00405d10ldr x0, [sp+8]
    00405d14movz w1, 55723
    00405d18movk w1, 0x1f830000
    00405d1cstr w1, [x0+88]
    00405d20ldr x0, [sp+8]
    00405d24movz w1, 52505
    00405d28movk w1, 0x5be00000
    00405d2cstr w1, [x0+92]
    00405d30hint
    00405d34add sp, sp, 16
    00405d38ret x30
    00405c90
    00405d3c
    00405d3csha256_hash:
    00405d3cstp x29, x30, [sp-80]!
    00405d40add x29, sp, 0
    00405d44stp x19, x20, [sp+16]
    00405d48str x21, [sp+32]
    00405d4cstr x0, [sp+72]
    00405d50str x1, [sp+64]
    00405d54str w2, [sp+60]
    00405d58ldr x0, [sp+72]
    00405d5cldr w0, [x0+96]
    00405d60and w21, w0, 63
    00405d64ldr x0, [sp+72]
    00405d68ldr w1, [x0+96]
    00405d6cldr w0, [sp+60]
    00405d70add w1, w1, w0
    00405d74ldr x0, [sp+72]
    00405d78str w1, [x0+96]
    00405d7cldr x0, [sp+72]
    00405d80ldr w0, [x0+96]
    00405d84ldr w1, [sp+60]
    00405d88subs wzr, w1, w0
    00405d8cb.ls 0x405da4
    00405d90ldr x0, [sp+72]
    00405d94ldr w0, [x0+100]
    00405d98add w1, w0, 1
    00405d9cldr x0, [sp+72]
    00405da0str w1, [x0+100]
    00405da4
    00405da4loc_405da4:
    00405da4movz w20, 0
    00405da8movz w0, 64
    00405dacsub w19, w0, w21
    00405db0b 0x405e08
    00405db4
    00405db4loc_405db4:
    00405db4ldr x1, [sp+72]
    00405db8mov w0, w21
    00405dbcadd x3, x1, x0
    00405dc0mov w0, w20
    00405dc4ldr x1, [sp+64]
    00405dc8add x0, x1, x0
    00405dccmov w2, w19
    00405dd0mov x1, x0
    00405dd4mov x0, x3
    00405dd8bl _memcp
    00405ddcldr x0, [sp+72]
    00405de0movz w1, 16
    00405de4bl _bswapw
    00405de8ldr x0, [sp+72]
    00405decbl _hash
    00405df0add w20, w20, w19
    00405df4ldr w0, [sp+60]
    00405df8sub w0, w0, w19
    00405dfcstr w0, [sp+60]
    00405e00movz w19, 64
    00405e04movz w21, 0
    00405e08
    00405e08loc_405e08:
    00405e08ldr w0, [sp+60]
    00405e0csubs wzr, w0, w19
    00405e10b.hs 0x405db4
    00405e14ldr x1, [sp+72]
    00405e18mov w0, w21
    00405e1cadd x3, x1, x0
    00405e20mov w0, w20
    00405e24ldr x1, [sp+64]
    00405e28add x0, x1, x0
    00405e2cldr w2, [sp+60]
    00405e30mov x1, x0
    00405e34mov x0, x3
    00405e38bl _memcp
    00405e3chint
    00405e40ldp x19, x20, [sp+16]
    00405e44ldr x21, [sp+32]
    00405e48ldp x29, x30, [sp], 80
    00405e4cret x30
    00405d3c
    00405e50
    00405e50sha256_done:
    00405e50stp x29, x30, [sp-48]!
    00405e54add x29, sp, 0
    00405e58str x0, [sp+24]
    00405e5cstr x1, [sp+16]
    00405e60ldr x0, [sp+24]
    00405e64ldr w0, [x0+96]
    00405e68and w0, w0, 63
    00405e6cstr w0, [sp+44]
    00405e70ldr w0, [sp+44]
    00405e74orn w0, wzr, w0
    00405e78ubfm w0, w0, 29, 28
    00405e7cand w0, w0, 24
    00405e80str w0, [sp+40]
    00405e84ldr x2, [sp+24]
    00405e88ldr w0, [sp+44]
    00405e8cadd w0, w0, 3
    00405e90ubfm w0, w0, 2, 31
    00405e94mov w1, w0
    00405e98mov x0, x2
    00405e9cbl _bswapw
    00405ea0ldr w0, [sp+44]
    00405ea4ubfm w1, w0, 2, 31
    00405ea8ldr x0, [sp+24]
    00405eacmov w1, w1
    00405eb0ldr w1, [x0+2*x1]
    00405eb4ldr w0, [sp+40]
    00405eb8movn w2, 127
    00405ebclslv w0, w2, w0
    00405ec0ldr w2, [sp+44]
    00405ec4ubfm w3, w2, 2, 31
    00405ec8and w2, w1, w0
    00405eccldr x0, [sp+24]
    00405ed0mov w1, w3
    00405ed4str w2, [x0+2*x1]
    00405ed8ldr w0, [sp+44]
    00405edcubfm w1, w0, 2, 31
    00405ee0ldr x0, [sp+24]
    00405ee4mov w1, w1
    00405ee8ldr w0, [x0+2*x1]
    00405eecldr w1, [sp+40]
    00405ef0movz w2, 128
    00405ef4lslv w1, w2, w1
    00405ef8mov w2, w1
    00405efcldr w1, [sp+44]
    00405f00ubfm w1, w1, 2, 31
    00405f04orr w2, w0, w2
    00405f08ldr x0, [sp+24]
    00405f0cmov w1, w1
    00405f10str w2, [x0+2*x1]
    00405f14ldr w0, [sp+44]
    00405f18subs wzr, w0, 55
    00405f1cb.hi 0x405f34
    00405f20ldr w0, [sp+44]
    00405f24ubfm w0, w0, 2, 31
    00405f28add w0, w0, 1
    00405f2cstr w0, [sp+44]
    00405f30b 0x405f8c
    00405f34
    00405f34loc_405f34:
    00405f34ldr x0, [sp+24]
    00405f38ldr w1, [x0+60]
    00405f3cldr w0, [sp+44]
    00405f40subs wzr, w0, 59
    00405f44b.hi 0x405f54
    00405f48ldr x0, [sp+24]
    00405f4cldr w0, [x0+60]
    00405f50b 0x405f58
    00405f54
    00405f54loc_405f54:
    00405f54movz w0, 0
    00405f58
    00405f58loc_405f58:
    00405f58eor w1, w0, w1
    00405f5cldr x0, [sp+24]
    00405f60str w1, [x0+60]
    00405f64ldr x0, [sp+24]
    00405f68bl _hash
    00405f6cstr wzr, [sp+44]
    00405f70b 0x405f8c
    00405f74
    00405f74loc_405f74:
    00405f74ldr w0, [sp+44]
    00405f78add w1, w0, 1
    00405f7cstr w1, [sp+44]
    00405f80ldr x1, [sp+24]
    00405f84mov w0, w0
    00405f88str wzr, [x1+2*x0]
    00405f8c
    00405f8cloc_405f8c:
    00405f8cldr w0, [sp+44]
    00405f90subs wzr, w0, 13
    00405f94b.ls 0x405f74
    00405f98ldr x0, [sp+24]
    00405f9cldr w0, [x0+100]
    00405fa0ubfm w1, w0, 29, 28
    00405fa4ldr x0, [sp+24]
    00405fa8ldr w0, [x0+96]
    00405facubfm w0, w0, 29, 31
    00405fb0orr w1, w1, w0
    00405fb4ldr x0, [sp+24]
    00405fb8str w1, [x0+56]
    00405fbcldr x0, [sp+24]
    00405fc0ldr w0, [x0+96]
    00405fc4ubfm w1, w0, 29, 28
    00405fc8ldr x0, [sp+24]
    00405fccstr w1, [x0+60]
    00405fd0ldr x0, [sp+24]
    00405fd4bl _hash
    00405fd8str wzr, [sp+44]
    00405fdcb 0x406040
    00405fe0
    00405fe0loc_405fe0:
    00405fe0ldr w0, [sp+44]
    00405fe4and w1, w0, 15
    00405fe8ldr x0, [sp+24]
    00405fecmov w1, w1
    00405ff0str wzr, [x0+2*x1]
    00405ff4ldr w0, [sp+44]
    00405ff8ubfm w1, w0, 2, 31
    00405ffcldr x0, [sp+24]
    00406000mov w1, w1
    00406004add x1, x1, 16
    00406008ldr w1, [x0+2*x1]
    0040600cldr w0, [sp+44]
    00406010orn w0, wzr, w0
    00406014ubfm w0, w0, 29, 28
    00406018and w0, w0, 24
    0040601clsrv w2, w1, w0
    00406020ldr w0, [sp+44]
    00406024ldr x1, [sp+16]
    00406028add x0, x1, x0
    0040602cand w1, w2, 255
    00406030strb w1, [x0]
    00406034ldr w0, [sp+44]
    00406038add w0, w0, 1
    0040603cstr w0, [sp+44]
    00406040
    00406040loc_406040:
    00406040ldr w0, [sp+44]
    00406044subs wzr, w0, 31
    00406048b.ls 0x405fe0
    0040604chint
    00406050hint
    00406054ldp x29, x30, [sp], 48
    00406058ret x30
    00405e50