From 7a303586ad1a8ffce029fa15d170969ee375cff8 Mon Sep 17 00:00:00 2001 From: sehugg Date: Fri, 14 Aug 2026 12:37:26 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20sehugg/8?= =?UTF-8?q?bitworkshop@2895d5b25afc98cddc28af7baea7973e594daeac=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{apple2-3C4ZD4DD.js => apple2-HVOUE76T.js} | 4 +- ...3C4ZD4DD.js.map => apple2-HVOUE76T.js.map} | 0 gen/{arm32-U7EXMUEA.js => arm32-76TZ4DV5.js} | 4 +- ...-U7EXMUEA.js.map => arm32-76TZ4DV5.js.map} | 0 ...cade-ITZHTM4Y.js => astrocade-NBGSY4P4.js} | 4 +- ...HTM4Y.js.map => astrocade-NBGSY4P4.js.map} | 0 ...7800-T6BNM2VI.js => atari7800-5BAGYBIM.js} | 4 +- ...NM2VI.js.map => atari7800-5BAGYBIM.js.map} | 0 ...{atari8-DU7XPQJE.js => atari8-6EBS324Z.js} | 4 +- ...DU7XPQJE.js.map => atari8-6EBS324Z.js.map} | 0 gen/{basic-XGBGD5OW.js => basic-EY4OCRYP.js} | 4 +- ...-XGBGD5OW.js.map => basic-EY4OCRYP.js.map} | 0 gen/{c64-H2CM2FS7.js => c64-FN5YNE7L.js} | 4 +- ...64-H2CM2FS7.js.map => c64-FN5YNE7L.js.map} | 0 ...nnelf-MOCITAVQ.js => channelf-DZ5A4LWS.js} | 4 +- ...CITAVQ.js.map => channelf-DZ5A4LWS.js.map} | 0 gen/{chunk-LYDWRYWR.js => chunk-422F5ECI.js} | 4 +- ...-LYDWRYWR.js.map => chunk-422F5ECI.js.map} | 0 gen/chunk-BDSSD4L3.js | 30 - gen/chunk-BDSSD4L3.js.map | 7 - gen/{chunk-U7I7I32A.js => chunk-BTBOTRE5.js} | 4 +- ...-U7I7I32A.js.map => chunk-BTBOTRE5.js.map} | 4 +- gen/{chunk-NYNEYYCH.js => chunk-ELQXSR5S.js} | 4 +- ...-NYNEYYCH.js.map => chunk-ELQXSR5S.js.map} | 0 gen/{chunk-SWDUABCL.js => chunk-PFP4AQ6X.js} | 82 +- ...-SWDUABCL.js.map => chunk-PFP4AQ6X.js.map} | 6 +- gen/chunk-V66UDXZ2.js | 30 + gen/chunk-V66UDXZ2.js.map | 7 + ...{coleco-RHQHLZSE.js => coleco-4PB36NHZ.js} | 4 +- ...RHQHLZSE.js.map => coleco-4PB36NHZ.js.map} | 0 gen/common/cpu/ZilogZ80.js | 4 +- gen/common/cpu/ZilogZ80.js.map | 2 +- gen/{cpc-TXA7FIB4.js => cpc-Y44TL4FY.js} | 4 +- ...pc-TXA7FIB4.js.map => cpc-Y44TL4FY.js.map} | 0 gen/{devel-4WJUF4VD.js => devel-SIVB5T3X.js} | 4 +- ...-4WJUF4VD.js.map => devel-SIVB5T3X.js.map} | 0 gen/embedui.js | 2 +- gen/{exidy-TFB6WKCV.js => exidy-77ACASMP.js} | 4 +- ...-TFB6WKCV.js.map => exidy-77ACASMP.js.map} | 0 ...axian-GTJTYJ6I.js => galaxian-4WLZAHO6.js} | 4 +- ...JTYJ6I.js.map => galaxian-4WLZAHO6.js.map} | 0 gen/{gb-OB2F7RFY.js => gb-XOSCWAWO.js} | 4 +- ...{gb-OB2F7RFY.js.map => gb-XOSCWAWO.js.map} | 0 gen/ide/pixeleditor.js | 126 +- gen/ide/pixeleditor.js.map | 2 +- gen/{kim1-WE2TURKH.js => kim1-VGXWVWRK.js} | 4 +- ...1-WE2TURKH.js.map => kim1-VGXWVWRK.js.map} | 0 gen/machine/pacman.js | 448 ++++++ gen/machine/pacman.js.map | 1 + gen/{mcr-Y6VNGK3T.js => mcr-DG2L33BL.js} | 4 +- ...cr-Y6VNGK3T.js.map => mcr-DG2L33BL.js.map} | 0 gen/{msx-KK2WRGON.js => msx-W5SMSRNA.js} | 4 +- ...sx-KK2WRGON.js.map => msx-W5SMSRNA.js.map} | 0 ...080bw-ZESED2JK.js => mw8080bw-6ILEQ3AW.js} | 4 +- ...SED2JK.js.map => mw8080bw-6ILEQ3AW.js.map} | 0 gen/{nes-EZ37ZSE3.js => nes-RPMNUAAT.js} | 4 +- ...es-EZ37ZSE3.js.map => nes-RPMNUAAT.js.map} | 0 gen/pacman-EU7X4F3T.js | 2 + gen/pacman-EU7X4F3T.js.map | 7 + gen/{pce-PXRVFOXD.js => pce-YYJRYMWW.js} | 4 +- ...ce-PXRVFOXD.js.map => pce-YYJRYMWW.js.map} | 0 gen/platform/_index.js | 1 + gen/platform/_index.js.map | 2 +- gen/platform/pacman.js | 79 + gen/platform/pacman.js.map | 1 + gen/{sms-JUCQOPAZ.js => sms-Q3XM6C3I.js} | 4 +- ...ms-JUCQOPAZ.js.map => sms-Q3XM6C3I.js.map} | 0 ...i-FV7XJRMS.js => sound_konami-GPESK7AJ.js} | 4 +- ...MS.js.map => sound_konami-GPESK7AJ.js.map} | 0 ...4TVU4BIE.js => sound_williams-VSSYU4EM.js} | 4 +- ....js.map => sound_williams-VSSYU4EM.js.map} | 0 gen/src/common/cpu/ZilogZ80.js | 4 +- gen/src/common/cpu/ZilogZ80.js.map | 2 +- gen/tsconfig.tsbuildinfo | 2 +- gen/ui.js | 2 +- gen/{vcs-HUQNPOYZ.js => vcs-4SA3IVXY.js} | 4 +- ...cs-HUQNPOYZ.js.map => vcs-4SA3IVXY.js.map} | 0 ...{vector-7BC6UGME.js => vector-CV5GG74M.js} | 4 +- ...7BC6UGME.js.map => vector-CV5GG74M.js.map} | 0 ...ectrex-VTNUN3WR.js => vectrex-PWJNIMVL.js} | 4 +- ...TNUN3WR.js.map => vectrex-PWJNIMVL.js.map} | 0 ...erilog-T2AE2B26.js => verilog-CYCIAEBW.js} | 4 +- ...2AE2B26.js.map => verilog-CYCIAEBW.js.map} | 0 gen/{vic20-ZQSW5TXL.js => vic20-4WWR3DY7.js} | 4 +- ...-ZQSW5TXL.js.map => vic20-4WWR3DY7.js.map} | 0 ...icdual-AHKYFKIL.js => vicdual-CWRFDQFT.js} | 4 +- ...HKYFKIL.js.map => vicdual-CWRFDQFT.js.map} | 0 ...liams-ZGG7MJFE.js => williams-XY7FQ6WN.js} | 4 +- ...G7MJFE.js.map => williams-XY7FQ6WN.js.map} | 0 gen/worker/bundle.js | 16 + gen/worker/bundle.js.map | 4 +- gen/worker/platforms.js | 13 + gen/worker/platforms.js.map | 2 +- ...chine-OIKG5ACZ.js => zmachine-BWL2K4LK.js} | 4 +- ...KG5ACZ.js.map => zmachine-BWL2K4LK.js.map} | 0 gen/{zx-M62LZARP.js => zx-KYUJXAXE.js} | 4 +- ...{zx-M62LZARP.js.map => zx-KYUJXAXE.js.map} | 0 presets/pacman/chase.c | 1428 +++++++++++++++++ presets/pacman/climber.c | 1070 ++++++++++++ presets/pacman/hello.c | 643 ++++++++ presets/pacman/music.c | 947 +++++++++++ presets/pacman/pacman_common.c | 269 ++++ presets/pacman/pacman_common.h | 109 ++ presets/pacman/siege.c | 825 ++++++++++ presets/pacman/solarian.c | 1032 ++++++++++++ presets/pacman/sprites.c | 634 ++++++++ src/common/cpu/ZilogZ80.ts | 4 +- src/ide/pixeleditor.ts | 136 +- src/machine/pacman.ts | 443 +++++ src/platform/_index.ts | 1 + src/platform/pacman.ts | 74 + src/worker/platforms.ts | 13 + 112 files changed, 8480 insertions(+), 176 deletions(-) rename gen/{apple2-3C4ZD4DD.js => apple2-HVOUE76T.js} (99%) rename gen/{apple2-3C4ZD4DD.js.map => apple2-HVOUE76T.js.map} (100%) rename gen/{arm32-U7EXMUEA.js => arm32-76TZ4DV5.js} (99%) rename gen/{arm32-U7EXMUEA.js.map => arm32-76TZ4DV5.js.map} (100%) rename gen/{astrocade-ITZHTM4Y.js => astrocade-NBGSY4P4.js} (99%) rename gen/{astrocade-ITZHTM4Y.js.map => astrocade-NBGSY4P4.js.map} (100%) rename gen/{atari7800-T6BNM2VI.js => atari7800-5BAGYBIM.js} (98%) rename gen/{atari7800-T6BNM2VI.js.map => atari7800-5BAGYBIM.js.map} (100%) rename gen/{atari8-DU7XPQJE.js => atari8-6EBS324Z.js} (99%) rename gen/{atari8-DU7XPQJE.js.map => atari8-6EBS324Z.js.map} (100%) rename gen/{basic-XGBGD5OW.js => basic-EY4OCRYP.js} (99%) rename gen/{basic-XGBGD5OW.js.map => basic-EY4OCRYP.js.map} (100%) rename gen/{c64-H2CM2FS7.js => c64-FN5YNE7L.js} (98%) rename gen/{c64-H2CM2FS7.js.map => c64-FN5YNE7L.js.map} (100%) rename gen/{channelf-MOCITAVQ.js => channelf-DZ5A4LWS.js} (99%) rename gen/{channelf-MOCITAVQ.js.map => channelf-DZ5A4LWS.js.map} (100%) rename gen/{chunk-LYDWRYWR.js => chunk-422F5ECI.js} (99%) rename gen/{chunk-LYDWRYWR.js.map => chunk-422F5ECI.js.map} (100%) delete mode 100644 gen/chunk-BDSSD4L3.js delete mode 100644 gen/chunk-BDSSD4L3.js.map rename gen/{chunk-U7I7I32A.js => chunk-BTBOTRE5.js} (51%) rename gen/{chunk-U7I7I32A.js.map => chunk-BTBOTRE5.js.map} (91%) rename gen/{chunk-NYNEYYCH.js => chunk-ELQXSR5S.js} (98%) rename gen/{chunk-NYNEYYCH.js.map => chunk-ELQXSR5S.js.map} (100%) rename gen/{chunk-SWDUABCL.js => chunk-PFP4AQ6X.js} (83%) rename gen/{chunk-SWDUABCL.js.map => chunk-PFP4AQ6X.js.map} (72%) create mode 100644 gen/chunk-V66UDXZ2.js create mode 100644 gen/chunk-V66UDXZ2.js.map rename gen/{coleco-RHQHLZSE.js => coleco-4PB36NHZ.js} (95%) rename gen/{coleco-RHQHLZSE.js.map => coleco-4PB36NHZ.js.map} (100%) rename gen/{cpc-TXA7FIB4.js => cpc-Y44TL4FY.js} (96%) rename gen/{cpc-TXA7FIB4.js.map => cpc-Y44TL4FY.js.map} (100%) rename gen/{devel-4WJUF4VD.js => devel-SIVB5T3X.js} (93%) rename gen/{devel-4WJUF4VD.js.map => devel-SIVB5T3X.js.map} (100%) rename gen/{exidy-TFB6WKCV.js => exidy-77ACASMP.js} (98%) rename gen/{exidy-TFB6WKCV.js.map => exidy-77ACASMP.js.map} (100%) rename gen/{galaxian-GTJTYJ6I.js => galaxian-4WLZAHO6.js} (97%) rename gen/{galaxian-GTJTYJ6I.js.map => galaxian-4WLZAHO6.js.map} (100%) rename gen/{gb-OB2F7RFY.js => gb-XOSCWAWO.js} (99%) rename gen/{gb-OB2F7RFY.js.map => gb-XOSCWAWO.js.map} (100%) rename gen/{kim1-WE2TURKH.js => kim1-VGXWVWRK.js} (97%) rename gen/{kim1-WE2TURKH.js.map => kim1-VGXWVWRK.js.map} (100%) create mode 100644 gen/machine/pacman.js create mode 100644 gen/machine/pacman.js.map rename gen/{mcr-Y6VNGK3T.js => mcr-DG2L33BL.js} (96%) rename gen/{mcr-Y6VNGK3T.js.map => mcr-DG2L33BL.js.map} (100%) rename gen/{msx-KK2WRGON.js => msx-W5SMSRNA.js} (98%) rename gen/{msx-KK2WRGON.js.map => msx-W5SMSRNA.js.map} (100%) rename gen/{mw8080bw-ZESED2JK.js => mw8080bw-6ILEQ3AW.js} (95%) rename gen/{mw8080bw-ZESED2JK.js.map => mw8080bw-6ILEQ3AW.js.map} (100%) rename gen/{nes-EZ37ZSE3.js => nes-RPMNUAAT.js} (99%) rename gen/{nes-EZ37ZSE3.js.map => nes-RPMNUAAT.js.map} (100%) create mode 100644 gen/pacman-EU7X4F3T.js create mode 100644 gen/pacman-EU7X4F3T.js.map rename gen/{pce-PXRVFOXD.js => pce-YYJRYMWW.js} (99%) rename gen/{pce-PXRVFOXD.js.map => pce-YYJRYMWW.js.map} (100%) create mode 100644 gen/platform/pacman.js create mode 100644 gen/platform/pacman.js.map rename gen/{sms-JUCQOPAZ.js => sms-Q3XM6C3I.js} (96%) rename gen/{sms-JUCQOPAZ.js.map => sms-Q3XM6C3I.js.map} (100%) rename gen/{sound_konami-FV7XJRMS.js => sound_konami-GPESK7AJ.js} (93%) rename gen/{sound_konami-FV7XJRMS.js.map => sound_konami-GPESK7AJ.js.map} (100%) rename gen/{sound_williams-4TVU4BIE.js => sound_williams-VSSYU4EM.js} (92%) rename gen/{sound_williams-4TVU4BIE.js.map => sound_williams-VSSYU4EM.js.map} (100%) rename gen/{vcs-HUQNPOYZ.js => vcs-4SA3IVXY.js} (98%) rename gen/{vcs-HUQNPOYZ.js.map => vcs-4SA3IVXY.js.map} (100%) rename gen/{vector-7BC6UGME.js => vector-CV5GG74M.js} (98%) rename gen/{vector-7BC6UGME.js.map => vector-CV5GG74M.js.map} (100%) rename gen/{vectrex-VTNUN3WR.js => vectrex-PWJNIMVL.js} (99%) rename gen/{vectrex-VTNUN3WR.js.map => vectrex-PWJNIMVL.js.map} (100%) rename gen/{verilog-T2AE2B26.js => verilog-CYCIAEBW.js} (99%) rename gen/{verilog-T2AE2B26.js.map => verilog-CYCIAEBW.js.map} (100%) rename gen/{vic20-ZQSW5TXL.js => vic20-4WWR3DY7.js} (96%) rename gen/{vic20-ZQSW5TXL.js.map => vic20-4WWR3DY7.js.map} (100%) rename gen/{vicdual-AHKYFKIL.js => vicdual-CWRFDQFT.js} (94%) rename gen/{vicdual-AHKYFKIL.js.map => vicdual-CWRFDQFT.js.map} (100%) rename gen/{williams-ZGG7MJFE.js => williams-XY7FQ6WN.js} (99%) rename gen/{williams-ZGG7MJFE.js.map => williams-XY7FQ6WN.js.map} (100%) rename gen/{zmachine-OIKG5ACZ.js => zmachine-BWL2K4LK.js} (98%) rename gen/{zmachine-OIKG5ACZ.js.map => zmachine-BWL2K4LK.js.map} (100%) rename gen/{zx-M62LZARP.js => zx-KYUJXAXE.js} (95%) rename gen/{zx-M62LZARP.js.map => zx-KYUJXAXE.js.map} (100%) create mode 100644 presets/pacman/chase.c create mode 100644 presets/pacman/climber.c create mode 100644 presets/pacman/hello.c create mode 100644 presets/pacman/music.c create mode 100644 presets/pacman/pacman_common.c create mode 100644 presets/pacman/pacman_common.h create mode 100644 presets/pacman/siege.c create mode 100644 presets/pacman/solarian.c create mode 100644 presets/pacman/sprites.c create mode 100644 src/machine/pacman.ts create mode 100644 src/platform/pacman.ts diff --git a/gen/apple2-3C4ZD4DD.js b/gen/apple2-HVOUE76T.js similarity index 99% rename from gen/apple2-3C4ZD4DD.js rename to gen/apple2-HVOUE76T.js index 9f1cf67e..7a60cd9b 100644 --- a/gen/apple2-3C4ZD4DD.js +++ b/gen/apple2-HVOUE76T.js @@ -1,4 +1,4 @@ -import{a as i0}from"./chunk-NYNEYYCH.js";import{A as r0,I as s0,m as e0,r as t0,x as O}from"./chunk-BDSSD4L3.js";import{K as U,g as W,i as X,l as $,m as x0,s as a0,u as d}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var P=class extends t0{constructor(){super();this.cpuFrequency=1022727;this.sampleRate=this.cpuFrequency;this.cpuCyclesPerLine=65;this.cpuCyclesPerFrame=this.cpuCyclesPerLine*262;this.canvasWidth=280;this.numVisibleScanlines=192;this.numTotalScanlines=262;this.defaultROMSize=77824;this.cpuCyclesPaddleUnit=11;this.cpuCyclesPaddleMax=255*this.cpuCyclesPaddleUnit;this.LOAD_BASE=0;this.HDR_SIZE=0;this.ram=new Uint8Array(77824);this.cpu=new e0;this.grdirty=new Array(384);this.grparams={dirty:this.grdirty,grswitch:E,mem:this.ram};this.kbdlatch=0;this.soundstate=0;this.auxRAMselected=!1;this.auxRAMbank=1;this.writeinhibit=!0;this.bank2rdoffset=0;this.bank2wroffset=0;this.paddleValues=[0,0,0,0];this.paddleButtons=[!1,!1,!1];this.paddleLastTriggered=0;this.slots=new Array(8);this.fakeDrive={readROM:x=>{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new $().decode(x0(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,i=this.frameCycles-this.paddleLastTriggered;return i=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new $().decode(x0(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,i=this.frameCycles-this.paddleLastTriggered;return i=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x>1&3,a==(t-1&3)?t>0&&t--:a==(t+1&3)&&t>1],console.log("track",t/2)):this.track_data=null,this.track=t;break;case 8:this.motor=!1;break;case 9:this.motor=!0;break;case 10:break;case 11:break;case 15:this.read_mode=!1;case 12:if(this.read_mode)return this.read_latch();break;case 14:this.read_mode=!0;case 13:return x>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(x),this.write_protect?128:0}return this.emu.floatbus()}},G=[150,151,154,155,157,158,159,166,167,171,172,173,174,175,178,179,180,181,182,183,185,186,187,188,189,190,191,203,205,206,207,211,214,215,217,218,219,220,221,222,223,229,230,231,233,234,235,236,237,238,239,242,243,244,245,246,247,249,250,251,252,253,254,255],m0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function g0(n,e,x,a,r,t,i){var f,g,C,u,m=new Uint8Array(258);for(u=0,f=0;f<14;f++)t[i++]=255;for(t[i++]=213,t[i++]=170,t[i++]=150,t[i++]=n>>1|170,t[i++]=n|170,g=n,t[i++]=e>>1|170,t[i++]=e|170,g^=e,t[i++]=x>>1|170,t[i++]=x|170,g^=x,t[i++]=g>>1|170,t[i++]=g|170,t[i++]=222,t[i++]=170,t[i++]=235,f=0;f<6;f++)t[i++]=255;for(t[i++]=213,t[i++]=170,t[i++]=173,f=0;f<256;f++)m[f]=a[f+r]&255;for(m[256]=0,m[257]=0,C=0,f=0;f<86;f++)u=(m[f]&1)<<1,u|=(m[f]&2)>>1,u|=(m[f+86]&1)<<3,u|=(m[f+86]&2)<<1,u|=(m[f+172]&1)<<5,u|=(m[f+172]&2)<<3,t[i++]=G[u^C],C=u;for(f=0;f<256;f++)u=m[f]>>2,t[i++]=G[u^C],C=u;t[i++]=G[u],t[i++]=222,t[i++]=170,t[i++]=235}function p0(n,e,x){for(var a=new Uint8Array(F),r=0,t=0;t<16;t++)g0(n,e,t,x,m0[t]<<8,a,r),r+=A0;for(;rx.endsWith(".lnk")?"merlin32":O(x)}newMachine(){return new P}getPresets(){return n0}getDefaultExtensions(){return[...super.getDefaultExtensions(),".lnk"]}readAddress(x){return this.machine.readConst(x)}getROMExtension(x){return x&&x.length==560*256?".dsk":".bin"}};U["apple2.mame"]=T;U.apple2=Z; -//# sourceMappingURL=apple2-3C4ZD4DD.js.map +//# sourceMappingURL=apple2-HVOUE76T.js.map diff --git a/gen/apple2-3C4ZD4DD.js.map b/gen/apple2-HVOUE76T.js.map similarity index 100% rename from gen/apple2-3C4ZD4DD.js.map rename to gen/apple2-HVOUE76T.js.map diff --git a/gen/arm32-U7EXMUEA.js b/gen/arm32-76TZ4DV5.js similarity index 99% rename from gen/arm32-U7EXMUEA.js rename to gen/arm32-76TZ4DV5.js index b4ec3608..fb75e5ee 100644 --- a/gen/arm32-U7EXMUEA.js +++ b/gen/arm32-76TZ4DV5.js @@ -1,4 +1,4 @@ -import{H as Rr,r as mr}from"./chunk-BDSSD4L3.js";import{E as or,K as Fr,T as N,W as T,X as hr,Z as fr,a as Q,aa as er,g as E}from"./chunk-6VYEJCUW.js";import{a as pr,b as nr}from"./chunk-KT7KMEQC.js";var gr=4026531840,Cr=223,wr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=gr|Cr|wr,a.spsr=a.spsr&~R|F&R):(R&gr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&Cr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:switch(a){case 0:p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:switch(a){case 0:p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,Ar=(r&3840)>>4,dr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=dr|Ar;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")")}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var Pr=r&16777216;Pr?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,H=(r&61440)>>12,Ir=(r&3840)>>8,m=r&255,br=r>>28&15,a=this.conds[br];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|H)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|H)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=H<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|H)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,yr=P?(d?16:0)|M:M<<1|(d?1:0),Sr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,yr,Sr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var Tr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,vr=0,X=67108864,z=256,kr=1e6,Mr=4e6,xr=3991793133,q=class extends mr{constructor(){super();this.cpuFrequency=Mr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(Mr/(256*60));this.defaultROMSize=I-vr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=vr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:xr&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,Tr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){switch(this.ioregs[i]=s,i){case 72:this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` +import{H as Rr,r as mr}from"./chunk-V66UDXZ2.js";import{E as or,K as Fr,T as N,W as T,X as hr,Z as fr,a as Q,aa as er,g as E}from"./chunk-6VYEJCUW.js";import{a as pr,b as nr}from"./chunk-KT7KMEQC.js";var gr=4026531840,Cr=223,wr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=gr|Cr|wr,a.spsr=a.spsr&~R|F&R):(R&gr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&Cr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:switch(a){case 0:p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:switch(a){case 0:p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,Ar=(r&3840)>>4,dr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=dr|Ar;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")")}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var Pr=r&16777216;Pr?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,H=(r&61440)>>12,Ir=(r&3840)>>8,m=r&255,br=r>>28&15,a=this.conds[br];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|H)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|H)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=H<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|H)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,yr=P?(d?16:0)|M:M<<1|(d?1:0),Sr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,yr,Sr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var Tr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,vr=0,X=67108864,z=256,kr=1e6,Mr=4e6,xr=3991793133,q=class extends mr{constructor(){super();this.cpuFrequency=Mr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(Mr/(256*60));this.defaultROMSize=I-vr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=vr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:xr&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,Tr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){switch(this.ioregs[i]=s,i){case 72:this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` `,e+=4,!(e>=D+I));c++);return u;case"CPU":var u="",p=s.c;let F={2:"Thumb",4:"ARM"},R={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var c=0;c<8;c++){let v=c+8;u+=Q("r"+c,5)+" "+E(p.gprs[c],8)+" ",u+=Q("r"+v,5)+" "+E(p.gprs[v],8)+Q(R[v]||"",3)+` `}return u+="Flags ",u+=p.cpsrN?" N":" -",u+=p.cpsrV?" V":" -",u+=p.cpsrF?" F":" -",u+=p.cpsrZ?" Z":" -",u+=p.cpsrC?" C":" -",u+=p.cpsrI?" I":" -",u+=` `,u+="MODE "+F[p.instructionWidth]+" "+Er[p.mode]+` @@ -6,4 +6,4 @@ import{H as Rr,r as mr}from"./chunk-BDSSD4L3.js";import{E as or,K as Fr,T as N,W `,u+="cycl "+p.cycles+` `,u;case"FPU":for(var u="",p=s.c,c=0;c<16;c++)u+=Q("s"+c,5)+" "+E(p.ifprs[c],8)+" "+p.sfprs[c].toPrecision(6),c&1&&(u+=Q("d"+(c>>1),5)+" "+p.dfprs[c>>1].toPrecision(12)),u+=` `;return u}}saveState(){var i=super.saveState();return i.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},i}loadState(i){super.loadState(i),this.serialIn=i.serial.sin,this.serialOut=i.serial.sout}},Er={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var Dr=[{id:"vidfill.c",name:"Video Memory Fill"}],tr=class extends Rr{getToolForFilename(t){return t=t.toLowerCase(),t.endsWith(".vasm")?"vasmarm":t.endsWith(".armips")?"armips":(t.endsWith(".c")||t.endsWith(".s"),"armtcc")}getPresets(){return Dr}getDefaultExtensions(){return[".c",".armips",".vasm"]}},sr=class extends tr{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:1048576,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await or("./lib/capstone-arm.min.js"),this.capstone_arm=new cs.Capstone(cs.ARCH_ARM,cs.MODE_ARM),this.capstone_thumb=new cs.Capstone(cs.ARCH_ARM,cs.MODE_THUMB)}newMachine(){return new q}readAddress(i){return this.machine.read(i)}getPlatformName(){return"ARM7"}getDebugTree(){return nr(pr({},this.machine.cpu.getDebugTree()),{dwarf:this.debugSymbols.debuginfo})}disassemble(i,s){for(var e=this.machine.cpu.isThumb(),a=e?this.capstone_thumb:this.capstone_arm,c=[],u=0;u<4;u++)c[u]=s(i+u);var p=a.disasm(c,i,4),F=p&&p[0];return F?{nbytes:F.size,line:F.mnemonic+" "+F.op_str,isaddr:F.address>0}:{nbytes:4,line:"???",isaddr:!1}}};Fr.arm32=sr;export{tr as BaseARMMachinePlatform}; -//# sourceMappingURL=arm32-U7EXMUEA.js.map +//# sourceMappingURL=arm32-76TZ4DV5.js.map diff --git a/gen/arm32-U7EXMUEA.js.map b/gen/arm32-76TZ4DV5.js.map similarity index 100% rename from gen/arm32-U7EXMUEA.js.map rename to gen/arm32-76TZ4DV5.js.map diff --git a/gen/astrocade-ITZHTM4Y.js b/gen/astrocade-NBGSY4P4.js similarity index 99% rename from gen/astrocade-ITZHTM4Y.js rename to gen/astrocade-NBGSY4P4.js index 1c4c9e26..d04c6202 100644 --- a/gen/astrocade-ITZHTM4Y.js +++ b/gen/astrocade-NBGSY4P4.js @@ -1,4 +1,4 @@ -import{J as m0,c as B0,d as g0,e as X0,k as C0,r as l0}from"./chunk-BDSSD4L3.js";import{$ as q,K as k,W as A,X as c0,Z as o0,aa as N,g as o,l as d0,m as a0,t as f0}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var p0=o0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),h0=2,w0=function(f){var d,t,i,D,g,U,F0,W;let R=f?320:160,K=f?204:102,A0=R>>2,E0=f?16383:4095,N0=256,I0=4293848814,P0=4278190080;var j=new Uint8Array(32),B=0,E=0,X=!1,u=0,Y=0,b=0,M=0,p=0,w=K,H=new Uint32Array(8),y=new Uint8Array(8),J=0,T=new Uint8Array(f?262:131),C=new Uint8Array(4),l=0,Q=0,v=0,c=new Uint8Array(8),S=0;function V(e,x){t[e]=x,v++,T[(e&E0)/A0|0]=1}function u0(e,x){for(var s=e*4+3,n=0;n<4;n++){var m=e%A0>=(Y&63)?0:4;F0[s--]=H[m+(x&3)],x>>=2}}function r0(e){for(var x=e*R/4,s=0;s>=4);for(var n=0;n<4;n++){var m=x&1?E>>2&3:E&3;s|=m<>=1}x=s,X=!X}if(B&4){if(l&4){var a=2*(~l&3);x=(C[3]>>a&3)<<6|(C[2]>>a&3)<<4|(C[1]>>a&3)<<2|(C[0]>>a&3)<<0}else C[l&3]=x;l++}else{var a=(B&3)<<1,s=x>>a|u;u=x<<8-a&255,x=s}if(B&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),B&48){var F=t[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),B&16&&(x|=F),B&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function Z(e,x){y[e&7]=x&255,H[e&7]=e0[x&255],O()}function Y0(){var e=Y>>6}function O(){J=K}function b0(){let e=c[0]|c[1]<<8,x=c[2]&63,s=c[3],n=S&255|c[4]<<8,m=c[5],a=c[6]+1,F,r=0,h=0;r=0,(x&2)===0&&(r=1);function s0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function n0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let L;for(F=m;F>=0;){let z,_;z=(x&1)===0?e:n,F===0&&(x&8)!==0?_=0:_=i.read(e),(x&1)===0?s0():n0(),z=(x&1)!==0?e:n,V(z,_),(x&1)===0?n0():s0(),h+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(d.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),d.interrupt(p)),e0?(T[e]=0,r0(e),J--):T[e]&&(T[e]=0,r0(e))},this.init=(e,x,s,n,m)=>{d=x,t=s,j=n,W=m,f?i={read:N([[16384,32767,16383,function(F){return t[F]}],[53248,57343,4095,function(F){return t[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,i0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new d0().decode(a0(atob(Q0))),8192),i={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return v++,t[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,i0]])}),D={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=j[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){c[F&7]=r,F==114&&(S=0),F==116&&(S=S+c[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:Z(F,r);break;case 9:Y=r,Y0(),O();break;case 10:w=f?r:r>>1,O();break;case 11:var h=d.saveState();Z((h.BC>>8)-1,i.read(h.HL));break;case 12:B=r,u=0,l=0,X=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=f?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var h=d.saveState();W.setACRegister((h.BC>>8)-1,i.read(h.HL));break;case 25:E=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(i),e.connectCPUIOBus(D),this.membus=i,this.iobus=D;for(var a=0;a<8;a++)Z(a,a)},this.resetWaitStates=function(e){var x=e{d.loadState(e.c),t.set(e.ram),H.set(e.palette),y.set(e.palinds),B=e.magicop,E=e.xpand,X=e.xplower,u=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,l=e.rotcount,C.set(e.rotdata),Q=e.intst,j.set(e.inputs),c.set(e.patboard),S=e.patdest,O()},this.saveState=()=>({c:d.saveState(),ram:t.slice(0),inputs:j.slice(0),palette:H.slice(0),palinds:y.slice(0),magicop:B,xpand:E,xplower:X,shift2:u,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:l,rotdata:C.slice(0),intst:Q,patboard:c.slice(0),patdest:S}),this.reset=()=>{B=E=b=M=p=u=Y=0,w=K,X=!1},this.toLongString=e=>{var x="";x+=` +import{J as m0,c as B0,d as g0,e as X0,k as C0,r as l0}from"./chunk-V66UDXZ2.js";import{$ as q,K as k,W as A,X as c0,Z as o0,aa as N,g as o,l as d0,m as a0,t as f0}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var p0=o0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),h0=2,w0=function(f){var d,t,i,D,g,U,F0,W;let R=f?320:160,K=f?204:102,A0=R>>2,E0=f?16383:4095,N0=256,I0=4293848814,P0=4278190080;var j=new Uint8Array(32),B=0,E=0,X=!1,u=0,Y=0,b=0,M=0,p=0,w=K,H=new Uint32Array(8),y=new Uint8Array(8),J=0,T=new Uint8Array(f?262:131),C=new Uint8Array(4),l=0,Q=0,v=0,c=new Uint8Array(8),S=0;function V(e,x){t[e]=x,v++,T[(e&E0)/A0|0]=1}function u0(e,x){for(var s=e*4+3,n=0;n<4;n++){var m=e%A0>=(Y&63)?0:4;F0[s--]=H[m+(x&3)],x>>=2}}function r0(e){for(var x=e*R/4,s=0;s>=4);for(var n=0;n<4;n++){var m=x&1?E>>2&3:E&3;s|=m<>=1}x=s,X=!X}if(B&4){if(l&4){var a=2*(~l&3);x=(C[3]>>a&3)<<6|(C[2]>>a&3)<<4|(C[1]>>a&3)<<2|(C[0]>>a&3)<<0}else C[l&3]=x;l++}else{var a=(B&3)<<1,s=x>>a|u;u=x<<8-a&255,x=s}if(B&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),B&48){var F=t[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),B&16&&(x|=F),B&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function Z(e,x){y[e&7]=x&255,H[e&7]=e0[x&255],O()}function Y0(){var e=Y>>6}function O(){J=K}function b0(){let e=c[0]|c[1]<<8,x=c[2]&63,s=c[3],n=S&255|c[4]<<8,m=c[5],a=c[6]+1,F,r=0,h=0;r=0,(x&2)===0&&(r=1);function s0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function n0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let L;for(F=m;F>=0;){let z,_;z=(x&1)===0?e:n,F===0&&(x&8)!==0?_=0:_=i.read(e),(x&1)===0?s0():n0(),z=(x&1)!==0?e:n,V(z,_),(x&1)===0?n0():s0(),h+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(d.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),d.interrupt(p)),e0?(T[e]=0,r0(e),J--):T[e]&&(T[e]=0,r0(e))},this.init=(e,x,s,n,m)=>{d=x,t=s,j=n,W=m,f?i={read:N([[16384,32767,16383,function(F){return t[F]}],[53248,57343,4095,function(F){return t[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,i0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new d0().decode(a0(atob(Q0))),8192),i={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return v++,t[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,i0]])}),D={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=j[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){c[F&7]=r,F==114&&(S=0),F==116&&(S=S+c[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:Z(F,r);break;case 9:Y=r,Y0(),O();break;case 10:w=f?r:r>>1,O();break;case 11:var h=d.saveState();Z((h.BC>>8)-1,i.read(h.HL));break;case 12:B=r,u=0,l=0,X=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=f?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var h=d.saveState();W.setACRegister((h.BC>>8)-1,i.read(h.HL));break;case 25:E=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(i),e.connectCPUIOBus(D),this.membus=i,this.iobus=D;for(var a=0;a<8;a++)Z(a,a)},this.resetWaitStates=function(e){var x=e{d.loadState(e.c),t.set(e.ram),H.set(e.palette),y.set(e.palinds),B=e.magicop,E=e.xpand,X=e.xplower,u=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,l=e.rotcount,C.set(e.rotdata),Q=e.intst,j.set(e.inputs),c.set(e.patboard),S=e.patdest,O()},this.saveState=()=>({c:d.saveState(),ram:t.slice(0),inputs:j.slice(0),palette:H.slice(0),palinds:y.slice(0),magicop:B,xpand:E,xplower:X,shift2:u,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:l,rotdata:C.slice(0),intst:Q,patboard:c.slice(0),patdest:S}),this.reset=()=>{B=E=b=M=p=u=Y=0,w=K,X=!1},this.toLongString=e=>{var x="";x+=` INLIN: `+e.inlin,x+=` VERBL: `+e.verbl,x+=` MAGICOP: $`+o(e.magicop),x+=` @@ -11,4 +11,4 @@ XPLOWER: `+e.xplower,x+=` INTST: $`+o(e.intst),x+=` Palette: `;for(var s=0;s<8;s++)x+=o(y[s]);return x+=` `,x},this.connectVideo=function(e){F0=e},this.loadROM=function(e){g=e},this.loadBIOS=function(e){U=e},this.getVisiblePixelWords=function(){return w*R}},P=class extends l0{constructor(t){super();this.cpuFrequency=1789e3;this.numTotalScanlines=262;this.sampleRate=60*262*h0;this.arcade=t,this.cpu=new B0,this.psg=new $(new g0),this.audioadapter=new C0(this.psg.psg,h0,this.sampleRate),this.handler=c0(this.inputs,p0),this.defaultROMSize=t?45056:8192,this.ram=new Uint8Array(t?20480:4096),this.numVisibleScanlines=t?204:102,this.canvasWidth=t?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new w0(t),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg),t&&(this.inputs[16]=255,this.inputs[17]=255,this.inputs[18]=0,this.inputs[19]=8)}read(t){return this.m.membus.read(t)}write(t,i){this.m.membus.write(t,i)}connectVideo(t){super.connectVideo(t),this.frontbuffer=t,this.backbuffer=new Uint32Array(t.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates(0)}postFrame(){var t=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,t),0),this.frontbuffer.fill(0,t)}setPaddleInput(t,i){switch(t){case 0:this.inputs[28]=i&255;break;case 1:this.inputs[29]=i&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var t=this.scanline;this.m.drawScanline(t)}advanceCPU(){var t=super.advanceCPU(),i=this.m.resetWaitStates(this.scanline);return i&&(t+=i,this.probe.logClocks(i)),t}loadROM(t){super.loadROM(t),this.m.loadROM(this.rom),this.reset()}loadBIOS(t){this.m.loadBIOS(q(t,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(t){this.m.loadState(t)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(t,i){switch(t){case"Astro":return this.m.toLongString(i)}}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}getVideoParams(){return this.arcade?{width:320,height:204,rotate:180}:{width:160,height:102}}},$=class extends X0{setACRegister(d,t){switch(d&=7,t&=255,d){case 0:this.psg.setClock(1789e3*16/(t+1)),this.psg.writeRegisterAY(7,248);break;case 1:case 2:case 3:var i=(d-1)*2,D=t*2+1;this.psg.writeRegisterAY(i,D&255),this.psg.writeRegisterAY(i+1,D>>8&255);break;case 5:this.psg.writeRegisterAY(10,t&15);break;case 6:this.psg.writeRegisterAY(8,t&15),this.psg.writeRegisterAY(9,t>>4&15);break}}},e0=[0,2368548,4737096,7171437,9539985,11974326,14342874,16777215,2425019,4784352,7213567,9582079,12016383,14384895,16753663,16762879,4784304,7143637,9568761,11937279,14306047,16740095,16749311,16758783,6946975,9306307,11731175,14096639,16465151,16736767,16745983,16755199,8847495,11206827,13631696,15994612,16724735,16733951,16743423,16752639,10420330,12779662,15138995,16713687,16723195,16732415,16741631,16751103,11534409,13959277,16318610,16713142,16722394,16731647,16741119,16750335,12255269,14680137,16711790,16713362,16722615,16732123,16741375,16750847,12517376,14876708,16711752,16714605,16724113,16733366,16742874,16752127,12255232,14680064,16711715,16716871,16726380,16735632,16745141,16754393,11534336,13959168,16318464,16720164,16729416,16738924,16748177,16757685,10420224,12779520,15141888,16723971,16733479,16742731,16752240,16761492,8847360,11206656,13639168,16007680,16738058,16747310,16756563,16766071,6946816,9309440,11743488,14112256,16480768,16752151,16761659,16770911,4784128,7151872,9585920,11954688,14323200,16757509,16766761,16776270,2429184,4797696,7232e3,9600512,12034816,14403328,16771870,16777027,9472,2377984,4746496,7180800,9549312,11983616,14352155,16777023,14080,23296,2326528,4695040,7129344,9497856,11927326,14286659,18176,27648,36864,2405376,4774144,7142661,9568041,11927374,21760,30976,40192,246272,2614784,4980503,7405371,9764703,24320,33536,43008,52224,716810,3079982,5504851,7864183,25856,35328,44544,53763,63271,1572683,3932016,6291348,26624,35840,45312,54564,63816,393068,2752401,5177269,26112,35584,44835,54343,63596,65424,2031541,4456409,24832,34084,43592,52845,62353,65462,1834970,4194302,22565,31817,41326,50578,60087,65499,2031615,4456447,19273,28781,38034,47542,56794,393215,2752511,5177343,15466,24718,34227,43479,52987,1569535,3932159,6291455,10887,20395,29648,38900,703743,3072255,5505023,7864319,6047,15299,24807,230655,2599167,4967935,7401983,9764863,688,10197,19449,2388223,4756735,7125503,9559551,11927551,187,5088,2308095,4676607,7110911,9479423,11913727,14282239];for(I=0;I<256;I++)D0=e0[I],e0[I]=f0(D0)|4278190080;var D0,I;var Q0="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";var S0=[{id:"01-helloworlds.asm",name:"Hello World (ASM)"},{id:"02-telephone.asm",name:"Telephone (ASM)"},{id:"03-horcbpal.asm",name:"Paddle Demo (ASM)"},{id:"hello.c",name:"Hello Graphics"},{id:"lines.c",name:"Lines"},{id:"sprites.c",name:"Sprites"},{id:"vsync.c",name:"Sprites w/ VSYNC"},{id:"fastsprites.c",name:"Fast Sprites"},{id:"music.c",name:"Music"},{id:"rotate.c",name:"Rotate Op"},{id:"rainbow.c",name:"Rainbow"},{id:"cosmic.c",name:"Cosmic Impalas Game"},{id:"racing.c",name:"Pseudo 3-D Racing Game"}],M0=[{id:"bios.c",name:"BIOS"}],V0=[{id:"hello.c",name:"Hello Graphics"}],G=class extends m0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Screen RAM",start:16384,size:4096,type:"ram"},{name:"BIOS Variables",start:20430,size:50,type:"ram"}]}}}newMachine(){return new P(!1)}getPresets(){return S0}readAddress(t){return this.machine.read(t)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},x0=class extends G{getPresets(){return M0}loadROM(d,t){this.machine.loadBIOS(t)}},t0=class extends G{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:16384,type:"rom"},{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"},{name:"ROM",start:32768,size:16384,type:"rom"}]}}}newMachine(){return new P(!0)}getPresets(){return V0}};k.astrocade=G;k["astrocade-bios"]=x0;k["astrocade-arcade"]=t0; -//# sourceMappingURL=astrocade-ITZHTM4Y.js.map +//# sourceMappingURL=astrocade-NBGSY4P4.js.map diff --git a/gen/astrocade-ITZHTM4Y.js.map b/gen/astrocade-NBGSY4P4.js.map similarity index 100% rename from gen/astrocade-ITZHTM4Y.js.map rename to gen/astrocade-NBGSY4P4.js.map diff --git a/gen/atari7800-T6BNM2VI.js b/gen/atari7800-5BAGYBIM.js similarity index 98% rename from gen/atari7800-T6BNM2VI.js rename to gen/atari7800-5BAGYBIM.js index 790d15cb..c9344e1e 100644 --- a/gen/atari7800-T6BNM2VI.js +++ b/gen/atari7800-5BAGYBIM.js @@ -1,7 +1,7 @@ -import{I as j,h as z,k as Y,m as K,q as V,x as $}from"./chunk-BDSSD4L3.js";import{$ as N,K as O,V as R,W as o,X as E,Z as W,aa as _,ea as H,g as S}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var b=0,U=2,v=8,Z=W([[o.A,v+0,128],[o.B,v+1,128],[o.GP_A,v+0,128],[o.GP_B,v+1,128],[o.SELECT,U,-2],[o.START,U,-1],[o.UP,b,-16],[o.DOWN,b,-32],[o.LEFT,b,-64],[o.RIGHT,b,-128],[o.P2_A,v+2,128],[o.P2_B,v+3,128],[o.P2_UP,b,-1],[o.P2_DOWN,b,-2],[o.P2_LEFT,b,-4],[o.P2_RIGHT,b,-8]]);var M=263,G=242,C=451,tt=28,et=16,rt=24,q=2,X=M*60*q,I=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t}saveState(){return{regs:this.regs.slice(0)}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t])}static stateToLongString(r){let t="";return t+=R(r.regs,0,32),t}},L=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.writemode=0;this.indirect=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t,r==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8,indirect:this.indirect,writemode:this.writemode}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t]|0);this.offset=r.offset|0,this.dll=r.dll|0,this.dlstart=r.dlstart|0,this.dli=!!r.dli,this.h16=!!r.h16,this.h8=!!r.h8,this.indirect=!!r.indirect,this.writemode=r.writemode|0}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(r){r?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=-129}readDLLEntry(r){if(this.dll>=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let m=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(m+(c+0&511)),d=r.read(m+(c+1&511));if(d==0||m>=16384)break;let l=r.read(m+(c+2&511)),p=r.read(m+(c+3&511)),g=!1;if((d&31)==0){var e=p>>5,n=32-(p&31),i=r.read(m+(c+4&511));g=(d&32)!=0,c+=5,this.cycles+=10,this.writemode=d&128}else{var i=p,e=d>>5,n=32-(d&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let u=this.regs[28],k=(u&3)+(this.writemode?4:0),A=(u&4)!=0,w=g&&(u&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let m=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(m+(c+0&511)),d=r.read(m+(c+1&511));if(d==0||m>=16384)break;let l=r.read(m+(c+2&511)),p=r.read(m+(c+3&511)),g=!1;if((d&31)==0){var e=p>>5,n=32-(p&31),i=r.read(m+(c+4&511));g=(d&32)!=0,c+=5,this.cycles+=10,this.writemode=d&128}else{var i=p,e=d>>5,n=32-(d&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let u=this.regs[28],k=(u&3)+(this.writemode?4:0),A=(u&4)!=0,w=g&&(u&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,127,t=>(this.xtracyc++,this.readPIA(t))],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=_([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,127,(t,e)=>{this.xtracyc++,this.writePIA(t,e)}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.dmaBus=this.probeDMABus(this),this.handler=E(this.inputs,Z),this.pokey1=new z,this.audioadapter=new Y(this.pokey1,q,X)}readConst(t){let e=this.probe;this.probe=null;let n=this.read(t);return this.probe=e,n}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}readPIA(t){switch(t){case 0:case 2:return this.inputs[t];case 1:case 3:return this.regs6532[t];case 4:return this.getPIATimerValue();default:return 0}}writePIA(t,e){switch(t){case 0:case 1:case 2:case 3:this.regs6532[t]=e;return;case 20:this.setPIATimer(e,0);return;case 21:this.setPIATimer(e,3);return;case 22:this.setPIATimer(e,6);return;case 23:this.setPIATimer(e,10);return;case 24:this.setPIATimer(e,6);return}}setPIATimer(t,e){this.piatimer=t+1<0?t>>this.timerinterval:t&255}advanceCPU(){var t=super.advanceCPU();return this.tickPIATimer(t),this.xtracyc&&(t+=this.xtracyc,this.tickClocks(this.xtracyc),this.xtracyc=0),t}tickClocks(t){this.probe.logClocks(t),this.tickPIATimer(t)}tickPIATimer(t){this.piatimer=Math.max(-256,this.piatimer-t)}advanceFrame(t){var e=this.pixels,n=0,i,s=0,m=0,c=0;this.lastFrameCycles=-1,this.probe.logNewFrame();for(var x=0;x>2),s+=p,e){let u=(this.maria.regs[28]&128)!=0?15:255;for(var l=0;l<320;l++)e[n++]=J[this.maria.pixels[l]&u]}}for((d||x==M-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());s>2),s=C;break}if(t&&t()){t=null,x=999,this.lastFrameCycles=s;break}s+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),s-=C,m+=s,this.probe.logNewScanline()}return c}getRasterX(){return(this.lastFrameCycles+C)%C}getRasterY(){return this.scanline}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=N(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[b]=255,this.inputs[U]=11,this.setPIATimer(0,0)}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.piatimer=t.pia.timer,this.timerinterval=t.pia.interval,this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0),pia:{timer:this.piatimer,interval:this.timerinterval}}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return I.stateToLongString(e.tia);case"MARIA":return L.stateToLongString(e.maria)+` Scanline: `+this.scanline}}getDebugDisplayLists(){let t={},e=this.maria.getDLLStart(),n=0;for(;n<240;){let i=this.readConst(e),s=i&15,m=(i&64)!=0,c=(i&32)!=0,x=(this.readConst(e+1)<<8)+this.readConst(e+2);e=e+3&65535;let d=(this.readConst(e)&128)!=0,l="DL $"+S(x,4)+" "+n+"-"+(n+s);m&&(l+=" H16"),c&&(l+=" H8"),d&&(l+=" DLI"),t[l]={$$:this._readDebugDisplayList(x)},n+=s+1}return t}_readDebugDisplayList(t){return()=>this.readDebugDisplayList(t)}readDebugDisplayList(t){let e=[],n=t&65280,i=t&255;do{let x=this.maria.regs[28],d=this.readConst(n+(i+0&511)),l=this.readConst(n+(i+1&511));if(l==0)break;let p=this.readConst(n+(i+2&511)),g=this.readConst(n+(i+3&511)),y=!1,u="",k,A=(x&3)+(l&128?4:0);if((l&31)==0){var s=g>>5,m=32-(g&31),c=this.readConst(n+(i+4&511));y=(l&32)!=0,k=l&128,i+=5}else{var c=g,s=l>>5,m=32-(l&31);i+=4}u+="X="+c+" W="+m+" P="+s,k&&(u+=" WM=1"),y&&(u+=" CHR=$"+S(this.maria.regs[20]+this.maria.offset&255)+"xx");let w=d+((p+(y?0:this.maria.offset)&255)<<8);u=" $"+S(w,4)+" "+u,u=["160A","?","320D","320A","160B","?","320B","320C"][A]+" "+u,e.push(u)}while(i<512);return e}},J=new Uint32Array(256);for(D=0;D<256;D++)J[D]=H(D);var D;var it=[{id:"sprites.dasm",name:"Sprites (ASM)",category:"Assembler"},{id:"wsync.c",name:"WSYNC",category:"CC65"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"},{id:"test_conio.c78",name:"Conio Test",category:"cc7800"},{id:"example_small_sprites.c78",name:"Small Sprites"},{id:"example_vertical_scrolling.c78",name:"Vertical Scrolling"}],F=class extends j{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49146,type:"rom"},{name:"CPU Vectors",start:65530,size:6,type:"rom"}]}}}newMachine(){return new T}getPresets(){return it}getDefaultExtensions(){return[...super.getDefaultExtensions(),".cc7800"]}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayLists(),t}getToolForFilename(t){return t.endsWith(".cc7800")||t.endsWith(".c78")?"cc7800":$(t)}};O.atari7800=F; -//# sourceMappingURL=atari7800-T6BNM2VI.js.map +//# sourceMappingURL=atari7800-5BAGYBIM.js.map diff --git a/gen/atari7800-T6BNM2VI.js.map b/gen/atari7800-5BAGYBIM.js.map similarity index 100% rename from gen/atari7800-T6BNM2VI.js.map rename to gen/atari7800-5BAGYBIM.js.map diff --git a/gen/atari8-DU7XPQJE.js b/gen/atari8-6EBS324Z.js similarity index 99% rename from gen/atari8-DU7XPQJE.js rename to gen/atari8-6EBS324Z.js index ca4e9868..0a53da88 100644 --- a/gen/atari8-DU7XPQJE.js +++ b/gen/atari8-6EBS324Z.js @@ -1,4 +1,4 @@ -import{a as gt}from"./chunk-NYNEYYCH.js";import{A as xt,I as ut,g as ot,k as ct,m as lt,r as ft,x as dt}from"./chunk-BDSSD4L3.js";import{K as T,V as A,W as i,X as at,Z as nt,a as C,aa as M,ea as ht,g as f,r as _}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var Ut=[0,25,17,9],Yt=[0,89,97,105],S=0,Bt=1,G=2,W=3,Ht=4,Qt=5,jt=7,zt=9,N=10,Xt=11,qt=12,Gt=13,mt=14,Wt=15,F=15;var Zt=13,$t=106,Jt=105,Z=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],te=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],ee=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],pt=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],k=class{constructor(e,t){this.regs=new Uint8Array(16);this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[mt]=0,this.regs[F]=127,this.regs[qt]=0,this.regs[Gt]=255,this.setReg(S,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return _(0,{},this)}loadState(e){_(0,this,e),this.setReg(S,e.regs[S])}static stateToLongString(e){let t="";return t+="H: "+C(e.h,3)+" V: "+C(e.v,3)+` +import{a as gt}from"./chunk-ELQXSR5S.js";import{A as xt,I as ut,g as ot,k as ct,m as lt,r as ft,x as dt}from"./chunk-V66UDXZ2.js";import{K as T,V as A,W as i,X as at,Z as nt,a as C,aa as M,ea as ht,g as f,r as _}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var Ut=[0,25,17,9],Yt=[0,89,97,105],S=0,Bt=1,G=2,W=3,Ht=4,Qt=5,jt=7,zt=9,N=10,Xt=11,qt=12,Gt=13,mt=14,Wt=15,F=15;var Zt=13,$t=106,Jt=105,Z=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],te=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],ee=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],pt=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],k=class{constructor(e,t){this.regs=new Uint8Array(16);this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[mt]=0,this.regs[F]=127,this.regs[qt]=0,this.regs[Gt]=255,this.setReg(S,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return _(0,{},this)}loadState(e){_(0,this,e),this.setReg(S,e.regs[S])}static stateToLongString(e){let t="";return t+="H: "+C(e.h,3)+" V: "+C(e.v,3)+` `,t+="DLIOp: "+f(e.dliop,2)+" Lines: "+e.yofs+"/"+e.linesleft,t+=" DMA "+(e.dma_enabled?"ON ":"off"),e.dma_enabled&&(t+=" idx "+e.dmaidx+" clk "+f(e.dmaclock)),t+=` `,t+="Addr: "+f(e.scanaddr,4)+` `,t+=A(e.regs,0,16).replace("$00","Regs"),t}setReg(e,t){switch(e){case N:this.regs[N]=255;return;case Wt:this.regs[F]=31;return}this.regs[e]=t}readReg(e){switch(e){case F:return this.regs[e];case Xt:return this.v>>1;default:return 255}}processDLIEntry(){if(this.mode==0)this.linesleft=(this.dliop>>4&7)+1,this.dmaclock=0;else{this.linesleft=Z[this.mode],this.period=te[this.mode],this.jmp?(this.regs[G]=this.dlarg_lo,this.regs[W]=this.dlarg_hi,this.mode=this.period=0,this.dliop&64&&(this.linesleft=1,this.dma_enabled=!1),this.dmaclock=0):this.lms&&(this.scanaddr=this.dlarg_lo+(this.dlarg_hi<<8)),this.startaddr=this.scanaddr;let e=this.regs[S]&3,t=this.dliop&16?(this.regs[Ht]&15)>>1:0;this.dliop&16&&e<3&&e++,this.left=Ut[e]+t,this.right=Yt[e]+t;let s=this.regs[Qt]&15;this.dliop&32^this.in_vscroll&&(this.in_vscroll?this.linesleft=s+1:(this.linesleft-=s,this.yofs+=s),this.linesleft&=15,this.in_vscroll^=32)}}nextLine(){this.linesleft>0&&(this.linesleft--,this.yofs++,this.isfirstline=!1,this.mode>=8&&this.linesleft&&(this.scanaddr=this.startaddr))}triggerNMI(e){this.regs[F]=e|31,this.regs[mt]&e&&this.nmi()}getDlistAddr(){return this.regs[G]+(this.regs[W]<<8)}nextInsn(){let e=this.getDlistAddr(),t=this.read(e);return e=e+1&1023|e&-1024,this.regs[G]=e&255,this.regs[W]=e>>8,t}nextScreen(){let e=this.read(this.scanaddr);return this.incScanAddr(),e}incScanAddr(){this.scanaddr=this.scanaddr+1&4095|this.scanaddr&-4096}dlDMAEnabled(){return this.regs[S]&32}isVisibleScanline(){return this.v>=8&&this.v<248}isPlayfieldDMAEnabled(){return this.dma_enabled&&!this.linesleft}isPlayerDMAEnabled(){return this.regs[S]&8}isMissileDMAEnabled(){return this.regs[S]&12}isWSYNC(){return this.regs[N]!=0}clockPulse(){let e=this.isWSYNC();if(!this.isVisibleScanline())this.doVBlank();else{switch(this.h){case 0:this.isMissileDMAEnabled()&&(this.doPlayerMissileDMA(3),e=!0);break;case 1:if(this.isPlayfieldDMAEnabled()){let t=this.nextInsn();this.jmp=(t&-65)==1,this.lms=(t&64)!=0&&(t&15)!=0,this.mode=t&15,this.dliop=t,this.yofs=0,this.isfirstline=!0,e=!0}break;case 2:case 3:case 4:case 5:this.isPlayerDMAEnabled()&&(this.doPlayerMissileDMA(this.h+2),e=!0);break;case 6:case 7:this.isPlayfieldDMAEnabled()&&this.isfirstline&&(this.jmp||this.lms)&&(this.h==6&&(this.dlarg_lo=this.nextInsn()),this.h==7&&(this.dlarg_hi=this.nextInsn()),e=!0);break;case 8:this.isfirstline&&this.processDLIEntry(),this.dliop&128&&this.linesleft==1&&this.triggerNMI(128);break;case 9:break;case 111:this.dma_enabled&&this.nextLine(),++this.v;break}if(this.output=0,this.mode>=2&&this.period){let t=this.h<=Jt;this.dmaclock=this.dmaclock<<1&511,this.dmaclock&1<=8&&this.incScanAddr(),e=t),this.output=this.h>=this.left+3&&this.h<=this.right+2?4:0}}return(this.h$t)&&(this.output=2),this.incHorizCounter(),!e&&this.dramrefresh&&(this.read(0),this.dramrefresh=!1,e=!0),e}incHorizCounter(){switch(this.h){case 25:case 29:case 33:case 37:case 41:case 45:case 49:case 53:case 57:this.dramrefresh=!0;break;case 102:this.regs[N]=0;break;case 113:this.h=0;return}++this.h}doVBlank(){this.linesleft=this.mode=this.period=0,this.h==111&&this.v++,this.v==248&&this.h==0&&this.triggerNMI(64),this.v==262&&this.h==112&&(this.v=0),this.v==7&&this.h==113&&(this.dma_enabled=this.dlDMAEnabled()!=0),this.output=2,this.dmaclock=0}doPlayerMissileDMA(e){let t=this.regs[S]&16,s=this.regs[jt]<<8;t?(s&=63488,s|=e<<8,s|=this.v&255):(s&=64512,s|=e<<7,s|=this.v>>1),this.read(s)}readBitmapData(){let e=this.mode;if(e<8){let t=this.ch,s=this.yofs>>ee[this.mode],n=s&7,a=this.regs[zt];(e&14)==6?(t&=63,a&=254):(t&=127,a&=252);let h=(t<<3)+(a<<8);if((e&14)==2){let l=this.regs[Bt],o=e==3&&(t&96)==96;l&4?this.pfbyte=this.read(h+(n^7)):this.pfbyte=this.read(h+n),o&&s<2&&(this.pfbyte=0),!o&&s>7&&(this.pfbyte=0),this.ch&128&&(l&1&&(this.pfbyte=0),l&2&&(this.pfbyte^=255))}else this.pfbyte=this.read(h+n)}else this.pfbyte=this.nextScreen()}shiftout(){if(this.output==4)switch(this.mode){case 2:case 3:case 15:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?8:6}case 6:case 7:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?(this.ch>>6)+4:0}case 9:case 11:case 12:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?4:0}case 4:case 5:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,this.ch&128?[0,4,5,7][e]:[0,4,5,6][e]}case 8:case 10:case 13:case 14:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,[0,4,5,6][e]}}return this.output}};var se=0;var ie=8,re=12,bt=13,_t=17,y=18,m=22,ae=23,ne=24,he=25,O=26,U=27,oe=28,yt=29,ce=30,le=31,fe=0,de=4,xe=8,Y=12,St=16,$=31,Et=-9,B=[0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7],ue=[y+0,y+1,y+2,y+3,m+0,m+1,m+2,m+3,O,O,O,O,m+0,m+1,m+2,m+3],K=class{constructor(){this.regs=new Uint8Array(32);this.readregs=new Uint8Array(32);this.shiftregs=new Uint32Array(8);this.count=0;this.an=0;this.rgb=0;this.pmcol=0;this.gtiacol=0;this.gtiacol2=0;this.hbias=Et;this.pmDebugMask=-1}reset(){this.regs.fill(0),this.readregs.fill(0),this.readregs[20]=15,this.readregs.fill(15,21),this.count=0}saveState(){return _(0,{},this)}loadState(e){_(0,this,e)}setReg(e,t){switch(e){case y:case y+1:case y+2:case y+3:case m:case m+1:case m+2:case m+3:case O:t&=254;break;case ce:this.readregs.fill(0,0,16);return}this.regs[e]=t}readReg(e){switch(e){case $:return this.readregs[e]&~this.regs[le]}return this.readregs[e]}sync(){this.count=0}setBias(e){this.hbias=Et+e}updateGfx(e,t,s){switch(e){case 0:this.regs[yt]&1&&(this.regs[_t]=s);break;case 2:case 3:case 4:case 5:this.regs[yt]&2&&(!(t&1)||!(this.regs[oe]&1<>6){case 0:switch(this.an){case 0:return O;case 4:case 5:case 6:case 7:return m+this.an-4;case 8:return this.regs[ne]&240|this.regs[ae]&15|256}break;case 1:return this.regs[O]&240|this.gtiacol&15|256;case 2:return ue[this.gtiacol];case 3:return this.regs[O]&15|this.gtiacol<<4|256}return 256}anySpriteActive(){return this.shiftregs[0]||this.shiftregs[1]||this.shiftregs[2]||this.shiftregs[3]||this.shiftregs[4]||this.shiftregs[5]||this.shiftregs[6]||this.shiftregs[7]}processPlayerMissile(){if(!this.anySpriteActive()){this.evalTrigger(0),this.evalTrigger(1),this.evalTrigger(2),this.evalTrigger(3),this.evalTrigger(4),this.evalTrigger(5),this.evalTrigger(6),this.evalTrigger(7),this.pmcol=-1;return}if(this.an==2){this.shiftObject(0),this.shiftObject(1),this.shiftObject(2),this.shiftObject(3),this.shiftObject(4),this.shiftObject(5),this.shiftObject(6),this.shiftObject(7),this.pmcol=-1;return}let e=(this.regs[U]&15)<<4,t=B[(this.an&7)+8+e],s=this.an-4,n=-1,a=0;for(let h=0;h<4;h++)if(this.shiftObject(h)){s>=0&&(this.readregs[de+h]|=1<=0&&(this.readregs[fe+h]|=1<=0?this.getObjectColor(n):-1}shiftObject(e){let t=(this.shiftregs[e]&2147483648)!=0;return this.shiftregs[e]<<=1,this.evalTrigger(e),t}getObjectColor(e){return this.regs[U]&16&&e>=4?this.regs[he]:this.regs[y+(e&3)]}evalTrigger(e){this.regs[se+e]+this.hbias==this.count&&this.triggerObject(e)}triggerObject(e){let t,s;if(this.pmDebugMask&1<>n&3,s=(this.regs[_t]>>n&3)<<6}t&1?s=At(s):s<<=8,t==3?s=At(s):s<<=16,this.shiftregs[e]|=s}}clockPulse1(){this.processPlayerMissile(),this.clockPulse2(),this.count++}clockPulse2(){var e;if(this.pmcol>=0)e=this.pmcol;else{let t=this.getPlayfieldColor();e=t&256?t&255:this.regs[t]}this.rgb=Ot[e],this.gtiacol2=this.gtiacol2<<1|this.an>>3}clockPulse4(){this.gtiacol=this.gtiacol2&15}static stateToLongString(e){let t="";return t+=`X: ${C(e.count,3)} ANTIC: ${f(e.an,1)} PM: ${f(e.pmcol,3)} @@ -7,4 +7,4 @@ import{a as gt}from"./chunk-NYNEYYCH.js";import{A as xt,I as ut,g as ot,k as ct, `,t+=A(e.readregs,0,32),t}};function At(r){return r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,r|r<<1}var Ot=new Uint32Array(256);for(L=0;L<256;L++)Ot[L]=ht(L);var L;var c=0;var ge=2;var Rt=4;var It=6;var p=8,me=9,pe=10,be=11,_e=13,J=14,I=15;var ye=8,Ee=9,Ae=10,Se=13,D=14,H=15;var Tt=128,Dt=64,Oe=32,Pt=16,vt=8;var Re=1,Ct=28,Ie=114;var Mt=511,kt=131071,u=0,g=1,b=2,d=3,R=114,Te=15;var De=8;var tt,Q;function Pe(){tt=new Uint8Array(511),Q=new Uint8Array(16385);let r=511;for(let e=0;e<511;e++)r=(((r>>5^r)&1)<<8)+(r>>1),tt[e]=r;r=131071;for(let e=0;e<16385;e++)r=(((r>>5^r)&255)<<9)+(r>>8),Q[e]=r>>1}var V=class{constructor(e,t){this.irq=e;this.antic_xpos=t;this.regs=new Uint8Array(16);this.readregs=new Uint8Array(16);this.divnirq=new Uint32Array(4);this.divnmax=new Uint32Array(4);this.pot_inputs=new Uint8Array(8);this.basemult=0;this.pot_scanline=0;this.random_scanline_counter=0;this.kbcode=0;this.DELAYED_SERIN_IRQ=0;this.DELAYED_SEROUT_IRQ=0;this.DELAYED_XMTDONE_IRQ=0;this.init()}saveState(){return _(0,{},this)}loadState(e){_(0,this,e)}init(){this.readregs.fill(255),this.readregs[H]=239,this.basemult=Ct,this.pot_inputs.fill(128),Pe()}read(e){let t=this.readregs[e];switch(e&=15,e){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:return t=this.pot_inputs[e],t>3;s&=7,t=(Q[n]>>s)+(Q[n+1]<<8-s)}}break}return t&255}write(e,t){switch(e&=15,this.regs[e]=t,e){case p:t&Re?this.basemult=Ie:this.basemult=Ct,this.update_counter(1<=3?(this.readregs[D]|=8,this.DELAYED_XMTDONE_IRQ=2*this.DELAYED_SEROUT_IRQ-2):(this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0));break;case me:this.divnirq[u]=this.divnmax[u],this.divnirq[g]=this.divnmax[g],this.divnirq[b]=this.divnmax[b],this.divnirq[d]=this.divnmax[d];break;case I:t&4&&(this.pot_scanline=228),(t&3)==0&&(this.DELAYED_SERIN_IRQ=0,this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0);break}this.snd_update(e)}update_counter(e){e&1<0&&--this.DELAYED_SERIN_IRQ==0&&(this.readregs[Se]=this.SIO_GetByte(),this.generateIRQ(32)),this.DELAYED_SEROUT_IRQ>0&&--this.DELAYED_SEROUT_IRQ==0&&this.generateIRQ(16),this.DELAYED_XMTDONE_IRQ>0&&--this.DELAYED_XMTDONE_IRQ==0&&this.generateIRQ(8),this.advanceIRQTimer(u,1),this.advanceIRQTimer(g,2),this.advanceIRQTimer(d,4))}advanceIRQTimer(e,t){(this.divnirq[e]-=R)<0&&(this.divnirq[e]+=this.divnmax[e],this.generateIRQ(t))}generateIRQ(e){this.regs[J]&e&&(this.irq(),this.readregs[D]&=~e)}static stateToLongString(e){let t="";return t+=`Write Registers: `,t+=A(e.regs,0,16),t+=`Read Registers: `,t+=A(e.readregs,0,16),t}CASSETTE_IOLineStatus(){return 0}siocheck(){return((this.regs[c+b]==40||this.regs[c+b]==16||this.regs[c+b]==8||this.regs[c+b]==10)&&this.regs[c+d]==0||(this.regs[I]&120)==40)&&(this.regs[p]&40)==40}SIO_PutByte(e){console.log("SIO put byte",e)}SIO_GetByte(){return 0}};var ve=[i.VK_L,i.VK_J,i.VK_SEMICOLON,i.VK_F4,i.VK_F5,i.VK_K,i.VK_BACK_SLASH,i.VK_TILDE,i.VK_O,null,i.VK_P,i.VK_U,i.VK_ENTER,i.VK_I,i.VK_MINUS2,i.VK_EQUALS2,i.VK_V,i.VK_F7,i.VK_C,i.VK_F6,i.VK_F4,i.VK_B,i.VK_X,i.VK_Z,i.VK_4,null,i.VK_3,i.VK_6,i.VK_ESCAPE,i.VK_5,i.VK_2,i.VK_1,i.VK_COMMA,i.VK_SPACE,i.VK_PERIOD,i.VK_N,null,i.VK_M,i.VK_SLASH,null,i.VK_R,null,i.VK_E,i.VK_Y,i.VK_TAB,i.VK_T,i.VK_W,i.VK_Q,i.VK_9,null,i.VK_0,i.VK_7,i.VK_BACK_SPACE,i.VK_8,null,null,i.VK_F,i.VK_H,i.VK_D,null,i.VK_CAPS_LOCK,i.VK_G,i.VK_S,i.VK_A],Ce=nt([[i.UP,0,1],[i.DOWN,0,2],[i.LEFT,0,4],[i.RIGHT,0,8],[{c:16,n:"Shift",plyr:0,button:0},2,1],[i.VK_F1,3,1],[i.VK_F2,3,2],[i.VK_F3,3,4]]),w=class extends ft{constructor(){super();this.cpuFrequency=1789773;this.numTotalScanlines=262;this.cpuCyclesPerLine=114;this.canvasWidth=336;this.numVisibleScanlines=224;this.aspectRatio=this.canvasWidth/this.numVisibleScanlines*.857;this.firstVisibleScanline=16;this.firstVisibleClock=76;this.defaultROMSize=32768;this.overscan=!0;this.audioOversample=2;this.sampleRate=this.numTotalScanlines*60*this.audioOversample;this.run_address=-1;this.inputs=new Uint8Array(4);this.linergb=new Uint32Array(this.canvasWidth);this.lastdmabyte=0;this.keycode=0;this.cart_80=!1;this.cart_a0=!1;this.xexdata=null;this.keyboard_active=!0;this.d500=new Uint8Array(256);this.cpu=new lt,this.ram=new Uint8Array(65536),this.bios=new Uint8Array(10240),this.bus=this.newBus(),this.connectCPUMemoryBus(this.bus),this.antic=new k(this.readDMA.bind(this),this.antic_nmi.bind(this)),this.gtia=new K,this.irq_pokey=new V(this.pokey_irq.bind(this),()=>this.antic.h),this.audio_pokey=ot(1),this.audioadapter=new ct(this.audio_pokey.pokey1,this.audioOversample,this.sampleRate),this.handler=at(this.inputs,Ce,this.getKeyboardFunction(),!0)}newBus(){return{read:M([[0,32767,65535,t=>this.ram[t]],[32768,40959,65535,t=>this.cart_80?this.rom[t-32768]:this.ram[t]],[40960,49151,65535,t=>this.cart_a0?this.rom[t-32768]:this.ram[t]],[53248,53503,31,t=>this.gtia.readReg(t)],[53760,54015,15,t=>this.readPokey(t)],[54016,54271,15,t=>this.readPIA(t)],[54272,54527,15,t=>this.antic.readReg(t)],[54528,54783,255,t=>this.d500[t]],[55296,65535,65535,t=>this.bios[t-55296]]]),write:M([[0,49146,65535,(t,s)=>{this.ram[t]=s}],[49147,49151,65535,(t,s)=>{this.ram[t]=s,this.initCartA()}],[53248,53503,31,(t,s)=>{this.gtia.setReg(t,s)}],[53760,54015,15,(t,s)=>{this.writePokey(t,s)}],[54272,54527,15,(t,s)=>{this.antic.setReg(t,s)}],[54528,54783,255,(t,s)=>{this.writeMapper(t,s)}]])}}loadBIOS(t){this.bios.set(t)}reset(){super.reset(),this.antic.reset(),this.gtia.reset(),this.keycode=0}read(t){return this.bus.read(t)}readDMA(t){let s=this.bus.read(t);return this.probe.logDMARead(t,s),this.lastdmabyte=s,s}readConst(t){return t<53248||t>=54528?this.bus.read(t):255}write(t,s){this.bus.write(t,s)}readPokey(t){switch(t&15){case 9:return this.keycode&255;case 15:return~this.keycode>>6&4|~this.keycode>>3&8|18;default:return this.irq_pokey.read(t)}}readPIA(t){if(t==0||t==1)return~this.inputs[t]}writePokey(t,s){this.audio_pokey.pokey1.setRegister(t,s),this.irq_pokey.write(t,s)}startScanline(){this.gtia.sync();for(let t=0;t<4;t++)this.gtia.readregs[St+t]=~this.inputs[2]>>t&1;this.gtia.readregs[$]=~this.inputs[3]&7,this.audio&&this.audioadapter.generate(this.audio),this.irq_pokey.advanceScanline()}drawScanline(){let t=this.antic.v-this.firstVisibleScanline;t>=0&&t{this.gtia.clockPulse1(),this.linergb[t++]=this.gtia.rgb},n=()=>{this.gtia.clockPulse2(),this.linergb[t++]=this.gtia.rgb};this.gtia.clockPulse4(),this.antic.dliop&16&&this.antic.regs[4]&1?(t+=2,this.gtia.setBias(-1)):this.gtia.setBias(0);let a=pt[this.antic.mode],h=this.antic.h&1;return(a<8||h)&&(this.gtia.an=this.antic.shiftout()),s(),a==1&&(this.gtia.an=this.antic.shiftout()),n(),a<=2&&(this.gtia.an=this.antic.shiftout()),s(),a==1&&(this.gtia.an=this.antic.shiftout()),n(),1}loadState(t){this.loadControlsState(t),this.cpu.loadState(t.c),this.ram.set(t.ram),this.antic.loadState(t.antic),this.gtia.loadState(t.gtia),this.irq_pokey.loadState(t.pokey),this.lastdmabyte=t.lastdmabyte,this.cart_80=t.cart_80,this.cart_a0=t.cart_a0}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),antic:this.antic.saveState(),gtia:this.gtia.saveState(),pokey:this.irq_pokey.saveState(),inputs:this.inputs.slice(0),lastdmabyte:this.lastdmabyte,keycode:this.keycode,cart_80:this.cart_80,cart_a0:this.cart_a0}}loadControlsState(t){this.inputs.set(t.inputs),this.keycode=t.keycode}saveControlsState(){return{inputs:this.inputs.slice(0),keycode:this.keycode}}getRasterY(){return this.antic.v}getRasterX(){return this.antic.h}getRasterCanvasPosition(){return{x:this.antic.h*4-this.firstVisibleClock,y:this.antic.v-this.firstVisibleScanline}}getDebugCategories(){return["CPU","Stack","ANTIC","GTIA","POKEY"]}getDebugInfo(t,s){switch(t){case"ANTIC":return k.stateToLongString(s.antic);case"GTIA":return K.stateToLongString(s.gtia);case"POKEY":return V.stateToLongString(s.pokey)}}getKeyboardFunction(){return(t,s,n,a)=>{if(!this.keyboard_active)return!1;if(a&65){var h=ve;if(s==i.VK_F9.c)return this.irq_pokey.generateIRQ(128),!0;for(var l=0;l>8}if(s>t.length)throw new Error("Bad .XEX file format")}h>=0&&(n[a++]=169,n[a++]=160,n[a++]=141,n[a++]=255,n[a++]=213,n[a++]=76,n[a++]=h&255,n[a++]=h>>8,this.ram[10]=0,this.ram[11]=213,this.run_address=54528)}initCartA(){this.cpu.getPC()==61823&&this.xexdata&&this.loadXEX(this.xexdata)}setPaddleInput(t,s){this.irq_pokey.pot_inputs[t]=255-s}getDebugDisplayList(){let t=this.antic.getDlistAddr(),s=()=>{let h=this.read(t);return t=t+1&1023|t&-1024,h},n=[],a=0;for(let h=0;h<256&&a<240;h++){let l=t,o=s(),E=o&15,x="",P=!1,v;if(E==0)v=(o>>4&7)+1,x+=" blank="+v;else{v=Z[E],x+=" mode="+f(E),x+=" lines="+v,P=(o&-65)==1;let rt=(o&64)!=0&&(o&15)!=0;if(o&16&&(x+=" HSCROL"),o&32&&(x+=" VSCROL"),o&128&&(x+=" DLI"),P&&o&64?x+=" JVB":P?x+=" JMP":rt&&(x+=" LMS"),P||rt){let Nt=s(),Ft=s();x+=" $"+f(Ft)+f(Nt)}}if(n.push("$"+f(l)+" y="+a+" "+x),P)break;a+=v}return n}},j=class extends w{newBus(){return{read:M([[0,16383,65535,e=>this.ram[e]],[16384,49151,65535,e=>this.rom?this.rom[e-16384]:0],[49152,53247,31,e=>this.gtia.readReg(e)],[54272,54527,15,e=>this.antic.readReg(e)],[59392,61439,15,e=>this.readPokey(e)],[63488,65535,2047,e=>this.bios[e]]]),write:M([[0,16383,65535,(e,t)=>{this.ram[e]=t}],[49152,53247,31,(e,t)=>{this.gtia.setReg(e,t)}],[54272,54527,15,(e,t)=>{this.antic.setReg(e,t)}],[59392,61439,15,(e,t)=>{this.writePokey(e,t)}]])}}};var it=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"hellopm.dasm",name:"Hello Sprites (ASM)"},{id:"helloconio.c",name:"Text Mode (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"hellodlist.c",name:"Display List (C)"}],Lt=it.concat([{id:"testmusic.c",name:"POKEY Music (C)"},{id:"sieve.bas",name:"Benchmark (FastBasic)",category:"FastBasic"},{id:"pmtest.bas",name:"Sprites Test (FastBasic)"},{id:"dli.bas",name:"DLI Test (FastBasic)"},{id:"joyas.bas",name:"Match-3 Game (FastBasic)"}]),Kt={main:[{name:"RAM",start:0,size:49152,type:"ram"},{name:"Left Cartridge ROM",start:40960,size:8192,type:"rom"},{name:"GTIA",start:53248,size:32,type:"io"},{name:"POKEY",start:53760,size:16,type:"io"},{name:"PIA",start:54016,size:4,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"Cartridge Control Line",start:54784,size:256,type:"io"},{name:"ROM",start:55296,size:2048,type:"rom"},{name:"Character Set",start:57344,size:1024,type:"rom"},{name:"ROM",start:58368,size:7168,type:"rom"}]};function Vt(r){return r.endsWith(".bas")||r.endsWith(".fb")||r.endsWith(".fbi")?"fastbasic":dt(r)}var z=class extends ut{constructor(){super(...arguments);this.getToolForFilename=Vt;this.showHelp=wt;this.getROMExtension=Me;this.biosPath="res/altirra/kernel.rom"}newMachine(){return new w}getPresets(){return Lt}getDefaultExtensions(){return[...super.getDefaultExtensions(),".bas"]}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return Kt}async start(){let t=await this.loadKernel();await super.start(),this.machine.loadBIOS(t)}async loadKernel(){var t=await fetch(this.biosPath);if(t.status==200||t.size){var s=await t.arrayBuffer();return new Uint8Array(s)}else throw new Error("could not load BIOS file")}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayList(),t}},et=class extends z{constructor(){super(...arguments);this.biosPath="res/altirra/superkernel.rom"}getPresets(){return it}newMachine(){return new j}},X=class extends gt{constructor(){super(...arguments);this.getToolForFilename=Vt;this.getOpcodeMetadata=xt;this.showHelp=wt}getPresets(){return it}getDefaultExtensions(){return[".c",".bas",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}},q=class extends X{constructor(){super(...arguments);this.getMemoryMap=function(){return Kt}}getPresets(){return Lt}loadROM(t,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a800xl.zip",cfgfile:"a800xl.cfg",driver:"a800xl",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:8192,preInit:function(n){}})}start(){}},st=class extends X{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"Cartridge ROM",start:16384,size:32768,type:"rom"},{name:"GTIA",start:49152,size:32,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"POKEY",start:59392,size:16,type:"io"},{name:"ATARI Character Set",start:63488,size:1024,type:"rom"},{name:"ROM",start:64512,size:1024,type:"rom"}]}}}loadROM(t,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a5200/5200.rom",cfgfile:"a5200.cfg",driver:"a5200",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:32768,preInit:function(n){}})}start(){}};function Me(r){return r==null?".bin":r[0]==255&&r[1]==255?".xex":".rom"}function wt(){return"https://8bitworkshop.com/docs/platforms/atari8/"}T["atari8-800.xlmame"]=q;T["atari8-800xl.mame"]=q;T["atari8-5200.mame"]=st;T["atari8-800"]=z;T["atari8-5200"]=et; -//# sourceMappingURL=atari8-DU7XPQJE.js.map +//# sourceMappingURL=atari8-6EBS324Z.js.map diff --git a/gen/atari8-DU7XPQJE.js.map b/gen/atari8-6EBS324Z.js.map similarity index 100% rename from gen/atari8-DU7XPQJE.js.map rename to gen/atari8-6EBS324Z.js.map diff --git a/gen/basic-XGBGD5OW.js b/gen/basic-EY4OCRYP.js similarity index 99% rename from gen/basic-XGBGD5OW.js rename to gen/basic-EY4OCRYP.js index 6dd1f9dd..857fcdd4 100644 --- a/gen/basic-XGBGD5OW.js +++ b/gen/basic-EY4OCRYP.js @@ -1,4 +1,4 @@ -import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-SWDUABCL.js";import"./chunk-JSIZCY7X.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-U7I7I32A.js";import"./chunk-BDSSD4L3.js";import{B as c,K as f,T as d,U as v,a as g}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function O(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},I=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=I),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` +import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-PFP4AQ6X.js";import"./chunk-JSIZCY7X.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-BTBOTRE5.js";import"./chunk-V66UDXZ2.js";import{B as c,K as f,T as d,U as v,a as g}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function O(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},I=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=I),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` `)this.column=0,e=t;else if(t==" "){var n=this.opts.printZoneLength,s=Math.floor(this.column/n),a=(s+1)*this.opts.printZoneLength;a+n>this.margin?(this.column=0,e=` `):e=this.TAB(a)}else e=`${t}`;return e}float2str(t,r){var e=t.toString().toUpperCase();if(r>0){for(var i=r;e.length>r;)e=t.toPrecision(i--);e.startsWith("0.")?e=e.substr(1):e.startsWith("-0.")&&(e="-"+e.substr(2))}return e}printExpr(t){var r=this.valueToString(t,this.opts.numericPadding);this.column+=r.length,this.print(r)}print(t){console.log(t)}async input(t,r){return{line:"",vals:[]}}resume(){}expr2js(t,r){if(r||(r={}),k(t))return JSON.stringify(t.value);if(y(t)){if(!t.args&&r.locals&&r.locals.indexOf(t.name)>=0)return t.name;{r.isconst&&this.runtimeError("I expected a constant value here.");var e="",i=JSON.stringify(t.name);let h=t.args?t.args.map(o=>this.expr2js(o,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${h})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${h})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${h})`:e+=`this.arrayGet(${i}, ${h})`:e+=`this.vars.${t.name}`,r.novalid?e:`this.checkValue(${e}, ${i})`}}else if(N(t)){var n=this.expr2js(t.left,r),s=this.expr2js(t.right,r);return`this.${t.op}(${n}, ${s})`}else if(O(t)){var a=this.expr2js(t.expr,r);return`this.${t.op}(${a})`}}assign2js(t,r){r||(r={});var e="";return(t.name.startsWith("FN")||this.builtins[t.name])&&this.runtimeError("I can't call a function here."),t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?this.runtimeError("I can't set array slices via this command yet."):e+=this.array2js(t,r):e=`this.globals.${t.name}`,e}array2js(t,r){var e=JSON.stringify(t.name),i=t.args||[];return this.expr2js(t,{novalid:!0})+`;this.getArray(${e}, ${i.length})`+i.map(n=>"[this.ROUND("+this.expr2js(n,r)+")]").join("")}checkFuncArgs(t,r){var e=t.args?t.args.length:0;t.name=="RND"&&e==0||t.name=="MID$"&&e==2||t.name=="INSTR"&&e==2||r.length!=e&&this.runtimeError(`I expected ${r.length} arguments for the ${t.name} function, but I got ${e}.`)}startForLoop(t,r,e,i,n){var s=this.curpc-1,a=this.pc2label.get(s);i||(i=1),this.vars[t]=r,this.trace&&console.log(`FOR ${t} = ${r} TO ${e} STEP ${i}`);var h=()=>i>=0?this.vars[t]>e:this.vars[t]o==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:o=>{o&&t!=o&&this.runtimeError(`I executed NEXT "${o}", but the last FOR was for "${t}".`),this.vars[t]+=i;var b=h();b?(this.forLoopStack.pop(),delete this.forLoops[t]):this.curpc=(a!=null&&this.label2pc[a]||s)+1,this.trace&&console.log(`NEXT ${t}: ${this.vars[t]} TO ${e} STEP ${i} DONE=${b}`)}}}nextForLoop(t){var r=this.forLoops[t||this.opts.optionalNextVar&&this.forLoopStack[this.forLoopStack.length-1]];r||this.runtimeError("I couldn't find a matching FOR for this NEXT."),r.$next(t)}whileLoop(t){t?this.whileLoops.push(this.curpc-1):this.skipToAfterWend()}nextWhileLoop(){var t=this.whileLoops.pop();t==null?this.runtimeError("I couldn't find a matching WHILE for this WEND."):this.curpc=t}assign(t,r,e){return e&&t.endsWith("$")?this.checkValue(this.convert(t,r),t):t.endsWith("$")?this.convertToString(r,t):this.convertToNumber(r,t)}convert(t,r){return t.endsWith("$")?r==null?"":r.toString():typeof r=="number"?r:parseFloat(r+"")}convertToString(t,r){if(typeof t!="string")this.runtimeError(`I can't convert ${t} to a string.`);else return t}convertToNumber(t,r){if(typeof t!="number")this.runtimeError(`I can't convert ${t} to a number.`);else return this.checkNum(t)}dimArray(t,...r){if(r=r.map(Math.round),this.arrays[t]!=null){if(this.opts.staticArrays)return;this.runtimeError(`I already dimensioned this array (${t}) earlier.`)}var e=this.getTotalArrayLength(r);e>this.opts.maxArrayElements&&this.runtimeError("I can't create an array with this many elements.");var i=t.endsWith("$"),n=i?Array:Float64Array;if(r.length==1)this.arrays[t]=new n(r[0]+1);else if(r.length==2){this.arrays[t]=new Array(r[0]+1);for(var s=0;s=i.length&&this.runtimeError(`I tried to lookup ${t}(${r}) but it exceeded the dimensions of the array.`),i=i[r[n]]}return c(i)&&this.runtimeError(`I tried to lookup ${t}(${r}) but used too few dimensions.`),i}modifyStringSlice(t,r,e,i){return t=t||"",this.checkString(t),this.checkString(r),i||(i=e),e=this.ROUND(e),i=this.ROUND(i),e<1&&this.dialectError("accept a string slice index less than 1"),ir.length)&&this.runtimeError(`I needed a number between 1 and ${r.length}, but I got ${t}.`),t<1||t>r.length?0:t}onGotoLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gotoLabel(r[t-1])}onGosubLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gosubLabel(r[t-1])}nextDatum(){return this.dataptr>=this.datums.length&&this.runtimeError("I tried to READ, but ran out of data."),this.datums[this.dataptr++].value}do__PRINT(t){var r="";for(var e of t.args){var i=this.expr2js(e),n=i.name;r+=`this.printExpr(this.checkValue(${i}, ${JSON.stringify(n)}));`}return r}preInput(){this.running=!1,this.curpc--}postInput(t){t&&this.curpc++,this.running=!0,this.resume()}do__INPUT(t){var r=t.prompt!=null?this.expr2js(t.prompt):'""',e=t.elapsed!=null?this.assign2js(t.elapsed):"let ___",i="";return t.args.forEach((n,s)=>{var a=this.assign2js(n);i+=` var value = this.convert(${JSON.stringify(n.name)}, response.vals[${s}]); @@ -34,4 +34,4 @@ import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-SWDUABCL.js"; `),this.tty.addtext("*** END OF PROGRAM ***",1),this.tty.showPrintHead(!1)}loadROM(t,r){var e=this.runtime.exited;this.program=r;var i=this.runtime.load(r);this.tty.uppercaseOnly=!0,(!this.hotReload||e||!i)&&this.reset()}getROMExtension(){return".json"}reset(){this.tty.clear(),this.runtime.reset(),this.clock=0,this.transcript=[]}pause(){this.timer.stop()}resume(){this.isBlocked()||(this.animcount=0,this.timer.start())}isBlocked(){return this.tty.waitingfor!=null||this.runtime.exited}isRunning(){return this.timer.isRunning()}getDefaultExtensions(){return[".bas"]}getToolForFilename(){return"basic"}getPresets(){return L}getPC(){return this.runtime.curpc}getSP(){return 4096-this.runtime.returnStack.length}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP()}}saveState(){return{c:this.getCPUState(),rt:this.runtime.saveState()}}loadState(t){this.runtime.loadState(t)}getDebugTree(){return{CurrentLine:this.runtime.getCurrentLabel(),Variables:this.runtime.vars,Arrays:this.runtime.arrays,Functions:this.runtime.defs,ForLoops:this.runtime.forLoops,WhileLoops:this.runtime.whileLoops,ReturnStack:this.runtime.returnStack,NextDatum:this.runtime.datums[this.runtime.dataptr],Clock:this.clock,Options:this.runtime.opts,Internals:this.runtime}}inspect(t){let r=this.runtime.vars[t];if(r!=null)return`${t} = ${r}`}showHelp(){return"https://8bitworkshop.com/docs/platforms/basic/"}getDebugCategories(){return["Variables"]}getDebugInfo(t,r){switch(t){case"Variables":return this.varsToLongString()}}varsToLongString(){var t="",r=Object.keys(this.runtime.vars);r.sort();for(var e of r){var i=this.runtime.vars[e],n=JSON.stringify(i);n.length>24&&(n=`${n.substr(0,24)}...(${n.length})`),t+=g(e,3)+" = "+n+` `}return t}setupDebug(t){this.onBreakpointHit=t}clearDebug(){this.onBreakpointHit=null,this.debugTrap=null}checkDebugTrap(){return this.debugTrap&&this.debugTrap()?(this.pause(),this.break(),!0):!1}break(){this.onBreakpointHit&&this.onBreakpointHit(this.saveState())}step(){var t=this.clock;this.debugTrap=()=>this.clock>t,this.resume()}stepOver(){var t=this.runtime.getStatement();if(t&&(t.command=="GOSUB"||t.command=="ONGOSUB")){var r=this.getPC()+1;this.runEval(()=>this.getPC()==r)}else this.step()}runUntilReturn(){var t=this.getSP();this.runEval(()=>this.getSP()>t)}runEval(t){this.debugTrap=()=>t(this.getCPUState()),this.resume()}restartAtPC(t){return t=Math.round(t),t>=0&&t9?1:0;r=(s>>4)+(e>>4)+t;let i=r>9?1:0;this.clrOZCS();let x=this.doAdd(s,e);this.setSZ(x);let c=0;return i&&(c|=160),t&&(c|=10),c&&(this.clrOZCS(),x=this.doAdd(x,c),this.setSZ(x)),x}getScratchpadIndex(s){if(s<12)return s;if(s===12)return this.IS&63;if(s===13){let e=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,e}if(s===14){let e=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,e}return 0}advanceInsn(){if(this.irqRequest&&this.W&u)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~u,6;let s=this.fetchPC0();this.o=s,this.stable=!0;let e=4,r,t;switch(s){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,e=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],e=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],e=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],e=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,e=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],e=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],e=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,e=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),e=6;break;case 23:this.storeDC0(this.A),e=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:r=this.W&d?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A);break;case 26:this.W&=~u;break;case 27:this.W|=u;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),e=6;break;case 33:r=this.fetchPC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 34:r=this.fetchPC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 35:r=this.fetchPC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 36:r=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 37:r=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,r,1),this.setSZ(this.doAdd(~this.A&255,r,1)),e=6;break;case 38:r=this.fetchPC0(),this.A=this.iobus.read(r)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 39:r=this.fetchPC0(),this.iobus.write(r,this.A),e=8;break;case 40:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC1=this.PC0,this.PC0=i<<8|x,e=12;break}case 41:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC0=i<<8|x,e=10;break}case 42:{let i=this.fetchPC0(),x=this.fetchPC0();this.DC0=i<<8|x,e=10;break}case 43:break;case 44:r=this.DC0,this.DC0=this.DC1,this.DC1=r;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.R[t]=this.doAdd(this.R[t],255),this.setSZ(this.R[t]),e=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:t=this.getScratchpadIndex(s&15),this.A=this.R[t];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:t=this.getScratchpadIndex(s&15),this.R[t]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(s&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|s&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=s&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let i=s&7,x=this.fetchPC0();this.W&i&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 136:r=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 137:r=this.fetchDC0(),this.A=this.doAddDecimal(this.A,r),e=6;break;case 138:r=this.fetchDC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 139:r=this.fetchDC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 140:r=this.fetchDC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 141:r=this.fetchDC0(),this.clrOZCS();{let i=this.doAdd(~this.A&255,r,1);this.setSZ(i)}e=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,e=6;break;case 143:{let i=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),e=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let i=s&15,x=this.fetchPC0();(i===0||!(this.W&i))&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 160:case 161:this.A=this.iobus.read(s&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(s&15)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 176:case 177:this.iobus.write(s&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(s&15,this.A),e=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[t]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:t=this.getScratchpadIndex(s&15),this.A=this.doAddDecimal(this.A,this.R[t]),e=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:t=this.getScratchpadIndex(s&15),this.A=(this.A^this.R[t])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:t=this.getScratchpadIndex(s&15),this.A=this.A&this.R[t]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return e}};var M=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],B=1,E=2,O=4,Z=8,g=16,v=32,_=64,L=128,C=class extends D{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new l;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=A([[0,2047,2047,e=>this.bios[e]],[2048,65535,65535,e=>this.rom&&this.rom[e-2048]||0]],{gmask:65535});this.write=A([[10240,12287,2047,(e,r)=>{this.rom&&(this.rom[e-2048]=r)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:e=>this.readPort(e),write:(e,r)=>{this.writePort(e,r)}})}readPort(e){switch(e&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(e,r){switch(e&255){case 0:this.port0=r;break;case 1:this.port1=r,this.col_reg=r;break;case 4:this.port4=r;break;case 5:this.port5=r,this.soundMode=r>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=r&63,this.writePixel();break}}writePixel(){let e=this.row_reg,r=this.col_reg&127;if(e<64&&r<128){let t=this.port1>>6&3,i=e*128+r;this.vram[i]=t}}readConst(e){return e<2048?this.bios[e]:this.rom&&this.rom[e-2048]||0}loadROM(e){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(e),this.reset()}loadBIOS(e){this.bios=P(e,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(e){var r=0,t=this.cpuFrequency/60;for(this.probe.logNewFrame();r>1)*4;for(let x=0;x<128;x++){let c=this.vram[e*128+x]&3,o=M[r+c];this.pixels[e*128+x]=o}}}generateAudio(e){if(!this.audio)return;let r=Math.floor(this.sampleRate/60);for(let t=0;t0&&this.soundEnvelope>0){let x;switch(this.soundMode){case 1:x=1e3;break;case 2:x=500;break;case 3:x=120;break;default:x=0}if(x>0){let c=Math.floor(this.sampleRate/x);this.soundCounter=(this.soundCounter+1)%c,i=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(i,1)}}setKeyInput(e,r,t){let i=!!(t&1),x=!!(t&64);e===n.VK_1.c&&(i?this.inputs[0]|=1:x&&(this.inputs[0]&=-2)),e===n.VK_2.c&&(i?this.inputs[0]|=2:x&&(this.inputs[0]&=-3)),e===n.VK_3.c&&(i?this.inputs[0]|=4:x&&(this.inputs[0]&=-5)),e===n.VK_4.c&&(i?this.inputs[0]|=8:x&&(this.inputs[0]&=-9)),(e===n.VK_UP.c||e===n.VK_W.c)&&(i?this.inputs[1]|=Z:x&&(this.inputs[1]&=~Z)),(e===n.VK_DOWN.c||e===n.VK_S.c)&&(i?this.inputs[1]|=O:x&&(this.inputs[1]&=~O)),(e===n.VK_LEFT.c||e===n.VK_A.c)&&(i?this.inputs[1]|=E:x&&(this.inputs[1]&=~E)),(e===n.VK_RIGHT.c||e===n.VK_D.c)&&(i?this.inputs[1]|=B:x&&(this.inputs[1]&=~B)),e===n.VK_Q.c&&(i?this.inputs[1]|=g:x&&(this.inputs[1]&=~g)),e===n.VK_E.c&&(i?this.inputs[1]|=v:x&&(this.inputs[1]&=~v)),e===n.VK_R.c&&(i?this.inputs[1]|=L:x&&(this.inputs[1]&=~L)),e===n.VK_F.c&&(i?this.inputs[1]|=_:x&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs),this.vram.set(e.vram),this.port0=e.port0,this.port1=e.port1,this.port4=e.port4,this.port5=e.port5,this.row_reg=e.row_reg,this.col_reg=e.col_reg,this.soundMode=e.soundMode,this.soundCounter=e.soundCounter,this.soundEnvelope=e.soundEnvelope}};function F(a){return a<9?"r"+a:a===9?"J":a===10?"HU":a===11?"HL":a===12?"S":a===13?"I":a===14?"D":"?"}function w(a,s,e,r){let t="",i="",x=1,c=!1;if(s<=7){let o=["KU","KL","QU","QL"];s<4?(t="LR",i="A,"+o[s]):(t="LR",i=o[s-4]+",A")}else if(s===8)t="LR",i="K,P";else if(s===9)t="LR",i="P,K";else if(s===10)t="LR",i="A,IS";else if(s===11)t="LR",i="IS,A";else if(s===12)t="PK";else if(s===13)t="LR",i="P0,Q";else if(s===14)t="LR",i="Q,DC";else if(s===15)t="LR",i="DC,Q";else if(s===16)t="LR",i="DC,H";else if(s===17)t="LR",i="H,DC";else if(s===18)t="SR",i="1";else if(s===19)t="SL",i="1";else if(s===20)t="SR",i="4";else if(s===21)t="SL",i="4";else if(s===22)t="LM";else if(s===23)t="ST";else if(s===24)t="COM";else if(s===25)t="LNK";else if(s===26)t="DI";else if(s===27)t="EI";else if(s===28)t="POP";else if(s===29)t="LR",i="W,J";else if(s===30)t="LR",i="J,W";else if(s===31)t="INC";else if(s===32)t="LI",i="$"+h(e,2),x=2;else if(s===33)t="NI",i="$"+h(e,2),x=2;else if(s===34)t="OI",i="$"+h(e,2),x=2;else if(s===35)t="XI",i="$"+h(e,2),x=2;else if(s===36)t="AI",i="$"+h(e,2),x=2;else if(s===37)t="CI",i="$"+h(e,2),x=2;else if(s===38)t="IN",i="$"+h(e,2),x=2;else if(s===39)t="OUT",i="$"+h(e,2),x=2;else if(s===40)t="PI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===41)t="JMP",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===42)t="DCI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===43)t="NOP";else if(s===44)t="XDC";else if(s<=47)t="???";else if(s>=48&&s<=62)t="DS",i=F(s&15),x=1;else if(s===63)t="???";else if(s>=64&&s<=78)t="LR",i="A,"+F(s&15);else if(s===79)t="???";else if(s>=80&&s<=94)t="LR",i=F(s&15)+",A";else if(s===95)t="???";else if(s>=96&&s<=103)t="LISU",i=""+(s&7);else if(s>=104&&s<=111)t="LISL",i=""+(s&7);else if(s>=112&&s<=127)t="LIS",i=""+(s&15);else if(s>=128&&s<=135){let o=e&128?a+2+e-256:a+2+e;t="BT",i=""+(s&7)+",$"+h(o&65535,4),x=2,c=!0}else if(s===136)t="AM";else if(s===137)t="AMD";else if(s===138)t="NM";else if(s===139)t="OM";else if(s===140)t="XM";else if(s===141)t="CM";else if(s===142)t="ADC";else if(s===143){let o=e&128?a+2+e-256:a+2+e;t="BR7",i="$"+h(o&65535,4),x=2,c=!0}else if(s>=144&&s<=159){let o=e&128?a+2+e-256:a+2+e,f=s&15;f===0?t="BR":t="BF",f!==0&&(i=""+f+","),i+="$"+h(o&65535,4),x=2,c=!0}else s>=160&&s<=161?(t="INS",i=""+(s&15)):s>=162&&s<=163?t="???":s>=164&&s<=175?(t="INS",i=""+(s&15)):s>=176&&s<=177?(t="OUTS",i=""+(s&15)):s>=178&&s<=179?t="???":s>=180&&s<=191?(t="OUTS",i=""+(s&15)):s>=192&&s<=206?(t="AS",i=F(s&15)):s===207?t="???":s>=208&&s<=222?(t="ASD",i=F(s&15)):s===223?t="???":s>=224&&s<=238?(t="XS",i=F(s&15)):s===239?t="???":s>=240&&s<=254?(t="NS",i=F(s&15)):t="???";return{line:t+(i?" "+i:""),nbytes:x,isaddr:c}}var W=[{id:"hello.dasm",name:"Hello World (ASM)"}];function U(a){return"PC0 = "+h(a.PC0,4)+" PC1 = "+h(a.PC1,4)+` +import{H as R,q as D}from"./chunk-V66UDXZ2.js";import{$ as P,K as S,W as n,aa as A,g as h,s as p}from"./chunk-6VYEJCUW.js";import"./chunk-KT7KMEQC.js";var I=1,d=2,k=4,b=8,u=16,l=class{constructor(){this.PC0=0;this.PC1=0;this.DC0=0;this.DC1=0;this.A=0;this.W=0;this.IS=0;this.R=new Uint8Array(64);this.o=0;this.stable=!0;this.irqRequest=!1}connectMemoryBus(s){this.bus=s}connectIOBus(s){this.iobus=s}reset(){this.PC0=0,this.PC1=0,this.DC0=0,this.DC1=0,this.A=0,this.W=0,this.IS=0,this.R.fill(0),this.irqRequest=!1}interrupt(s){this.irqRequest=!0}getPC(){return this.PC0}getSP(){return this.PC1}isStable(){return this.stable}saveState(){return{PC:this.PC0,PC0:this.PC0,PC1:this.PC1,DC0:this.DC0,DC1:this.DC1,A:this.A,W:this.W,IS:this.IS,R:Array.from(this.R),o:this.o,irq:this.irqRequest}}loadState(s){var e;this.PC0=(e=s.PC0)!=null?e:s.PC,this.PC1=s.PC1,this.DC0=s.DC0,this.DC1=s.DC1,this.A=s.A,this.W=s.W,this.IS=s.IS;for(let r=0;r<64;r++)this.R[r]=s.R[r];this.o=s.o,this.irqRequest=s.irq}fetchPC0(){let s=this.bus.read(this.PC0);return this.PC0=this.PC0+1&65535,s}fetchDC0(){let s=this.bus.read(this.DC0);return this.DC0=this.DC0+1&65535,s}storeDC0(s){this.bus.write(this.DC0,s),this.DC0=this.DC0+1&65535}clrOZCS(){this.W&=~(b|k|d|I)}setSZ(s){(s&255)===0&&(this.W|=k),(s&128)===0&&(this.W|=I)}doAdd(s,e,r=0){let t=(s&255)+(e&255)+(r&1);return t&256&&(this.W|=d),((s^t)&(e^t)&128)!==0&&(this.W|=b),t&255}doAddDecimal(s,e){let r=(s&15)+(e&15),t=r>9?1:0;r=(s>>4)+(e>>4)+t;let i=r>9?1:0;this.clrOZCS();let x=this.doAdd(s,e);this.setSZ(x);let c=0;return i&&(c|=160),t&&(c|=10),c&&(this.clrOZCS(),x=this.doAdd(x,c),this.setSZ(x)),x}getScratchpadIndex(s){if(s<12)return s;if(s===12)return this.IS&63;if(s===13){let e=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,e}if(s===14){let e=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,e}return 0}advanceInsn(){if(this.irqRequest&&this.W&u)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~u,6;let s=this.fetchPC0();this.o=s,this.stable=!0;let e=4,r,t;switch(s){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,e=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],e=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],e=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],e=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,e=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],e=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],e=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,e=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),e=6;break;case 23:this.storeDC0(this.A),e=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:r=this.W&d?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A);break;case 26:this.W&=~u;break;case 27:this.W|=u;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),e=6;break;case 33:r=this.fetchPC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 34:r=this.fetchPC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 35:r=this.fetchPC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 36:r=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 37:r=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,r,1),this.setSZ(this.doAdd(~this.A&255,r,1)),e=6;break;case 38:r=this.fetchPC0(),this.A=this.iobus.read(r)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 39:r=this.fetchPC0(),this.iobus.write(r,this.A),e=8;break;case 40:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC1=this.PC0,this.PC0=i<<8|x,e=12;break}case 41:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC0=i<<8|x,e=10;break}case 42:{let i=this.fetchPC0(),x=this.fetchPC0();this.DC0=i<<8|x,e=10;break}case 43:break;case 44:r=this.DC0,this.DC0=this.DC1,this.DC1=r;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.R[t]=this.doAdd(this.R[t],255),this.setSZ(this.R[t]),e=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:t=this.getScratchpadIndex(s&15),this.A=this.R[t];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:t=this.getScratchpadIndex(s&15),this.R[t]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(s&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|s&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=s&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let i=s&7,x=this.fetchPC0();this.W&i&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 136:r=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 137:r=this.fetchDC0(),this.A=this.doAddDecimal(this.A,r),e=6;break;case 138:r=this.fetchDC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 139:r=this.fetchDC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 140:r=this.fetchDC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 141:r=this.fetchDC0(),this.clrOZCS();{let i=this.doAdd(~this.A&255,r,1);this.setSZ(i)}e=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,e=6;break;case 143:{let i=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),e=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let i=s&15,x=this.fetchPC0();(i===0||!(this.W&i))&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 160:case 161:this.A=this.iobus.read(s&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(s&15)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 176:case 177:this.iobus.write(s&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(s&15,this.A),e=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[t]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:t=this.getScratchpadIndex(s&15),this.A=this.doAddDecimal(this.A,this.R[t]),e=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:t=this.getScratchpadIndex(s&15),this.A=(this.A^this.R[t])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:t=this.getScratchpadIndex(s&15),this.A=this.A&this.R[t]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return e}};var M=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],B=1,E=2,O=4,Z=8,g=16,v=32,_=64,L=128,C=class extends D{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new l;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=A([[0,2047,2047,e=>this.bios[e]],[2048,65535,65535,e=>this.rom&&this.rom[e-2048]||0]],{gmask:65535});this.write=A([[10240,12287,2047,(e,r)=>{this.rom&&(this.rom[e-2048]=r)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:e=>this.readPort(e),write:(e,r)=>{this.writePort(e,r)}})}readPort(e){switch(e&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(e,r){switch(e&255){case 0:this.port0=r;break;case 1:this.port1=r,this.col_reg=r;break;case 4:this.port4=r;break;case 5:this.port5=r,this.soundMode=r>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=r&63,this.writePixel();break}}writePixel(){let e=this.row_reg,r=this.col_reg&127;if(e<64&&r<128){let t=this.port1>>6&3,i=e*128+r;this.vram[i]=t}}readConst(e){return e<2048?this.bios[e]:this.rom&&this.rom[e-2048]||0}loadROM(e){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(e),this.reset()}loadBIOS(e){this.bios=P(e,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(e){var r=0,t=this.cpuFrequency/60;for(this.probe.logNewFrame();r>1)*4;for(let x=0;x<128;x++){let c=this.vram[e*128+x]&3,o=M[r+c];this.pixels[e*128+x]=o}}}generateAudio(e){if(!this.audio)return;let r=Math.floor(this.sampleRate/60);for(let t=0;t0&&this.soundEnvelope>0){let x;switch(this.soundMode){case 1:x=1e3;break;case 2:x=500;break;case 3:x=120;break;default:x=0}if(x>0){let c=Math.floor(this.sampleRate/x);this.soundCounter=(this.soundCounter+1)%c,i=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(i,1)}}setKeyInput(e,r,t){let i=!!(t&1),x=!!(t&64);e===n.VK_1.c&&(i?this.inputs[0]|=1:x&&(this.inputs[0]&=-2)),e===n.VK_2.c&&(i?this.inputs[0]|=2:x&&(this.inputs[0]&=-3)),e===n.VK_3.c&&(i?this.inputs[0]|=4:x&&(this.inputs[0]&=-5)),e===n.VK_4.c&&(i?this.inputs[0]|=8:x&&(this.inputs[0]&=-9)),(e===n.VK_UP.c||e===n.VK_W.c)&&(i?this.inputs[1]|=Z:x&&(this.inputs[1]&=~Z)),(e===n.VK_DOWN.c||e===n.VK_S.c)&&(i?this.inputs[1]|=O:x&&(this.inputs[1]&=~O)),(e===n.VK_LEFT.c||e===n.VK_A.c)&&(i?this.inputs[1]|=E:x&&(this.inputs[1]&=~E)),(e===n.VK_RIGHT.c||e===n.VK_D.c)&&(i?this.inputs[1]|=B:x&&(this.inputs[1]&=~B)),e===n.VK_Q.c&&(i?this.inputs[1]|=g:x&&(this.inputs[1]&=~g)),e===n.VK_E.c&&(i?this.inputs[1]|=v:x&&(this.inputs[1]&=~v)),e===n.VK_R.c&&(i?this.inputs[1]|=L:x&&(this.inputs[1]&=~L)),e===n.VK_F.c&&(i?this.inputs[1]|=_:x&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs),this.vram.set(e.vram),this.port0=e.port0,this.port1=e.port1,this.port4=e.port4,this.port5=e.port5,this.row_reg=e.row_reg,this.col_reg=e.col_reg,this.soundMode=e.soundMode,this.soundCounter=e.soundCounter,this.soundEnvelope=e.soundEnvelope}};function F(a){return a<9?"r"+a:a===9?"J":a===10?"HU":a===11?"HL":a===12?"S":a===13?"I":a===14?"D":"?"}function w(a,s,e,r){let t="",i="",x=1,c=!1;if(s<=7){let o=["KU","KL","QU","QL"];s<4?(t="LR",i="A,"+o[s]):(t="LR",i=o[s-4]+",A")}else if(s===8)t="LR",i="K,P";else if(s===9)t="LR",i="P,K";else if(s===10)t="LR",i="A,IS";else if(s===11)t="LR",i="IS,A";else if(s===12)t="PK";else if(s===13)t="LR",i="P0,Q";else if(s===14)t="LR",i="Q,DC";else if(s===15)t="LR",i="DC,Q";else if(s===16)t="LR",i="DC,H";else if(s===17)t="LR",i="H,DC";else if(s===18)t="SR",i="1";else if(s===19)t="SL",i="1";else if(s===20)t="SR",i="4";else if(s===21)t="SL",i="4";else if(s===22)t="LM";else if(s===23)t="ST";else if(s===24)t="COM";else if(s===25)t="LNK";else if(s===26)t="DI";else if(s===27)t="EI";else if(s===28)t="POP";else if(s===29)t="LR",i="W,J";else if(s===30)t="LR",i="J,W";else if(s===31)t="INC";else if(s===32)t="LI",i="$"+h(e,2),x=2;else if(s===33)t="NI",i="$"+h(e,2),x=2;else if(s===34)t="OI",i="$"+h(e,2),x=2;else if(s===35)t="XI",i="$"+h(e,2),x=2;else if(s===36)t="AI",i="$"+h(e,2),x=2;else if(s===37)t="CI",i="$"+h(e,2),x=2;else if(s===38)t="IN",i="$"+h(e,2),x=2;else if(s===39)t="OUT",i="$"+h(e,2),x=2;else if(s===40)t="PI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===41)t="JMP",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===42)t="DCI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===43)t="NOP";else if(s===44)t="XDC";else if(s<=47)t="???";else if(s>=48&&s<=62)t="DS",i=F(s&15),x=1;else if(s===63)t="???";else if(s>=64&&s<=78)t="LR",i="A,"+F(s&15);else if(s===79)t="???";else if(s>=80&&s<=94)t="LR",i=F(s&15)+",A";else if(s===95)t="???";else if(s>=96&&s<=103)t="LISU",i=""+(s&7);else if(s>=104&&s<=111)t="LISL",i=""+(s&7);else if(s>=112&&s<=127)t="LIS",i=""+(s&15);else if(s>=128&&s<=135){let o=e&128?a+2+e-256:a+2+e;t="BT",i=""+(s&7)+",$"+h(o&65535,4),x=2,c=!0}else if(s===136)t="AM";else if(s===137)t="AMD";else if(s===138)t="NM";else if(s===139)t="OM";else if(s===140)t="XM";else if(s===141)t="CM";else if(s===142)t="ADC";else if(s===143){let o=e&128?a+2+e-256:a+2+e;t="BR7",i="$"+h(o&65535,4),x=2,c=!0}else if(s>=144&&s<=159){let o=e&128?a+2+e-256:a+2+e,f=s&15;f===0?t="BR":t="BF",f!==0&&(i=""+f+","),i+="$"+h(o&65535,4),x=2,c=!0}else s>=160&&s<=161?(t="INS",i=""+(s&15)):s>=162&&s<=163?t="???":s>=164&&s<=175?(t="INS",i=""+(s&15)):s>=176&&s<=177?(t="OUTS",i=""+(s&15)):s>=178&&s<=179?t="???":s>=180&&s<=191?(t="OUTS",i=""+(s&15)):s>=192&&s<=206?(t="AS",i=F(s&15)):s===207?t="???":s>=208&&s<=222?(t="ASD",i=F(s&15)):s===223?t="???":s>=224&&s<=238?(t="XS",i=F(s&15)):s===239?t="???":s>=240&&s<=254?(t="NS",i=F(s&15)):t="???";return{line:t+(i?" "+i:""),nbytes:x,isaddr:c}}var W=[{id:"hello.dasm",name:"Hello World (ASM)"}];function U(a){return"PC0 = "+h(a.PC0,4)+" PC1 = "+h(a.PC1,4)+` DC0 = `+h(a.DC0,4)+" DC1 = "+h(a.DC1,4)+` A = `+h(a.A,2)+" W = "+h(a.W,2)+` IS = `+h(a.IS,2)+` @@ -14,4 +14,4 @@ Port 5: `+h(e.port5||0,2)+` Row: `+h(e.row_reg||0,2)+` Col: `+h(e.col_reg||0,2)+` `;case"VRAM":return"";default:return""}}getMemoryMap(){return{main:[{name:"BIOS",start:0,size:2048,type:"rom"},{name:"Cart ROM",start:2048,size:30720,type:"rom"}]}}};S.channelf=m; -//# sourceMappingURL=channelf-MOCITAVQ.js.map +//# sourceMappingURL=channelf-DZ5A4LWS.js.map diff --git a/gen/channelf-MOCITAVQ.js.map b/gen/channelf-DZ5A4LWS.js.map similarity index 100% rename from gen/channelf-MOCITAVQ.js.map rename to gen/channelf-DZ5A4LWS.js.map diff --git a/gen/chunk-LYDWRYWR.js b/gen/chunk-422F5ECI.js similarity index 99% rename from gen/chunk-LYDWRYWR.js rename to gen/chunk-422F5ECI.js index bf688473..5b2fb73e 100644 --- a/gen/chunk-LYDWRYWR.js +++ b/gen/chunk-422F5ECI.js @@ -1,4 +1,4 @@ -import{c as ie,k as he,o as ne,r as oe}from"./chunk-BDSSD4L3.js";import{X as ae,a as A,g as w,u}from"./chunk-6VYEJCUW.js";var L=class{constructor(t,e,r){this.probe=new ne;this.ram=new Uint8Array(16384);this.registers=new Uint8Array(8);this.spriteBuffer=new Uint8Array(256);this.displayOn=!1;this.interruptsOn=!1;this.fb32=t,this.cru=e,this.enableFlicker=r,this.palette=[u(0,0,0),u(0,0,0),u(33,200,66),u(94,220,120),u(84,85,237),u(125,118,252),u(212,82,77),u(66,235,245),u(252,85,84),u(255,121,120),u(212,193,84),u(230,206,128),u(33,176,59),u(201,91,186),u(204,204,204),u(255,255,255)]}reset(){var t;this.ram.fill(0),this.registers.fill(0),this.addressRegister=0,this.statusRegister=0,this.prefetchByte=0,this.latch=!1,this.displayOn=!1,this.interruptsOn=!1,this.screenMode=0,this.bitmapMode=!1,this.textMode=!1,this.colorTable=0,this.nameTable=0,this.charPatternTable=0,this.spriteAttributeTable=0,this.spritePatternTable=0,this.colorTableMask=16383,this.patternTableMask=16383,this.ramMask=16383,this.fgColor=0,this.bgColor=0,this.flicker=this.enableFlicker,this.redrawRequired=!0,this.width=304,this.height=240}drawScanline(t){var e=this.fb32,r=this.width,s=t*r,i=this.screenMode,h=this.textMode,a=this.bitmapMode,n=h?240:256,b=192,o=r-n>>1,d=this.height-b>>1,p=this.fgColor,M=this.bgColor,l=this.ram,v=this.nameTable,V=this.colorTable,P=this.charPatternTable,G=this.colorTableMask,S=this.patternTableMask,ce=this.spriteAttributeTable,de=this.spritePatternTable,$=(this.registers[1]&2)!==0,H=this.registers[1]&1,Z=($?16:8)<<(H?1:0),j=this.flicker?4:32,J=this.palette,N=!1,Q=!1,Y=31,R,f,D,T,C,F,m;if(t>=d&&t208&&(k-=256),k++;var y=k+Z,U=-1;if(B<8||!a)c>=k&&c=k&&X=64&&c<128&&c>=k&&c>H,Me=de+(me<<3)+pe,E=0;E=0&&O>H,Te=l[Me+(re>=8?16:0)];(Te&128>>(re&7))!==0&&(W[O]===0?W[O]=ge+1:N=!0)}}}z++}I+=4}else ee=!0}z>4&&(Q=!0,Y=B)}var _=h?(c>>3)*40:c>>3<<5,x=c&7;for(R=0;R=o&&R>3)],F=l[V+(T>>3)],m=l[P+(T<<3)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 2:T=l[v+_+(g>>3)],C=((c&192)<<5)+(T<<3),F=l[V+(C&G)+x],m=l[P+(C&S)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 3:T=l[v+_+(g>>3)],x=(c&28)>>2,m=l[P+(T<<3)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 1:T=l[v+_+Math.floor(g/6)],m=l[P+(T<<3)+x],f=(m&128>>g%6)!==0?p:M;break;case 5:T=l[v+_+Math.floor(g/6)],C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(m&128>>g%6)!==0?p:M;break;case 6:T=l[v+_+(g>>3)],x=(c&28)>>2,C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 7:f=(g&4)===0?p:M;break}if(f===0&&(f=M),!h){var se=W[g]-1;se>0&&(f=se)}}else f=M;D=J[f],e[s++]=D}}else for(D=J[M],R=0;R>4,this.bgColor=this.registers[7]&15;break}}setVDPWriteCommand3(t){this.setVDPWriteRegister(t)}writeAddress(t){if(!this.latch)this.addressRegister=this.addressRegister&65280|t;else{switch((t&192)>>6){case 0:this.setReadAddress(t);break;case 1:this.setWriteAddress(t);break;case 2:this.setVDPWriteRegister(t);break;case 3:this.setVDPWriteCommand3(t);break}this.redrawRequired=!0}this.latch=!this.latch}updateMode(t,e){if(this.bitmapMode=(t&2)!==0,this.textMode=(e&16)!==0,this.bitmapMode)switch((e&24)>>3){case 0:this.screenMode=2;break;case 1:this.screenMode=6;break;case 2:this.screenMode=5;break;case 3:this.screenMode=7;break}else switch((e&24)>>3){case 0:this.screenMode=0;break;case 1:this.screenMode=3;break;case 2:this.screenMode=1;break;case 3:this.screenMode=7;break}this.bitmapMode?(this.colorTable=(this.registers[3]&128)<<6,this.charPatternTable=(this.registers[4]&4)<<11,this.updateTableMasks()):(this.colorTable=this.registers[3]<<6,this.charPatternTable=(this.registers[4]&7)<<11),this.nameTable=(this.registers[2]&15)<<10,this.spriteAttributeTable=(this.registers[5]&127)<<7,this.spritePatternTable=(this.registers[6]&7)<<11}updateTableMasks(){this.screenMode===2?(this.colorTableMask=(this.registers[3]&127)<<6|63,this.patternTableMask=(this.registers[4]&3)<<11|this.colorTableMask&2047):this.screenMode===5||this.screenMode===6?(this.colorTableMask=this.ramMask,this.patternTableMask=(this.registers[4]&3)<<11|2047):(this.colorTableMask=this.ramMask,this.patternTableMask=this.ramMask)}writeData(t){this.probe.logVRAMWrite(this.addressRegister,t),this.ram[this.addressRegister++]=t,this.prefetchByte=t,this.addressRegister&=this.ramMask,this.latch=!1,this.redrawRequired=!0}readStatus(){var t=this.statusRegister;return this.statusRegister=31,this.interruptsOn&&this.cru.setVDPInterrupt(!1),this.latch=!1,t}readData(){var t=this.prefetchByte;return this.prefetchByte=this.ram[this.addressRegister++],this.probe.logVRAMRead(this.addressRegister-1,this.prefetchByte),this.addressRegister&=this.ramMask,this.latch=!1,t}getRAM(){return this.ram}colorTableSize(){return this.screenMode===0?32:this.screenMode===2?Math.min(this.colorTableMask+1,6144):0}patternTableSize(){return this.bitmapMode?Math.min(this.patternTableMask+1,6144):2048}getDebugTables(){var t=[["Pattern Table",this.charPatternTable,this.patternTableSize()],["Name Table",this.nameTable,768],["Color Table",this.colorTable,this.colorTableSize()],["Sprite Patterns",this.spritePatternTable,2048],["Sprite Attributes",this.spriteAttributeTable,128]];return t}getRegsString(){for(var e="Registers:",r=0;r>1,d=this.height-b>>1,p=this.fgColor,M=this.bgColor,l=this.ram,v=this.nameTable,V=this.colorTable,P=this.charPatternTable,G=this.colorTableMask,S=this.patternTableMask,ce=this.spriteAttributeTable,de=this.spritePatternTable,$=(this.registers[1]&2)!==0,H=this.registers[1]&1,Z=($?16:8)<<(H?1:0),j=this.flicker?4:32,J=this.palette,N=!1,Q=!1,Y=31,R,f,D,T,C,F,m;if(t>=d&&t208&&(k-=256),k++;var y=k+Z,U=-1;if(B<8||!a)c>=k&&c=k&&X=64&&c<128&&c>=k&&c>H,Me=de+(me<<3)+pe,E=0;E=0&&O>H,Te=l[Me+(re>=8?16:0)];(Te&128>>(re&7))!==0&&(W[O]===0?W[O]=ge+1:N=!0)}}}z++}I+=4}else ee=!0}z>4&&(Q=!0,Y=B)}var _=h?(c>>3)*40:c>>3<<5,x=c&7;for(R=0;R=o&&R>3)],F=l[V+(T>>3)],m=l[P+(T<<3)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 2:T=l[v+_+(g>>3)],C=((c&192)<<5)+(T<<3),F=l[V+(C&G)+x],m=l[P+(C&S)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 3:T=l[v+_+(g>>3)],x=(c&28)>>2,m=l[P+(T<<3)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 1:T=l[v+_+Math.floor(g/6)],m=l[P+(T<<3)+x],f=(m&128>>g%6)!==0?p:M;break;case 5:T=l[v+_+Math.floor(g/6)],C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(m&128>>g%6)!==0?p:M;break;case 6:T=l[v+_+(g>>3)],x=(c&28)>>2,C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 7:f=(g&4)===0?p:M;break}if(f===0&&(f=M),!h){var se=W[g]-1;se>0&&(f=se)}}else f=M;D=J[f],e[s++]=D}}else for(D=J[M],R=0;R>4,this.bgColor=this.registers[7]&15;break}}setVDPWriteCommand3(t){this.setVDPWriteRegister(t)}writeAddress(t){if(!this.latch)this.addressRegister=this.addressRegister&65280|t;else{switch((t&192)>>6){case 0:this.setReadAddress(t);break;case 1:this.setWriteAddress(t);break;case 2:this.setVDPWriteRegister(t);break;case 3:this.setVDPWriteCommand3(t);break}this.redrawRequired=!0}this.latch=!this.latch}updateMode(t,e){if(this.bitmapMode=(t&2)!==0,this.textMode=(e&16)!==0,this.bitmapMode)switch((e&24)>>3){case 0:this.screenMode=2;break;case 1:this.screenMode=6;break;case 2:this.screenMode=5;break;case 3:this.screenMode=7;break}else switch((e&24)>>3){case 0:this.screenMode=0;break;case 1:this.screenMode=3;break;case 2:this.screenMode=1;break;case 3:this.screenMode=7;break}this.bitmapMode?(this.colorTable=(this.registers[3]&128)<<6,this.charPatternTable=(this.registers[4]&4)<<11,this.updateTableMasks()):(this.colorTable=this.registers[3]<<6,this.charPatternTable=(this.registers[4]&7)<<11),this.nameTable=(this.registers[2]&15)<<10,this.spriteAttributeTable=(this.registers[5]&127)<<7,this.spritePatternTable=(this.registers[6]&7)<<11}updateTableMasks(){this.screenMode===2?(this.colorTableMask=(this.registers[3]&127)<<6|63,this.patternTableMask=(this.registers[4]&3)<<11|this.colorTableMask&2047):this.screenMode===5||this.screenMode===6?(this.colorTableMask=this.ramMask,this.patternTableMask=(this.registers[4]&3)<<11|2047):(this.colorTableMask=this.ramMask,this.patternTableMask=this.ramMask)}writeData(t){this.probe.logVRAMWrite(this.addressRegister,t),this.ram[this.addressRegister++]=t,this.prefetchByte=t,this.addressRegister&=this.ramMask,this.latch=!1,this.redrawRequired=!0}readStatus(){var t=this.statusRegister;return this.statusRegister=31,this.interruptsOn&&this.cru.setVDPInterrupt(!1),this.latch=!1,t}readData(){var t=this.prefetchByte;return this.prefetchByte=this.ram[this.addressRegister++],this.probe.logVRAMRead(this.addressRegister-1,this.prefetchByte),this.addressRegister&=this.ramMask,this.latch=!1,t}getRAM(){return this.ram}colorTableSize(){return this.screenMode===0?32:this.screenMode===2?Math.min(this.colorTableMask+1,6144):0}patternTableSize(){return this.bitmapMode?Math.min(this.patternTableMask+1,6144):2048}getDebugTables(){var t=[["Pattern Table",this.charPatternTable,this.patternTableSize()],["Name Table",this.nameTable,768],["Color Table",this.colorTable,this.colorTableSize()],["Sprite Patterns",this.spritePatternTable,2048],["Sprite Attributes",this.spriteAttributeTable,128]];return t}getRegsString(){for(var e="Registers:",r=0;r0&&(e+=A(i[0],20)+": $"+w(i[1],4)+" - $"+w(i[1]+i[2]-1,4)+` `);return e+=A("Address Register",20)+": $"+w(this.addressRegister,4)+` @@ -8,4 +8,4 @@ import{c as ie,k as he,o as ne,r as oe}from"./chunk-BDSSD4L3.js";import{X as ae, `,this.ramMask!=16383&&(e+=A("RAM Mask",20)+": $"+w(this.ramMask)+` `),e}hexView(t,e,r){for(var s="",i=null,h=t,a=0,n=0;n>2&3)*85,(e>>4&3)*85),this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else{var s=this.addressRegister;super.writeData(e),this.writeTwiddled(s,e)}this.latch=!1}writeTwiddled(e,r){for(var s=e&16380,i=s*2,h=this.ram[s],a=this.ram[s+1],n=this.ram[s+2],b=this.ram[s+3],o=0;o<8;++o){var d=7-o,p=h>>>d&1|(a>>>d&1)<<1|(n>>>d&1)<<2|(b>>>d&1)<<3;this.vramUntwiddled[i+o]=p}}getState(){var e=super.getState();return e.cram=this.cram.slice(0),e}restoreState(e){super.restoreState(e),this.cram.set(e.cram)}drawScanline(e){this.screenMode==4?this.rasterize_line(e):super.drawScanline(e)}findSprites(e){var r=this.spriteAttributeTable,s=[],i=8,h;for(this.registers[1]&2&&(i=16),h=0;h<64;h++){var a=this.ram[r+h];if(a===208)break;if(a>=240&&(a-=256),e>=a&&e=8)){b=!0;var V=e-M[2],P=h+M[1]*32+V*4,G=P*2+l,S=this.vramUntwiddled[G];if(S!==0){if(o){this.statusRegister|=32;break}this.fb32[r+(s+a-this.registers[8]&255)]=this.cpalette[16+S],o=!0}}}!b&&d>1&&(a+=d-1)}}border_clear(e,r){e=e|0,r=r|0;let s=16+(this.registers[7]&15),i=this.cpalette[s];this.fb32.fill(i,e,e+r)}rasterize_line(e){e|=0;var r=this.registers,s=256,i=this.numVisibleLines,h=this.width-s>>1,a=this.height-i>>1;let n=(e+a)*this.width|0,b=n+h|0;if(!this.displayOn||e<0||e>=i)e=262-a&&this.border_clear((e-262+a)*this.width,this.width);else{var o=e+r[9];o>=224&&(o-=224);let d=this.findSprites(e),p=r[0]&64&&e<16?0:r[8],M=this.nameTable+(o>>>3)*64,l=o&7;this.rasterize_background_line(b,p,M,l),this.rasterize_sprites(e,b,p,d),this.rasterize_foreground_line(b,p,M,l),this.border_clear(n,h),this.border_clear(b+256,h),r[0]&32&&this.border_clear(b,8)}e==i&&(this.statusRegister|=128,this.interruptsOn&&this.cru.setVDPInterrupt(!0)),e<=i?this.lineCounter>0?this.lineCounter--:(this.lineCounter=this.registers[10],this.lineInterruptPending=!0):this.lineCounter=this.registers[10],this.lineInterruptPending&&this.registers[0]&16}getDebugTables(){if(this.screenMode==4){var e=[["Pattern Table",0,16384],["Name Table",this.nameTable,2048],["Sprite Attributes",this.spriteAttributeTable,256]];return e}else return super.getDebugTables()}},le=class extends K{constructor(){super(...arguments);this.cram=new Uint8Array(64);this.cram_latch=0}writeData(e){if(this.writeToCRAM){if(this.addressRegister&1){let r=this.cram_latch+(e<<8),s=u((r&15)*17,(r>>4&15)*17,(r>>8&15)*17),i=this.addressRegister&this.cram.length-1;this.cram[i-1]=this.cram_latch,this.cram[i]=e,this.cpalette[i>>1]=s,this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else this.cram_latch=e;this.addressRegister++}else super.writeData(e);this.latch=!1}};var be=2,ue=class extends oe{constructor(){super(...arguments);this.cpuFrequency=3579545;this.canvasWidth=304;this.numTotalScanlines=262;this.numVisibleScanlines=240;this.cpuCyclesPerLine=this.cpuFrequency/(262*60);this.sampleRate=262*60*be;this.overscan=!0;this.cpu=new ie}getKeyboardFunction(){return null}init(e,r,s){this.connectCPUMemoryBus(e),this.connectCPUIOBus(r),this.handler=ae(this.inputs,this.getKeyboardMap(),this.getKeyboardFunction()),this.psg=s,this.audioadapter=s&&new he(s.psg,be,this.sampleRate)}connectVideo(e){super.connectVideo(e);var r={setVDPInterrupt:s=>{s&&this.vdpInterrupt()}};this.vdp=this.newVDP(this.pixels,r,!0)}connectProbe(e){super.connectProbe(e),this.vdp.probe=e||this.nullProbe}newVDP(e,r,s){return new L(e,r,s)}startScanline(){this.audio&&this.audioadapter&&this.audioadapter.generate(this.audio)}drawScanline(){this.vdp.drawScanline(this.scanline)}loadState(e){super.loadState(e),this.vdp.restoreState(e.vdp)}saveState(){var e=super.saveState();return e.vdp=this.vdp.getState(),e}reset(){super.reset(),this.vdp.reset(),this.psg.reset()}getDebugCategories(){return["CPU","Stack","VDP"]}getDebugInfo(e,r){switch(e){case"VDP":return this.vdpStateToLongString(r.vdp)}}vdpStateToLongString(e){return this.vdp.getRegsString()}readVRAMAddress(e){return this.vdp.ram[e&16383]}};export{K as a,le as b,ue as c}; -//# sourceMappingURL=chunk-LYDWRYWR.js.map +//# sourceMappingURL=chunk-422F5ECI.js.map diff --git a/gen/chunk-LYDWRYWR.js.map b/gen/chunk-422F5ECI.js.map similarity index 100% rename from gen/chunk-LYDWRYWR.js.map rename to gen/chunk-422F5ECI.js.map diff --git a/gen/chunk-BDSSD4L3.js b/gen/chunk-BDSSD4L3.js deleted file mode 100644 index 6df7fcfc..00000000 --- a/gen/chunk-BDSSD4L3.js +++ /dev/null @@ -1,30 +0,0 @@ -import{D as gt,P as pt,R as Pt,T as _t,U as wt,V as rt,_ as kt,g as $,j as vt,s as Ve}from"./chunk-6VYEJCUW.js";var Sn=[{mn:"BRK",am:"",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:"SI"},{mn:"ORA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHP",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"ORA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BPL",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ORA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"ORA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SLO",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"JSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:"S"},{mn:"AND",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BIT",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PLP",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SCZIDVN"},{mn:"AND",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"BIT",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BMI",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"AND",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"SEC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"AND",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RLA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTI",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"SCZIDVN"},{mn:"EOR",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHA",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"EOR",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ASR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"JMP",am:"AAAA",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"EOR",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BVC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"EOR",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"EOR",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SRE",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTS",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"S"},{mn:"ADC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"PLA",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SAZN"},{mn:"ADC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ARR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"JMP",am:"(AAAA)",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:""},{mn:"ADC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BVS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ADC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SEI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"ADC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RRA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"STA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"DEY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"TXA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ANE",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"BCC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"STA",am:"(aa),y",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SHA",am:"(aa),y",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa,y",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:""},{mn:"TYA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STA",am:"AAAA,y",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"TXS",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"S"},{mn:"SHS",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:"S"},{mn:"SHY",am:"AAAA,x",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA,x",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHX",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHA",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"LDY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"TAY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"TAX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LXA",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"BCS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"LDA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"LAX",am:"(aa),y",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa,y",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"CLV",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"V"},{mn:"LDA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"TSX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAS",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"SAXZN"},{mn:"LDY",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"CPY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"INY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"CMP",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBX",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"XCZN"},{mn:"CPY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"BNE",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"CMP",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"CZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"DCP",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CLD",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"CMP",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"CPX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"INX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"CPX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BEQ",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"SBC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"ISB",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SED",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"SBC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"}];function at(h,t,n,a){var m=Sn[t];if(m==null)return{line:"???",nbytes:1,isaddr:!1};var o=m.mn,d=m.am,x=!1;if(d=="branch"){var i=n<128?h+2+n:h+2-(256-n);i&=65535,d="$"+$(i,4),x=!0}else d=d.replace("aa","$"+$(n,2)),d=d.replace("AAAA","$"+$(n+(a<<8),4)),d.indexOf("#")<0&&d.indexOf("$")>=0&&(x=!0);return{line:m.mn+" "+d,nbytes:m.nb,isaddr:x}}function vn(h){let t=h;if(!t||typeof t.mem_read!="function"||typeof t.mem_write!="function"||typeof t.io_read!="function"||typeof t.io_write!="function")throw"Z80: Core object is missing required functions.";let n=0,a=0,m=0,o=0,d=0,x=0,i=0,Y=0,y=0,p=0,N=0,w=0,G=0,u0=0,A=0,R=0,i0=0,T=0,W=57328,f=0,c={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},g0={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},M0=0,H=0,D0=0,P=!1,v=!1,V0=!1,t0=0;function q(){return{PC:f,SP:W,IX:A,IY:R,AF:(n<<8)+U0(),BC:(a<<8)+m,DE:(o<<8)+d,HL:(x<<8)+i,AF_:(Y<<8)+Y0(),BC_:(y<<8)+p,DE_:(N<<8)+w,HL_:(G<<8)+u0,IR:(i0<<8)+T,im:M0,iff1:H,iff2:D0,halted:P,do_delayed_di:v,do_delayed_ei:V0,cycle_counter:t0}}function H0(e){f=e.PC,W=e.SP,A=e.IX,R=e.IY,n=e.AF>>8&255,T0(e.AF),a=e.BC>>8&255,m=e.BC&255,o=e.DE>>8&255,d=e.DE&255,x=e.HL>>8&255,i=e.HL&255,Y=e.AF_>>8&255,k0(e.AF_),y=e.BC_>>8&255,p=e.BC_&255,N=e.DE_>>8&255,w=e.DE_&255,G=e.HL_>>8&255,u0=e.HL_&255,i0=e.IR>>8&255,T=e.IR&255,M0=e.im,H=e.iff1,D0=e.iff2,P=e.halted,v=e.do_delayed_di,V0=e.do_delayed_ei,t0=e.cycle_counter}let z=function(){W=57328,f=0,n=0,T=0,T0(0),M0=0,H=0,D0=0,P=!1,v=!1,V0=!1,t0=0},F=function(){if(P)return 1;var e=!1,b=!1;v?(v=!1,e=!0):V0&&(V0=!1,b=!0),T=T&128|(T&127)+1&127;var _=t.mem_read(f);x0(_),f=f+1&65535,e?(H=0,D0=0):b&&(H=1,D0=1);var y0=t0;return t0=0,y0},A0=function(e,b){if(e)return T=T&128|(T&127)+1&127,P=!1,D0=H,H=0,L0(f),f=102,t0+=11,!0;if(H){if(T=T&128|(T&127)+1&127,P=!1,H=0,D0=0,M0===0)f=f-1&65535,x0(b),f=f+1&65535,t0+=2;else if(M0===1)L0(f),f=56,t0+=13;else if(M0===2){L0(f);var _=i0<<8|b;f=t.mem_read(_)|t.mem_read(_+1&65535)<<8,t0+=19}return!0}},x0=function(e){var b=function(I0){return(I0&7)===0?a:(I0&7)===1?m:(I0&7)===2?o:(I0&7)===3?d:(I0&7)===4?x:(I0&7)===5?i:(I0&7)===6?t.mem_read(i|x<<8):n};if(e===118)P=!0;else if(e>=64&&e<128){var _=b(e);(e&56)>>>3?(e&56)>>>3===1?m=_:(e&56)>>>3===2?o=_:(e&56)>>>3===3?d=_:(e&56)>>>3===4?x=_:(e&56)>>>3===5?i=_:(e&56)>>>3===6?t.mem_write(i|x<<8,_):(e&56)>>>3===7&&(n=_):a=_}else if(e>=128&&e<192){var _=b(e),y0=[c0,a0,E,k,f0,n0,Z,M];y0[(e&56)>>>3](_)}else{var $0=S[e];$0()}t0+=u[e]},I=function(e){return e&=255,e&128&&(e=-((255&~e)+1)),e},U0=function(){return c.S<<7|c.Z<<6|c.Y<<5|c.H<<4|c.X<<3|c.P<<2|c.N<<1|c.C},Y0=function(){return g0.S<<7|g0.Z<<6|g0.Y<<5|g0.H<<4|g0.X<<3|g0.P<<2|g0.N<<1|g0.C},T0=function(e){c.S=(e&128)>>>7,c.Z=(e&64)>>>6,c.Y=(e&32)>>>5,c.H=(e&16)>>>4,c.X=(e&8)>>>3,c.P=(e&4)>>>2,c.N=(e&2)>>>1,c.C=e&1},k0=function(e){g0.S=(e&128)>>>7,g0.Z=(e&64)>>>6,g0.Y=(e&32)>>>5,g0.H=(e&16)>>>4,g0.X=(e&8)>>>3,g0.P=(e&4)>>>2,g0.N=(e&2)>>>1,g0.C=e&1},Q=function(e){c.Y=(e&32)>>>5,c.X=(e&8)>>>3},l0=function(e){var b=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];return b[e]},L0=function(e){W=W-1&65535,t.mem_write(W,(e&65280)>>>8),W=W-1&65535,t.mem_write(W,e&255)},b0=function(){var e=t.mem_read(W)&255;return W=W+1&65535,e|=t.mem_read(W)<<8,W=W+1&65535,e},B0=function(e){e?(f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535):f=f+2&65535},W0=function(e){if(e){t0+=5;var b=I(t.mem_read(f+1&65535));f=f+b+1&65535}else f=f+1&65535},O0=function(e){e?(t0+=7,L0(f+3&65535),f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535):f=f+2&65535},F0=function(e){e&&(t0+=6,f=b0()-1&65535)},p0=function(e){L0(f+1&65535),f=e-1&65535},c0=function(e){var b=n+e;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)+(n&15)&16?1:0,c.P=(n&128)===(e&128)&&(n&128)!==(b&128)?1:0,c.N=0,c.C=b&256?1:0,n=b&255,Q(n)},a0=function(e){var b=n+e+c.C;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)+(n&15)+c.C&16?1:0,c.P=(n&128)===(e&128)&&(n&128)!==(b&128)?1:0,c.N=0,c.C=b&256?1:0,n=b&255,Q(n)},E=function(e){var b=n-e;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(n&15)-(e&15)&16?1:0,c.P=(n&128)!==(e&128)&&(n&128)!==(b&128)?1:0,c.N=1,c.C=b&256?1:0,n=b&255,Q(n)},k=function(e){var b=n-e-c.C;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(n&15)-(e&15)-c.C&16?1:0,c.P=(n&128)!==(e&128)&&(n&128)!==(b&128)?1:0,c.N=1,c.C=b&256?1:0,n=b&255,Q(n)},M=function(e){var b=n;E(e),n=b,Q(e)},f0=function(e){n&=e&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=1,c.P=l0(n),c.N=0,c.C=0,Q(n)},Z=function(e){n=(e|n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n),c.N=0,c.C=0,Q(n)},n0=function(e){n=(e^n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n),c.N=0,c.C=0,Q(n)},L=function(e){var b=e+1;return c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)===15?1:0,c.P=e===127?1:0,c.N=0,b&=255,Q(b),b},O=function(e){var b=e-1;return c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)===0?1:0,c.P=e===128?1:0,c.N=1,b&=255,Q(b),b},P0=function(e){var b=i|x<<8,_=b+e;c.N=0,c.C=_&65536?1:0,c.H=(b&4095)+(e&4095)&4096?1:0,i=_&255,x=(_&65280)>>>8,Q(x)},X=function(e){e+=c.C;var b=i|x<<8,_=b+e;c.S=_&32768?1:0,c.Z=_&65535?0:1,c.H=(b&4095)+(e&4095)&4096?1:0,c.P=(b&32768)===(e&32768)&&(_&32768)!==(b&32768)?1:0,c.N=0,c.C=_&65536?1:0,i=_&255,x=_>>>8&255,Q(x)},r0=function(e){e+=c.C;var b=i|x<<8,_=b-e;c.S=_&32768?1:0,c.Z=_&65535?0:1,c.H=(b&4095)-(e&4095)&4096?1:0,c.P=(b&32768)!==(e&32768)&&(_&32768)!==(b&32768)?1:0,c.N=1,c.C=_&65536?1:0,i=_&255,x=_>>>8&255,Q(x)},C0=function(e){var b=t.io_read(e);return c.S=b&128?1:0,c.Z=b?0:1,c.H=0,c.P=l0(b)?1:0,c.N=0,Q(b),b},j=function(){n!==128&&(n=I(n),n=-n&255),c.S=n&128?1:0,c.Z=n?0:1,c.H=(-n&15)>0?1:0,c.P=n===128?1:0,c.N=1,c.C=n?1:0,Q(n)},m0=function(){var e=t.mem_read(i|x<<8);t.mem_write(d|o<<8,e);var b=(d|o<<8)+1;d=b&255,o=(b&65280)>>>8,b=(i|x<<8)+1,i=b&255,x=(b&65280)>>>8,b=(m|a<<8)-1,m=b&255,a=(b&65280)>>>8,c.H=0,c.P=m||a?1:0,c.N=0,c.Y=(n+e&2)>>>1,c.X=(n+e&8)>>>3},N0=function(){var e=c.C,b=t.mem_read(i|x<<8);M(b),c.C=e,c.Y=(n-b-c.H&2)>>>1,c.X=(n-b-c.H&8)>>>3;var _=(i|x<<8)+1;i=_&255,x=(_&65280)>>>8,_=(m|a<<8)-1,m=_&255,a=(_&65280)>>>8,c.P=_?1:0},V=function(){a=O(a),t.mem_write(i|x<<8,t.io_read(a<<8|m));var e=(i|x<<8)+1;i=e&255,x=(e&65280)>>>8,c.N=1},e0=function(){t.io_write(a<<8|m,t.mem_read(i|x<<8));var e=(i|x<<8)+1;i=e&255,x=(e&65280)>>>8,a=O(a),c.N=1},s0=function(){c.N=0,c.H=0;var e=t.mem_read(i|x<<8);t.mem_write(d|o<<8,e);var b=(d|o<<8)-1;d=b&255,o=(b&65280)>>>8,b=(i|x<<8)-1,i=b&255,x=(b&65280)>>>8,b=(m|a<<8)-1,m=b&255,a=(b&65280)>>>8,c.P=m||a?1:0,c.Y=(n+e&2)>>>1,c.X=(n+e&8)>>>3},_0=function(){var e=c.C,b=t.mem_read(i|x<<8);M(b),c.C=e,c.Y=(n-b-c.H&2)>>>1,c.X=(n-b-c.H&8)>>>3;var _=(i|x<<8)-1;i=_&255,x=(_&65280)>>>8,_=(m|a<<8)-1,m=_&255,a=(_&65280)>>>8,c.P=_?1:0},R0=function(){a=O(a),t.mem_write(i|x<<8,t.io_read(a<<8|m));var e=(i|x<<8)-1;i=e&255,x=(e&65280)>>>8,c.N=1},X0=function(){t.io_write(a<<8|m,t.mem_read(i|x<<8));var e=(i|x<<8)-1;i=e&255,x=(e&65280)>>>8,a=O(a),c.N=1},o0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=(e<<1|c.C)&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},d0=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127|c.C<<7,c.Z=e&255?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e&255},E0=function(e){c.N=0,c.H=0;var b=c.C;return c.C=(e&128)>>>7,e=(e<<1|b)&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},w0=function(e){c.N=0,c.H=0;var b=c.C;return c.C=e&1,e=e>>>1&127|b<<7,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},z0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=e<<1&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},U=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127|e&128,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},K0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=e<<1&255|1,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},G0=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127,c.Z=e?0:1,c.P=l0(e),c.S=0,Q(e),e},q0=function(e){c.N=0;var b=A+e;c.C=b&65536?1:0,c.H=(A&4095)+(e&4095)&4096?1:0,Q((b&65280)>>>8),A=b&65535},S=[];S[0]=function(){},S[1]=function(){f=f+1&65535,m=t.mem_read(f),f=f+1&65535,a=t.mem_read(f)},S[2]=function(){t.mem_write(m|a<<8,n)},S[3]=function(){var e=m|a<<8;e+=1,m=e&255,a=(e&65280)>>>8},S[4]=function(){a=L(a)},S[5]=function(){a=O(a)},S[6]=function(){f=f+1&65535,a=t.mem_read(f)},S[7]=function(){var e=c.S,b=c.Z,_=c.P;n=o0(n),c.S=e,c.Z=b,c.P=_},S[8]=function(){var e=n;n=Y,Y=e,e=U0(),T0(Y0()),k0(e)},S[9]=function(){P0(m|a<<8)},S[10]=function(){n=t.mem_read(m|a<<8)},S[11]=function(){var e=m|a<<8;e-=1,m=e&255,a=(e&65280)>>>8},S[12]=function(){m=L(m)},S[13]=function(){m=O(m)},S[14]=function(){f=f+1&65535,m=t.mem_read(f)},S[15]=function(){var e=c.S,b=c.Z,_=c.P;n=d0(n),c.S=e,c.Z=b,c.P=_},S[16]=function(){a=a-1&255,W0(a!==0)},S[17]=function(){f=f+1&65535,d=t.mem_read(f),f=f+1&65535,o=t.mem_read(f)},S[18]=function(){t.mem_write(d|o<<8,n)},S[19]=function(){var e=d|o<<8;e+=1,d=e&255,o=(e&65280)>>>8},S[20]=function(){o=L(o)},S[21]=function(){o=O(o)},S[22]=function(){f=f+1&65535,o=t.mem_read(f)},S[23]=function(){var e=c.S,b=c.Z,_=c.P;n=E0(n),c.S=e,c.Z=b,c.P=_},S[24]=function(){var e=I(t.mem_read(f+1&65535));f=f+e+1&65535},S[25]=function(){P0(d|o<<8)},S[26]=function(){n=t.mem_read(d|o<<8)},S[27]=function(){var e=d|o<<8;e-=1,d=e&255,o=(e&65280)>>>8},S[28]=function(){d=L(d)},S[29]=function(){d=O(d)},S[30]=function(){f=f+1&65535,d=t.mem_read(f)},S[31]=function(){var e=c.S,b=c.Z,_=c.P;n=w0(n),c.S=e,c.Z=b,c.P=_},S[32]=function(){W0(!c.Z)},S[33]=function(){f=f+1&65535,i=t.mem_read(f),f=f+1&65535,x=t.mem_read(f)},S[34]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,i),t.mem_write(e+1&65535,x)},S[35]=function(){var e=i|x<<8;e+=1,i=e&255,x=(e&65280)>>>8},S[36]=function(){x=L(x)},S[37]=function(){x=O(x)},S[38]=function(){f=f+1&65535,x=t.mem_read(f)},S[39]=function(){var e=n;c.N?((c.H||(n&15)>9)&&(e-=6),(c.C||n>153)&&(e-=96)):((c.H||(n&15)>9)&&(e+=6),(c.C||n>153)&&(e+=96)),c.S=e&128?1:0,c.Z=e&255?0:1,c.H=n&16^e&16?1:0,c.P=l0(e&255),c.C=c.C||n>153?1:0,n=e&255,Q(n)},S[40]=function(){W0(!!c.Z)},S[41]=function(){P0(i|x<<8)},S[42]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,i=t.mem_read(e),x=t.mem_read(e+1&65535)},S[43]=function(){var e=i|x<<8;e-=1,i=e&255,x=(e&65280)>>>8},S[44]=function(){i=L(i)},S[45]=function(){i=O(i)},S[46]=function(){f=f+1&65535,i=t.mem_read(f)},S[47]=function(){n=~n&255,c.N=1,c.H=1,Q(n)},S[48]=function(){W0(!c.C)},S[49]=function(){W=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f+2&65535},S[50]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,n)},S[51]=function(){W=W+1&65535},S[52]=function(){var e=i|x<<8;t.mem_write(e,L(t.mem_read(e)))},S[53]=function(){var e=i|x<<8;t.mem_write(e,O(t.mem_read(e)))},S[54]=function(){f=f+1&65535,t.mem_write(i|x<<8,t.mem_read(f))},S[55]=function(){c.N=0,c.H=0,c.C=1,Q(n)},S[56]=function(){W0(!!c.C)},S[57]=function(){P0(W)},S[58]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,n=t.mem_read(e)},S[59]=function(){W=W-1&65535},S[60]=function(){n=L(n)},S[61]=function(){n=O(n)},S[62]=function(){n=t.mem_read(f+1&65535),f=f+1&65535},S[63]=function(){c.N=0,c.H=c.C,c.C=c.C?0:1,Q(n)},S[192]=function(){F0(!c.Z)},S[193]=function(){var e=b0();m=e&255,a=(e&65280)>>>8},S[194]=function(){B0(!c.Z)},S[195]=function(){f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535},S[196]=function(){O0(!c.Z)},S[197]=function(){L0(m|a<<8)},S[198]=function(){f=f+1&65535,c0(t.mem_read(f))},S[199]=function(){p0(0)},S[200]=function(){F0(!!c.Z)},S[201]=function(){f=b0()-1&65535},S[202]=function(){B0(!!c.Z)},S[203]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=(e&56)>>>3,_=e&7;if(e<64){var y0=[o0,d0,E0,w0,z0,U,K0,G0];_===0?a=y0[b](a):_===1?m=y0[b](m):_===2?o=y0[b](o):_===3?d=y0[b](d):_===4?x=y0[b](x):_===5?i=y0[b](i):_===6?t.mem_write(i|x<<8,y0[b](t.mem_read(i|x<<8))):_===7&&(n=y0[b](n))}else e<128?(_===0?c.Z=a&1<>>8},S[210]=function(){B0(!c.C)},S[211]=function(){f=f+1&65535,t.io_write(n<<8|t.mem_read(f),n)},S[212]=function(){O0(!c.C)},S[213]=function(){L0(d|o<<8)},S[214]=function(){f=f+1&65535,E(t.mem_read(f))},S[215]=function(){p0(16)},S[216]=function(){F0(!!c.C)},S[217]=function(){var e=a;a=y,y=e,e=m,m=p,p=e,e=o,o=N,N=e,e=d,d=w,w=e,e=x,x=G,G=e,e=i,i=u0,u0=e},S[218]=function(){B0(!!c.C)},S[219]=function(){f=f+1&65535,n=t.io_read(n<<8|t.mem_read(f))},S[220]=function(){O0(!!c.C)},S[221]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=D[e];b?(b(),t0+=s[e]):(f=f-1&65535,t0+=u[0])},S[222]=function(){f=f+1&65535,k(t.mem_read(f))},S[223]=function(){p0(24)},S[224]=function(){F0(!c.P)},S[225]=function(){var e=b0();i=e&255,x=(e&65280)>>>8},S[226]=function(){B0(!c.P)},S[227]=function(){var e=t.mem_read(W);t.mem_write(W,i),i=e,e=t.mem_read(W+1&65535),t.mem_write(W+1&65535,x),x=e},S[228]=function(){O0(!c.P)},S[229]=function(){L0(i|x<<8)},S[230]=function(){f=f+1&65535,f0(t.mem_read(f))},S[231]=function(){p0(32)},S[232]=function(){F0(!!c.P)},S[233]=function(){f=i|x<<8,f=f-1&65535},S[234]=function(){B0(!!c.P)},S[235]=function(){var e=o;o=x,x=e,e=d,d=i,i=e},S[236]=function(){O0(!!c.P)},S[237]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=B[e];b?(b(),t0+=r[e]):t0+=u[0]},S[238]=function(){f=f+1&65535,n0(t.mem_read(f))},S[239]=function(){p0(40)},S[240]=function(){F0(!c.S)},S[241]=function(){var e=b0();T0(e&255),n=(e&65280)>>>8},S[242]=function(){B0(!c.S)},S[243]=function(){v=!0},S[244]=function(){O0(!c.S)},S[245]=function(){L0(U0()|n<<8)},S[246]=function(){f=f+1&65535,Z(t.mem_read(f))},S[247]=function(){p0(48)},S[248]=function(){F0(!!c.S)},S[249]=function(){W=i|x<<8},S[250]=function(){B0(!!c.S)},S[251]=function(){V0=!0},S[252]=function(){O0(!!c.S)},S[253]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=D[e];if(b){var _=A;A=R,b(),R=A,A=_,t0+=s[e]}else f=f-1&65535,t0+=u[0]},S[254]=function(){f=f+1&65535,M(t.mem_read(f))},S[255]=function(){p0(56)};let B=[];B[64]=function(){a=C0(a<<8|m)},B[65]=function(){t.io_write(a<<8|m,a)},B[66]=function(){r0(m|a<<8)},B[67]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,m),t.mem_write(e+1&65535,a)},B[68]=function(){j()},B[69]=function(){f=b0()-1&65535,H=D0},B[70]=function(){M0=0},B[71]=function(){i0=n},B[72]=function(){m=C0(a<<8|m)},B[73]=function(){t.io_write(a<<8|m,m)},B[74]=function(){X(m|a<<8)},B[75]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,m=t.mem_read(e),a=t.mem_read(e+1&65535)},B[76]=function(){j()},B[77]=function(){f=b0()-1&65535},B[78]=function(){M0=0},B[79]=function(){T=n},B[80]=function(){o=C0(a<<8|m)},B[81]=function(){t.io_write(a<<8|m,o)},B[82]=function(){r0(d|o<<8)},B[83]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,d),t.mem_write(e+1&65535,o)},B[84]=function(){j()},B[85]=function(){f=b0()-1&65535,H=D0},B[86]=function(){M0=1},B[87]=function(){n=i0,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=D0,c.N=0,Q(n)},B[88]=function(){d=C0(a<<8|m)},B[89]=function(){t.io_write(a<<8|m,d)},B[90]=function(){X(d|o<<8)},B[91]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,d=t.mem_read(e),o=t.mem_read(e+1&65535)},B[92]=function(){j()},B[93]=function(){f=b0()-1&65535,H=D0},B[94]=function(){M0=2},B[95]=function(){n=T,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=D0,c.N=0,Q(n)},B[96]=function(){x=C0(a<<8|m)},B[97]=function(){t.io_write(a<<8|m,x)},B[98]=function(){r0(i|x<<8)},B[99]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,i),t.mem_write(e+1&65535,x)},B[100]=function(){j()},B[101]=function(){f=b0()-1&65535,H=D0},B[102]=function(){M0=0},B[103]=function(){var e=t.mem_read(i|x<<8),b=e&15,_=n&15;e=(e&240)>>>4|_<<4,n=n&240|b,t.mem_write(i|x<<8,e),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n)?1:0,c.N=0,Q(n)},B[104]=function(){i=C0(a<<8|m)},B[105]=function(){t.io_write(a<<8|m,i)},B[106]=function(){X(i|x<<8)},B[107]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,i=t.mem_read(e),x=t.mem_read(e+1&65535)},B[108]=function(){j()},B[109]=function(){f=b0()-1&65535,H=D0},B[110]=function(){M0=0},B[111]=function(){var e=t.mem_read(i|x<<8),b=e&240,_=n&15;e=(e&15)<<4|_,n=n&240|b>>>4,t.mem_write(i|x<<8,e),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n)?1:0,c.N=0,Q(n)},B[112]=function(){C0(a<<8|m)},B[113]=function(){t.io_write(a<<8|m,0)},B[114]=function(){r0(W)},B[115]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,W&255),t.mem_write(e+1&65535,W>>>8&255)},B[116]=function(){j()},B[117]=function(){f=b0()-1&65535,H=D0},B[118]=function(){M0=1},B[120]=function(){n=C0(a<<8|m)},B[121]=function(){t.io_write(a<<8|m,n)},B[122]=function(){X(W)},B[123]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,W=t.mem_read(e),W|=t.mem_read(e+1&65535)<<8},B[124]=function(){j()},B[125]=function(){f=b0()-1&65535,H=D0},B[126]=function(){M0=2},B[160]=function(){m0()},B[161]=function(){N0()},B[162]=function(){V()},B[163]=function(){e0()},B[168]=function(){s0()},B[169]=function(){_0()},B[170]=function(){R0()},B[171]=function(){X0()},B[176]=function(){m0(),(a||m)&&(t0+=5,f=f-2&65535)},B[177]=function(){N0(),!c.Z&&(a||m)&&(t0+=5,f=f-2&65535)},B[178]=function(){V(),a&&(t0+=5,f=f-2&65535)},B[179]=function(){e0(),a&&(t0+=5,f=f-2&65535)},B[184]=function(){s0(),(a||m)&&(t0+=5,f=f-2&65535)},B[185]=function(){_0(),!c.Z&&(a||m)&&(t0+=5,f=f-2&65535)},B[186]=function(){R0(),a&&(t0+=5,f=f-2&65535)},B[187]=function(){X0(),a&&(t0+=5,f=f-2&65535)};let D=[];D[9]=function(){q0(m|a<<8)},D[25]=function(){q0(d|o<<8)},D[33]=function(){f=f+1&65535,A=t.mem_read(f),f=f+1&65535,A|=t.mem_read(f)<<8},D[34]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,A&255),t.mem_write(e+1&65535,A>>>8&255)},D[35]=function(){A=A+1&65535},D[36]=function(){A=L(A>>>8)<<8|A&255},D[37]=function(){A=O(A>>>8)<<8|A&255},D[38]=function(){f=f+1&65535,A=t.mem_read(f)<<8|A&255},D[41]=function(){q0(A)},D[42]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,A=t.mem_read(e),A|=t.mem_read(e+1&65535)<<8},D[43]=function(){A=A-1&65535},D[44]=function(){A=L(A&255)|A&65280},D[45]=function(){A=O(A&255)|A&65280},D[46]=function(){f=f+1&65535,A=t.mem_read(f)&255|A&65280},D[52]=function(){f=f+1&65535;var e=I(t.mem_read(f)),b=t.mem_read(e+A&65535);t.mem_write(e+A&65535,L(b))},D[53]=function(){f=f+1&65535;var e=I(t.mem_read(f)),b=t.mem_read(e+A&65535);t.mem_write(e+A&65535,O(b))},D[54]=function(){f=f+1&65535;var e=I(t.mem_read(f));f=f+1&65535,t.mem_write(A+e&65535,t.mem_read(f))},D[57]=function(){q0(W)},D[68]=function(){a=A>>>8&255},D[69]=function(){a=A&255},D[70]=function(){f=f+1&65535;var e=I(t.mem_read(f));a=t.mem_read(A+e&65535)},D[76]=function(){m=A>>>8&255},D[77]=function(){m=A&255},D[78]=function(){f=f+1&65535;var e=I(t.mem_read(f));m=t.mem_read(A+e&65535)},D[84]=function(){o=A>>>8&255},D[85]=function(){o=A&255},D[86]=function(){f=f+1&65535;var e=I(t.mem_read(f));o=t.mem_read(A+e&65535)},D[92]=function(){d=A>>>8&255},D[93]=function(){d=A&255},D[94]=function(){f=f+1&65535;var e=I(t.mem_read(f));d=t.mem_read(A+e&65535)},D[96]=function(){A=A&255|a<<8},D[97]=function(){A=A&255|m<<8},D[98]=function(){A=A&255|o<<8},D[99]=function(){A=A&255|d<<8},D[100]=function(){},D[101]=function(){A=A&255|(A&255)<<8},D[102]=function(){f=f+1&65535;var e=I(t.mem_read(f));x=t.mem_read(A+e&65535)},D[103]=function(){A=A&255|n<<8},D[104]=function(){A=A&65280|a},D[105]=function(){A=A&65280|m},D[106]=function(){A=A&65280|o},D[107]=function(){A=A&65280|d},D[108]=function(){A=A&65280|A>>>8},D[109]=function(){},D[110]=function(){f=f+1&65535;var e=I(t.mem_read(f));i=t.mem_read(A+e&65535)},D[111]=function(){A=A&65280|n},D[112]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,a)},D[113]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,m)},D[114]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,o)},D[115]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,d)},D[116]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,x)},D[117]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,i)},D[119]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,n)},D[124]=function(){n=A>>>8&255},D[125]=function(){n=A&255},D[126]=function(){f=f+1&65535;var e=I(t.mem_read(f));n=t.mem_read(A+e&65535)},D[132]=function(){c0(A>>>8&255)},D[133]=function(){c0(A&255)},D[134]=function(){f=f+1&65535;var e=I(t.mem_read(f));c0(t.mem_read(A+e&65535))},D[140]=function(){a0(A>>>8&255)},D[141]=function(){a0(A&255)},D[142]=function(){f=f+1&65535;var e=I(t.mem_read(f));a0(t.mem_read(A+e&65535))},D[148]=function(){E(A>>>8&255)},D[149]=function(){E(A&255)},D[150]=function(){f=f+1&65535;var e=I(t.mem_read(f));E(t.mem_read(A+e&65535))},D[156]=function(){k(A>>>8&255)},D[157]=function(){k(A&255)},D[158]=function(){f=f+1&65535;var e=I(t.mem_read(f));k(t.mem_read(A+e&65535))},D[164]=function(){f0(A>>>8&255)},D[165]=function(){f0(A&255)},D[166]=function(){f=f+1&65535;var e=I(t.mem_read(f));f0(t.mem_read(A+e&65535))},D[172]=function(){n0(A>>>8&255)},D[173]=function(){n0(A&255)},D[174]=function(){f=f+1&65535;var e=I(t.mem_read(f));n0(t.mem_read(A+e&65535))},D[180]=function(){Z(A>>>8&255)},D[181]=function(){Z(A&255)},D[182]=function(){f=f+1&65535;var e=I(t.mem_read(f));Z(t.mem_read(A+e&65535))},D[188]=function(){M(A>>>8&255)},D[189]=function(){M(A&255)},D[190]=function(){f=f+1&65535;var e=I(t.mem_read(f));M(t.mem_read(A+e&65535))},D[203]=function(){f=f+1&65535;var e=I(t.mem_read(f));f=f+1&65535;var b=t.mem_read(f),_;if(b<64){var y0=[o0,d0,E0,w0,z0,U,K0,G0],$0=y0[(b&56)>>>3],_=$0(t.mem_read(A+e&65535));t.mem_write(A+e&65535,_)}else{var I0=(b&56)>>>3;b<128?(c.N=0,c.H=1,c.Z=t.mem_read(A+e&65535)&1<>>8&255)},D[229]=function(){L0(A)},D[233]=function(){f=A-1&65535},D[249]=function(){W=A};let u=[4,10,7,6,4,4,7,4,4,11,7,6,4,4,7,4,8,10,7,6,4,4,7,4,12,11,7,6,4,4,7,4,7,10,16,6,4,4,7,4,7,11,16,6,4,4,7,4,7,10,13,6,11,11,10,4,7,11,13,6,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,7,7,7,7,7,7,4,7,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,5,10,10,10,10,11,7,11,5,10,10,0,10,17,7,11,5,10,10,11,10,11,7,11,5,4,10,11,10,0,7,11,5,10,10,19,10,11,7,11,5,4,10,4,10,0,7,11,5,10,10,4,10,11,7,11,5,6,10,4,10,0,7,11],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,0,12,12,15,20,8,14,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],g=[8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8],s=[0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,14,20,10,8,8,11,0,0,15,20,10,8,8,11,0,0,0,0,0,23,23,19,0,0,15,0,0,0,0,0,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,8,8,8,8,8,8,19,8,8,8,8,8,8,8,19,8,19,19,19,19,19,19,0,19,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,15,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0];this.saveState=q,this.loadState=H0,this.reset=z,this.advanceInsn=F,this.interrupt=A0,this.getPC=()=>f,this.getSP=()=>W,this.getHalted=()=>P}var Ye=class{constructor(){this.retryInterrupts=!1;this.retryData=-1}buildCPU(){this.memBus&&this.ioBus&&(this.cpu=new vn({mem_read:this.memBus.read.bind(this.memBus),mem_write:this.memBus.write.bind(this.memBus),io_read:this.ioBus.read.bind(this.ioBus),io_write:this.ioBus.write.bind(this.ioBus)}))}connectMemoryBus(t){this.memBus=t,this.buildCPU()}connectIOBus(t){this.ioBus=t,this.buildCPU()}advanceInsn(){return this.retryInterrupts&&this.retryData>=0&&this.cpu.interrupt(!1,this.retryData)&&(this.retryData=-1),this.cpu.advanceInsn()}reset(){this.cpu.reset()}interrupt(t){!this.cpu.interrupt(!1,t)&&this.retryInterrupts&&(this.retryData=t)}NMI(){this.cpu.interrupt(!0,0)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.getHalted()}saveState(){return this.cpu.saveState()}loadState(t){this.cpu.loadState(t)}isStable(){return!0}};var it=class{constructor(){this.master=new MasterChannel}start(){this.looper||(this.looper=new AudioLooper(512),this.looper.setChannel(this.master),this.looper.activate())}stop(){this.looper&&(this.looper.setChannel(null),this.looper=null)}},Dt=class{constructor(t){this.psg=new PsgDeviceChannel;this.curreg=0;this.master=t,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),t.master.addChannel(this.psg)}reset(){for(var t=15;t>=0;t--)this.selectRegister(t),this.setData(0)}selectRegister(t){this.curreg=t&15}setData(t){this.psg.writeRegisterAY(this.curreg,t&255)}readData(){return this.psg.readRegister(this.curreg)}currentRegister(){return this.curreg}},Rt=class{constructor(t){this.psg=new PsgDeviceChannel;this.master=t,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489),t.master.addChannel(this.psg)}reset(){}setData(t){this.psg.writeRegisterSN(0,t&255)}};function En(h){for(var t=new it,n=1;n<=h;n++){var a=new gn;t["pokey"+n]=a,t.master.addChannel(a)}return t}function Re(h,t){for(var n=new Uint8Array(h.length*t.length),a=0,m=0;m.5?1:0;var Y0=Re(I,z),T0=Re(z,H0),k0=[Y0,z,T0,z,I,q,H0,q],Q=We(2),l0=We(6),L0=We(31),b0=We(93),B0=Re(A0,H0),W0=Re(z,Q),O0=Re(z,l0),F0=[t0,H0,B0,T0,Q,Q,L0,W0,F,z,L0,t0,l0,l0,b0,O0],p0=new Uint8Array(16),c0=new Float32Array(4),a0=new Float32Array(4),E=new Float32Array(4),k=new Uint8Array(4),M=[t0,t0,t0,t0],f0,Z,n0,L,O=!0;this.setBufferLength=function(X){f0=new Int32Array(X)},this.getBuffer=function(){return f0},this.setSampleRate=function(X){Z=X,L=v/X};function P0(X){var r0=p0[8],C0=r0&N?G:w,j,m0=X&4,N0=m0>>1,V=m0>>2;r0&i>>V?(r0&d>>V?j=p0[m0+2]*256+p0[m0+0]+7:j=(p0[m0+2]*256+p0[m0+0]+1)*C0,a0[N0+1]=L/j,a0[N0+0]=0):(r0&d>>V?j=p0[m0+0]+4:j=(p0[m0+0]+1)*C0,a0[N0+0]=L/j,j=(p0[m0+2]+1)*C0,a0[N0+1]=L/j)}this.setRegister=function(X,r0){if(X&=15,r0&=255,p0[X]!=r0)switch(p0[X]=r0,X){case 0:case 2:case 4:case 6:case 8:O=!0;break;case 1:case 3:case 5:case 7:E[X>>1]=r0&15,M[X>>1]=k0[r0>>5];break}},this.getRegister=function(X){return X&=15,p0[X]},this.setTIARegister=function(X,r0){switch(X){case 23:case 24:p0[(X&1)*4]=r0&31,O=!0;break;case 21:case 22:M[(X&1)*2]=F0[r0&15];break;case 25:case 26:E[(X&1)*2]=r0&15;break}},this.generate=function(X){O&&(P0(0),P0(4),O=!1);for(var r0=0;r00&&m0<1&&N0>0){var V=M[j],e0=c0[j]+=m0;e0>V.length&&(e0=c0[j]=e0-Math.floor(e0/V.length)*V.length);var s0=V[Math.floor(e0)];s0&&(C0+=N0)}}C0*=64,f0[r0]=C0,f0[r0+1]=C0}}},Zn=function(h){var t,n,a=[],m=0;h.onmessage=function(o){o&&o.data&&o.data.samples&&n&&(a.push(o.data.samples),m+=o.data.samples.length)},this.setBufferLength=function(o){n=new Int16Array(o),m=0},this.getBuffer=function(){return n},this.setSampleRate=function(o){t=o,h.postMessage({sampleRate:o})},this.generate=function(o){if(m=o.length)){d=0,x[Y]=o;var u0=(Y+1)%x.length;u0==i?Y=Math.floor(i+y/2)%x.length:Y=u0,o=x[Y]}},this.feedSample=function(G,u0){if(m+=G*u0,n+=a*u0,n>=1){for(m/=n;n>=1;)this.addSingleSample(m*a),n-=1;m*=n}}},ze=class{constructor(t){this.sa=new pn(t)}feedSample(t,n){this.sa.feedSample(t,n)}start(){this.sa.start()}stop(){this.sa.stop()}},Bt=class{constructor(t,n,a){this.audioGain=1/8192;this.bufferLength=n*2,this.channels=t.generate?[t]:t,this.channels.forEach(m=>{m.setBufferLength(this.bufferLength),m.setSampleRate(a)})}generate(t){var n=this.bufferLength,a=this.channels.map(o=>o.getBuffer());this.channels.forEach(o=>{o.generate(n)});for(let o=0;om+=d[o]),t.feedSample(m*this.audioGain,1)}}};var Ke=class{constructor(t,n){this.idx=0;this.sl=0;this.cur_sp=-1;this.singleFrame=!0;this.m=t,this.reset(n||1048576)}start(){this.m.connectProbe(this)}stop(){this.m.connectProbe(null)}reset(t){t&&(this.buf=new Uint32Array(t)),this.sl=0,this.cur_sp=-1,this.clear()}clear(){this.idx=0}logData(t){this.log(t)}log(t){this.idx>=this.buf.length||(this.buf[this.idx++]=t)}relog(t){this.buf[this.idx-1]=t}lastOp(){return this.idx>0?this.buf[this.idx-1]&4278190080:-1}lastAddr(){return this.idx>0?this.buf[this.idx-1]&16777215:-1}addLogBuffer(t){this.idx+t.length>this.buf.length&&(t=t.slice(0,this.buf.length-this.idx)),this.buf.set(t,this.idx),this.idx+=t.length}logClocks(t){t|=0,t>0&&(this.lastOp()==0?this.relog(this.lastAddr()+t|0):this.log(t|0))}logNewScanline(){this.log(2113929216),this.sl++}logNewFrame(){this.log(2130706432),this.sl=0,this.singleFrame&&this.clear()}logExecute(t,n){this.cur_sp!==n&&(nthis.cur_sp&&this.log(184549376|n),this.cur_sp=n),this.log(t|16777216)}logInterrupt(t){this.log(t|134217728)}logValue(t,n,a){this.log(t&65535|(n&255)<<16|a)}logRead(t,n){this.logValue(t,n,301989888)}logWrite(t,n){this.logValue(t,n,318767104)}logIORead(t,n){this.logValue(t,n,335544320)}logIOWrite(t,n){this.logValue(t,n,352321536)}logVRAMRead(t,n){this.logValue(t,n,369098752)}logVRAMWrite(t,n){this.logValue(t,n,385875968)}logIllegal(t){this.log(t|150994944)}logWait(t){this.log(t|520093696)}logDMARead(t,n){this.logValue(t,n,402653184)}logDMAWrite(t,n){this.logValue(t,n,419430400)}countEvents(t){for(var n=0,a=0;athis.rom.length)throw new Error(`ROM too big: ${t.length} > ${this.rom.length}`);this.rom.set(t)}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.inputs.set(t.inputs)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}advanceCPU(){var t=this.cpu,n=1;return this.cpu.isStable()&&this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),t.advanceClock?t.advanceClock():t.advanceInsn&&(n=t.advanceInsn(1)),this.probe.logClocks(n),n}probeMemoryBus(t){return{read:n=>{let a=t.read(n);return this.probe.logRead(n,a),a},write:(n,a)=>{this.probe.logWrite(n,a),t.write(n,a)},read32:n=>{let a=t.read32(n);return this.probe.logRead(n,a),a},write32:(n,a)=>{this.probe.logWrite(n,a),t.write32(n,a)}}}connectCPUMemoryBus(t){this.cpu.connectMemoryBus(this.probeMemoryBus(t))}probeIOBus(t){return{read:n=>{let a=t.read(n);return this.probe.logIORead(n,a),a},write:(n,a)=>{this.probe.logIOWrite(n,a),t.write(n,a)}}}probeDMABus(t){return{read:n=>{let a=t.read(n);return this.probe.logDMARead(n,a),a},write:(n,a)=>{this.probe.logDMAWrite(n,a),t.write(n,a)}}}connectCPUIOBus(t){this.cpu.connectIOBus(this.probeIOBus(t))}},ct=class extends ft{constructor(){super(...arguments);this.overscan=!1;this.rotate=0}getAudioParams(){return{sampleRate:this.sampleRate,stereo:!1}}connectAudio(n){this.audio=n}getVideoParams(){return{width:this.canvasWidth,height:this.numVisibleScanlines,aspect:this.aspectRatio,overscan:this.overscan,rotate:this.rotate}}connectVideo(n){this.pixels=n}},Nt=class extends ct{advanceFrame(t){this.preFrame();var n=0,a=0;this.probe.logNewFrame(),this.frameCycles=0;for(var m=0;m=64&&n<=127&&(x=It[n-64]),n>=160&&n<=191&&(x=It[n-160+64]),d++;break;case 221:case 253:var y=t==221?"ix":"iy";n==203?(x=Lt[m],i[2]=m,i[3]=a,d++):x=yt[n],x=x.replace(/[(]hl[)]/,"("+y+"+x)"),x=x.replace(/\bhl\b/,y),d++;break;default:x=yt[t];break}if((!x||!x.length)&&(x="??"),/\bxx\b/.test(x))x=x.replace(/\bxx\b/,"$"+$(i[d]+(i[d+1]<<8),4)),d+=2,Y=!0;else if(/\bx\b/.test(x)){if(x.startsWith("j")){var p=n<128?h+2+n:h+2-(256-n);p&=65535,x=x.replace(/\bx\b/,"$"+$(p,4)),Y=!0}else x=x.replace(/\bx\b/,"$"+$(i[d],2));d+=1}return{line:x.toUpperCase(),nbytes:d,isaddr:Y}}function je(){var h,t,n,a,m,o,d,x,i,Y,y=1,p=2,N=4,w=8,G=16,u0=32,A=64,R=128,i0=65534,T=65532,W=65530,f=65528,c=65526,g0=65524,M0=65522,H=0,D0,P,v,V0=[6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7,2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6,2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6],t0=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7],q=[4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],H0=function(u,r,g){i|=((u^r^g^g>>1)&128)>>6},z=function(u,r,g){i|=((u^r^g^g>>1)&32768)>>14},F=function(){return(t<<8)+n},A0=function(u){t=u>>8&255,n=u&255},x0=function(u){P(--d,u&255)},I=function(u){P(--d,u&255),P(--d,u>>8&255)},U0=function(u){P(--o,u&255)},Y0=function(u){P(--o,u&255),P(--o,u>>8&255)},T0=function(){return v(d++)},k0=function(){return v(d++)*256+v(d++)},Q=function(){return v(o++)},l0=function(){return v(o++)*256+v(o++)},L0=function(u){var r=0;u&128&&(I(x),r+=2),u&64&&(I(o),r+=2),u&32&&(I(m),r+=2),u&16&&(I(a),r+=2),u&8&&(x0(Y),r++),u&4&&(x0(n),r++),u&2&&(x0(t),r++),u&1&&(x0(i),r++),H+=r},b0=function(u){var r=0;u&128&&(Y0(x),r+=2),u&64&&(Y0(d),r+=2),u&32&&(Y0(m),r+=2),u&16&&(Y0(a),r+=2),u&8&&(U0(Y),r++),u&4&&(U0(n),r++),u&2&&(U0(t),r++),u&1&&(U0(i),r++),H+=r},B0=function(u){var r=0;u&1&&(i=T0(),r++),u&2&&(t=T0(),r++),u&4&&(n=T0(),r++),u&8&&(Y=T0(),r++),u&16&&(a=k0(),r+=2),u&32&&(m=k0(),r+=2),u&64&&(o=k0(),r+=2),u&128&&(x=k0(),r+=2),H+=r},W0=function(u){var r=0;u&1&&(i=Q(),r++),u&2&&(t=Q(),r++),u&4&&(n=Q(),r++),u&8&&(Y=Q(),r++),u&16&&(a=l0(),r+=2),u&32&&(m=l0(),r+=2),u&64&&(d=l0(),r+=2),u&128&&(x=l0(),r+=2),H+=r},O0=function(u){switch(u&15){case 0:return F();case 1:return a;case 2:return m;case 3:return o;case 4:return d;case 5:return x;case 8:return t;case 9:return n;case 10:return i;case 11:return Y;default:return null}},F0=function(u,r){switch(u&15){case 0:A0(r);return;case 1:a=r;return;case 2:m=r;return;case 3:o=r;return;case 4:d=r;return;case 5:x=r;return;case 8:t=r;return;case 9:n=r;return;case 10:i=r;return;case 11:Y=r;return;default:return}},p0=function(u,r){var g=u&136;(g==128||g==8)&&(g=0),r?(g=O0(u>>4),F0(u>>4,O0(u)),F0(u,g)):F0(u,O0(u>>4))},c0=function(u){return u>127?u-256:u},a0=function(u){return u>32767?u-65536:u},E=function(){var u=v(x++);return x&=65535,u},k=function(){var u=v(x++);x&=65535;var r=v(x++);return x&=65535,u*256+r},M=function(u){var r=v(u++);u&=65535;var g=v(u++);return u&=65535,r*256+g},f0=function(u,r){P(u++,r>>8&255),u&=65535,P(u,r&255)},Z=function(){var u=E(),r;switch(u&96){case 0:r=a;break;case 32:r=m;break;case 64:r=o;break;case 96:r=d;break}var g=null,s=null,e;if(u&128){switch(u&15){case 0:s=r,g=r+1,H+=2;break;case 1:s=r,g=r+2,H+=3;break;case 2:g=r-1,s=g,H+=2;break;case 3:g=r-2,s=g,H+=3;break;case 4:s=r;break;case 5:s=r+c0(n),H+=1;break;case 6:s=r+c0(t),H+=1;break;case 7:s=0;break;case 8:s=r+c0(E()),H+=1;break;case 9:s=r+a0(k()),H+=4;break;case 10:s=0;break;case 11:H+=4,s=r+F();break;case 12:e=c0(E()),s=x+e,H+=1;break;case 13:e=a0(k()),s=x+e,H+=5;break;case 14:s=0;break;case 15:H+=5,s=k();break}s&=65535,u&16&&(s=v(s)*256+v(s+1&65535),H+=3)}else{var b=u&31;b>15&&(b-=32),s=r+b,H+=1}if(g!==null)switch(u&96){case 0:a=g;break;case 32:m=g;break;case 64:o=g;break;case 96:d=g;break}return s&65535},n0=function(u){i&=~(N|w),u===0&&(i|=N),u&32768&&(i|=w)},L=function(u){return u++,u&=255,i&=~(N|p|w),i|=q[u],(u===0||u==128)&&(i|=p),u},O=function(u){return u--,u&=255,i&=~(N|p|w),i|=q[u],(u===127||u==255)&&(i|=p),u},P0=function(u,r){var g=u-r;return i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),g&255},X=function(u,r){var g=u-r;return i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g),g&65535},r0=function(u,r){var g=u+r;return i&=~(u0|y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),(g^u^r)&16&&(i|=u0),g&255},C0=function(u,r){var g=u+r;return i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g),g&65535},j=function(u,r){var g=u+r+(i&y);return i&=~(u0|y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),(g^u^r)&16&&(i|=u0),g&255},m0=function(u,r){var g=u-r-(i&y);return i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),g&255},N0=function(u,r){var g=u-r;i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g)},V=function(u,r){var g=u-r;i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g)},e0=function(u){return i&=~(y|N|p|w),u==128&&(i|=p),u=(~u&255)+1,u===0&&(i|=N),u&128&&(i|=w|y),u},s0=function(u){return i&=~(N|y|w),u&1&&(i|=y),u>>=1,u===0&&(i|=N),u&255},_0=function(u){return i&=~(N|y|w),u&1&&(i|=y),u=u&128|u>>1,i|=q[u],u},R0=function(u){var r=u;return i&=~(N|y|w|p),u&128&&(i|=y),u<<=1,i|=q[u],(u^r)&128&&(i|=p),u},X0=function(u){var r=u,g=i&y;return i&=~(N|y|w|p),u&128&&(i|=y),u=u<<1|g,i|=q[u],(u^r)&128&&(i|=p),u},o0=function(u){var r=i&y;return i&=~(N|y|w),u&1&&(i|=y),u=u>>1|r<<7,i|=q[u],u},d0=function(u,r){return i&=~(N|w|p),u^=r,i|=q[u],u},E0=function(u,r){return i&=~(N|w|p),u|=r,i|=q[u],u},w0=function(u,r){return i&=~(N|w|p),u&=r,i|=q[u],u},z0=function(u){return i&=~(N|w|p),u^=255,i|=q[u],i|=y,u},U=function(){return Y*256+E()},K0=function(){var u=H,r=null,g=null,s=x,e=E();switch(H+=V0[e],e){case 0:r=U(),P(r,e0(v(r)));break;case 3:r=U(),P(r,z0(v(r)));break;case 4:r=U(),P(r,s0(v(r)));break;case 6:r=U(),P(r,o0(v(r)));break;case 7:r=U(),P(r,_0(v(r)));break;case 8:r=U(),P(r,R0(v(r)));break;case 9:r=U(),P(r,X0(v(r)));break;case 10:r=U(),P(r,O(v(r)));break;case 12:r=U(),P(r,L(v(r)));break;case 13:r=U(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 14:r=U(),x=r;break;case 15:r=U(),P(r,0),i&=~(y|w|p),i|=N;break;case 18:break;case 19:break;case 22:r=a0(k()),x+=r;break;case 23:r=a0(k()),I(x),x+=r;break;case 25:var b=0,_=t&240,y0=t&15;(y0>9||i&32)&&(b|=6),_>128&&y0>9&&(b|=96),(_>144||i&1)&&(b|=96),r=b+t,i&=~(y|w|N|p),r&256&&(i|=y),t=r&255,i|=q[t];break;case 26:i|=E();break;case 28:i&=E();break;case 29:t=n&128?255:0,n0(F()),i&=~p;break;case 30:g=E(),p0(g,!0);break;case 31:g=E(),p0(g,!1);break;case 32:r=c0(E()),x+=r;break;case 33:r=c0(E());break;case 34:r=c0(E()),i&(y|N)||(x+=r);break;case 35:r=c0(E()),i&(y|N)&&(x+=r);break;case 36:r=c0(E()),i&y||(x+=r);break;case 37:r=c0(E()),i&y&&(x+=r);break;case 38:r=c0(E()),i&N||(x+=r);break;case 39:r=c0(E()),i&N&&(x+=r);break;case 40:r=c0(E()),i&p||(x+=r);break;case 41:r=c0(E()),i&p&&(x+=r);break;case 42:r=c0(E()),i&w||(x+=r);break;case 43:r=c0(E()),i&w&&(x+=r);break;case 44:r=c0(E()),i&w^(i&p)<<2||(x+=r);break;case 45:r=c0(E()),i&w^(i&p)<<2&&(x+=r);break;case 46:r=c0(E()),i&w^(i&p)<<2||i&N||(x+=r);break;case 47:r=c0(E()),(i&w^(i&p)<<2||i&N)&&(x+=r);break;case 48:a=Z(),a===0?i|=N:i&=~N;break;case 49:m=Z(),m===0?i|=N:i&=~N;break;case 50:d=Z();break;case 51:o=Z();break;case 52:L0(E());break;case 53:B0(E());break;case 54:b0(E());break;case 55:W0(E());break;case 57:x=k0();break;case 58:a+=n;break;case 59:i=T0(),i&R&&(H+=9,t=T0(),n=T0(),Y=T0(),a=k0(),m=k0(),o=k0()),x=k0();break;case 60:i&=E();break;case 61:r=t*n,r===0?i|=N:i&=~N,r&128?i|=y:i&=~y,A0(r);break;case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(W);break;case 64:t=e0(t);break;case 67:t=z0(t);break;case 68:t=s0(t);break;case 70:t=o0(t);break;case 71:t=_0(t);break;case 72:t=R0(t);break;case 73:t=X0(t);break;case 74:t=O(t);break;case 76:t=L(t);break;case 77:i&=~(N|w|p),i|=q[t];break;case 79:t=0,i&=~(w|p|y),i|=N;break;case 80:n=e0(n);break;case 83:n=z0(n);break;case 84:n=s0(n);break;case 86:n=o0(n);break;case 87:n=_0(n);break;case 88:n=R0(n);break;case 89:n=X0(n);break;case 90:n=O(n);break;case 92:n=L(n);break;case 93:i&=~(N|w|p),i|=q[n];break;case 95:n=0,i&=~(w|p|y),i|=N;break;case 96:r=Z(),P(r,e0(v(r)));break;case 99:r=Z(),P(r,z0(v(r)));break;case 100:r=Z(),P(r,s0(v(r)));break;case 102:r=Z(),P(r,o0(v(r)));break;case 103:r=Z(),P(r,_0(v(r)));break;case 104:r=Z(),P(r,R0(v(r)));break;case 105:r=Z(),P(r,X0(v(r)));break;case 106:r=Z(),P(r,O(v(r)));break;case 108:r=Z(),P(r,L(v(r)));break;case 109:r=Z(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 110:r=Z(),x=r;break;case 111:r=Z(),P(r,0),i&=~(y|w|p),i|=N;break;case 112:r=k(),P(r,e0(v(r)));break;case 115:r=k(),P(r,z0(v(r)));break;case 116:r=k(),P(r,s0(v(r)));break;case 118:r=k(),P(r,o0(v(r)));break;case 119:r=k(),P(r,_0(v(r)));break;case 120:r=k(),P(r,R0(v(r)));break;case 121:r=k(),P(r,X0(v(r)));break;case 122:r=k(),P(r,O(v(r)));break;case 124:r=k(),P(r,L(v(r)));break;case 125:r=k(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 126:r=k(),x=r;break;case 127:r=k(),P(r,0),i&=~(y|w|p),i|=N;break;case 128:t=P0(t,E());break;case 129:N0(t,E());break;case 130:t=m0(t,E());break;case 131:A0(X(F(),k()));break;case 132:t=w0(t,E());break;case 133:w0(t,E());break;case 134:t=E(),i&=~(N|w|p),i|=q[t];break;case 136:t=d0(t,E());break;case 137:t=j(t,E());break;case 138:t=E0(t,E());break;case 139:t=r0(t,E());break;case 140:V(a,k());break;case 141:r=c0(E()),I(x),x+=r;break;case 142:a=k(),n0(a),i&=~p;break;case 144:r=U(),t=P0(t,v(r));break;case 145:r=U(),N0(t,v(r));break;case 146:r=U(),t=m0(t,v(r));break;case 147:r=U(),A0(X(F(),M(r)));break;case 148:r=U(),t=w0(t,v(r));break;case 149:r=U(),w0(t,v(r));break;case 150:r=U(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 151:r=U(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 152:r=U(),t=d0(t,v(r));break;case 153:r=U(),t=j(t,v(r));break;case 154:r=U(),t=E0(t,v(r));break;case 155:r=U(),t=r0(t,v(r));break;case 156:r=U(),V(a,M(r));break;case 157:r=U(),I(x),x=r;break;case 158:r=U(),a=M(r),n0(a),i&=~p;break;case 159:r=U(),f0(r,a),n0(a),i&=~p;break;case 160:r=Z(),t=P0(t,v(r));break;case 161:r=Z(),N0(t,v(r));break;case 162:r=Z(),t=m0(t,v(r));break;case 163:r=Z(),A0(X(F(),M(r)));break;case 164:r=Z(),t=w0(t,v(r));break;case 165:r=Z(),w0(t,v(r));break;case 166:r=Z(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 167:r=Z(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 168:r=Z(),t=d0(t,v(r));break;case 169:r=Z(),t=j(t,v(r));break;case 170:r=Z(),t=E0(t,v(r));break;case 171:r=Z(),t=r0(t,v(r));break;case 172:r=Z(),V(a,M(r));break;case 173:r=Z(),I(x),x=r;break;case 174:r=Z(),a=M(r),n0(a),i&=~p;break;case 175:r=Z(),f0(r,a),n0(a),i&=~p;break;case 176:r=k(),t=P0(t,v(r));break;case 177:r=k(),N0(t,v(r));break;case 178:r=k(),t=m0(t,v(r));break;case 179:r=k(),A0(X(F(),M(r)));break;case 180:r=k(),t=w0(t,v(r));break;case 181:r=k(),w0(t,v(r));break;case 182:r=k(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 183:r=k(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 184:r=k(),t=d0(t,v(r));break;case 185:r=k(),t=j(t,v(r));break;case 186:r=k(),t=E0(t,v(r));break;case 187:r=k(),t=r0(t,v(r));break;case 188:r=k(),V(a,M(r));break;case 189:r=k(),I(x),x=r;break;case 190:r=k(),a=M(r),n0(a),i&=~p;break;case 191:r=k(),f0(r,a),n0(a),i&=~p;break;case 192:n=P0(n,E());break;case 193:N0(n,E());break;case 194:n=m0(n,E());break;case 195:A0(C0(F(),k()));break;case 196:n=w0(n,E());break;case 197:w0(n,E());break;case 198:n=E(),i&=~(N|w|p),i|=q[n];break;case 200:n=d0(n,E());break;case 201:n=j(n,E());break;case 202:n=E0(n,E());break;case 203:n=r0(n,E());break;case 204:r=k(),A0(r),n0(r),i&=~p;break;case 206:o=k(),n0(o),i&=~p;break;case 208:r=U(),n=P0(n,v(r));break;case 209:r=U(),N0(n,v(r));break;case 210:r=U(),n=m0(n,v(r));break;case 211:r=U(),A0(C0(F(),M(r)));break;case 212:r=U(),n=w0(n,v(r));break;case 213:r=U(),w0(n,v(r));break;case 214:r=U(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 215:r=U(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 216:r=U(),n=d0(n,v(r));break;case 217:r=U(),n=j(n,v(r));break;case 218:r=U(),n=E0(n,v(r));break;case 219:r=U(),n=r0(n,v(r));break;case 220:r=U(),g=M(r),A0(g),n0(g),i&=~p;break;case 221:r=U(),f0(r,F()),i&=~p;break;case 222:r=U(),o=M(r),n0(o),i&=~p;break;case 223:r=U(),f0(r,o),n0(o),i&=~p;break;case 224:r=Z(),n=P0(n,v(r));break;case 225:r=Z(),N0(n,v(r));break;case 226:r=Z(),n=m0(n,v(r));break;case 227:r=Z(),A0(C0(F(),M(r)));break;case 228:r=Z(),n=w0(n,v(r));break;case 229:r=Z(),w0(n,v(r));break;case 230:r=Z(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 231:r=Z(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 232:r=Z(),n=d0(n,v(r));break;case 233:r=Z(),n=j(n,v(r));break;case 234:r=Z(),n=E0(n,v(r));break;case 235:r=Z(),n=r0(n,v(r));break;case 236:r=Z(),g=M(r),A0(g),n0(g),i&=~p;break;case 237:r=Z(),f0(r,F()),i&=~p;break;case 238:r=Z(),o=M(r),n0(o),i&=~p;break;case 239:r=Z(),f0(r,o),n0(o),i&=~p;break;case 240:r=k(),n=P0(n,v(r));break;case 241:r=k(),N0(n,v(r));break;case 242:r=k(),n=m0(n,v(r));break;case 243:r=k(),A0(C0(F(),M(r)));break;case 244:r=k(),n=w0(n,v(r));break;case 245:r=k(),w0(n,v(r));break;case 246:r=k(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 247:r=k(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 248:r=k(),n=d0(n,v(r));break;case 249:r=k(),n=j(n,v(r));break;case 250:r=k(),n=E0(n,v(r));break;case 251:r=k(),n=r0(n,v(r));break;case 252:r=k(),g=M(r),A0(g),n0(g),i&=~p;break;case 253:r=k(),f0(r,F()),i&=~p;break;case 254:r=k(),o=M(r),n0(o),i&=~p;break;case 255:r=k(),f0(r,o),n0(o),i&=~p;break;case 16:switch(e=E(),H+=t0[e],e){case 33:r=a0(k());break;case 34:r=a0(k()),i&(y|N)||(x+=r);break;case 35:r=a0(k()),i&(y|N)&&(x+=r);break;case 36:r=a0(k()),i&y||(x+=r);break;case 37:r=a0(k()),i&y&&(x+=r);break;case 38:r=a0(k()),i&N||(x+=r);break;case 39:r=a0(k()),i&N&&(x+=r);break;case 40:r=a0(k()),i&p||(x+=r);break;case 41:r=a0(k()),i&p&&(x+=r);break;case 42:r=a0(k()),i&w||(x+=r);break;case 43:r=a0(k()),i&w&&(x+=r);break;case 44:r=a0(k()),i&w^(i&p)<<2||(x+=r);break;case 45:r=a0(k()),i&w^(i&p)<<2&&(x+=r);break;case 46:r=a0(k()),i&w^(i&p)<<2||i&N||(x+=r);break;case 47:r=a0(k()),(i&w^(i&p)<<2||i&N)&&(x+=r);break;case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(g0);break;case 131:V(F(),k());break;case 140:V(m,k());break;case 142:m=k(),n0(m),i&=~p;break;case 147:r=U(),V(F(),M(r));break;case 156:r=U(),V(m,M(r));break;case 158:r=U(),m=M(r),n0(m),i&=~p;break;case 159:r=U(),f0(r,m),n0(m),i&=~p;break;case 163:r=Z(),V(F(),M(r));break;case 172:r=Z(),V(m,M(r));break;case 174:r=Z(),m=M(r),n0(m),i&=~p;break;case 175:r=Z(),f0(r,m),n0(m),i&=~p;break;case 179:r=k(),V(F(),M(r));break;case 188:r=k(),V(m,M(r));break;case 190:r=k(),m=M(r),n0(m),i&=~p;break;case 191:r=k(),f0(r,m),n0(m),i&=~p;break;case 206:d=k(),n0(d),i&=~p;break;case 222:r=U(),d=M(r),n0(d),i&=~p;break;case 223:r=U(),f0(r,d),n0(d),i&=~p;break;case 238:r=Z(),d=M(r),n0(d),i&=~p;break;case 239:r=Z(),f0(r,d),n0(d),i&=~p;break;case 254:r=k(),d=M(r),n0(d),i&=~p;break;case 255:r=k(),f0(r,d),n0(d),i&=~p;break}break;case 17:switch(e=E(),H+=t0[e],e){case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(M0);break;case 131:V(o,k());break;case 140:V(d,k());break;case 147:r=U(),V(o,M(r));break;case 156:r=U(),V(d,M(r));break;case 163:r=Z(),V(o,M(r));break;case 172:r=Z(),V(d,M(r));break;case 179:r=k(),V(o,M(r));break;case 188:r=k(),V(d,M(r));break}break}return t&=255,n&=255,i&=255,Y&=255,a&=65535,m&=65535,o&=65535,d&=65535,x&=65535,H-u},G0=function(){x=M(i0),Y=0,i|=A|G,H=0,t=n=Y=a=m=o=d=0},q0=[[2,1,"NEG"],[1,0,"???"],[1,0,"???"],[2,1,"COM"],[2,1,"LSR"],[1,0,"???"],[2,1,"ROR"],[2,1,"ASR"],[2,1,"LSL"],[2,1,"ROL"],[2,1,"DEC"],[1,0,"???"],[2,1,"INC"],[2,1,"TST"],[2,1,"JMP"],[2,1,"CLR"],[1,0,"Prefix"],[1,0,"Prefix"],[1,2,"NOP"],[1,2,"SYNC"],[1,0,"???"],[1,0,"???"],[3,3,"LBRA"],[3,3,"LBSR"],[1,0,"???"],[1,2,"DAA"],[2,4,"ORCC"],[1,0,"???"],[2,4,"ANDCC"],[1,2,"SEX"],[2,20,"EXG"],[2,20,"TFR"],[2,5,"BRA"],[2,5,"BRN"],[2,5,"BHI"],[2,5,"BLS"],[2,5,"BCC"],[2,5,"BCS"],[2,5,"BNE"],[2,5,"BEQ"],[2,5,"BVC"],[2,5,"BVS"],[2,5,"BPL"],[2,5,"BMI"],[2,5,"BGE"],[2,5,"BLT"],[2,5,"BGT"],[2,5,"BLE"],[2,6,"LEAX"],[2,6,"LEAY"],[2,6,"LEAS"],[2,6,"LEAU"],[2,10,"PSHS"],[2,10,"PULS"],[2,11,"PSHU"],[2,11,"PULU"],[1,0,"???"],[1,2,"RTS"],[1,2,"ABX"],[1,2,"RTI"],[2,2,"CWAI"],[1,2,"MUL"],[1,2,"RESET"],[1,2,"SWI1"],[1,2,"NEGA"],[1,0,"???"],[1,0,"???"],[1,2,"COMA"],[1,2,"LSRA"],[1,0,"???"],[1,2,"RORA"],[1,2,"ASRA"],[1,2,"ASLA"],[1,2,"ROLA"],[1,2,"DECA"],[1,0,"???"],[1,2,"INCA"],[1,2,"TSTA"],[1,0,"???"],[1,2,"CLRA"],[1,2,"NEGB"],[1,0,"???"],[1,0,"???"],[1,2,"COMB"],[1,2,"LSRB"],[1,0,"???"],[1,2,"RORB"],[1,2,"ASRB"],[1,2,"ASLB"],[1,2,"ROLB"],[1,2,"DECB"],[1,0,"???"],[1,2,"INCB"],[1,2,"TSTB"],[1,0,"???"],[1,2,"CLRB"],[2,6,"NEG"],[1,0,"???"],[1,0,"???"],[2,6,"COM"],[2,6,"LSR"],[1,0,"???"],[2,6,"ROR"],[2,6,"ASR"],[2,6,"LSL"],[2,6,"ROL"],[2,6,"DEC"],[1,0,"???"],[2,6,"INC"],[2,6,"TST"],[2,6,"JMP"],[2,6,"CLR"],[3,7,"NEG"],[1,0,"???"],[1,0,"???"],[3,7,"COM"],[3,7,"LSR"],[1,0,"???"],[3,7,"ROR"],[3,7,"ASR"],[3,7,"LSL"],[3,7,"ROL"],[3,7,"DEC"],[1,0,"???"],[3,7,"INC"],[3,7,"TST"],[3,7,"JMP"],[3,7,"CLR"],[2,4,"SUBA"],[2,4,"CMPA"],[2,4,"SBCA"],[3,8,"SUBD"],[2,4,"ANDA"],[2,4,"BITA"],[2,4,"LDA"],[1,0,"???"],[2,4,"EORA"],[2,4,"ADCA"],[2,4,"ORA"],[2,4,"ADDA"],[3,8,"CMPX"],[2,5,"BSR"],[3,8,"LDX"],[1,0,"???"],[2,1,"SUBA"],[2,1,"CMPA"],[2,1,"SBCA"],[2,1,"SUBd"],[2,1,"ANDA"],[2,1,"BITA"],[2,1,"LDA"],[2,1,"STA"],[2,1,"EORA"],[2,1,"ADCA"],[2,1,"ORA"],[2,1,"ADDA"],[2,1,"CMPX"],[2,1,"JSR"],[2,1,"LDX"],[2,1,"STX"],[2,6,"SUBA"],[2,6,"CMPA"],[2,6,"SBCA"],[2,6,"SUBD"],[2,6,"ANDA"],[2,6,"BITA"],[2,6,"LDA"],[2,6,"STA"],[2,6,"EORA"],[2,6,"ADCA"],[2,6,"ORA"],[2,6,"ADDA"],[2,6,"CMPX"],[2,6,"JSR"],[2,6,"LDX"],[2,6,"STX"],[3,7,"SUBA"],[3,7,"CMPA"],[3,7,"SBCA"],[3,7,"SUBD"],[3,7,"ANDA"],[3,7,"BITA"],[3,7,"LDA"],[3,7,"STA"],[3,7,"EORA"],[3,7,"ADCA"],[3,7,"ORA"],[3,7,"ADDA"],[3,7,"CMPX"],[3,7,"JSR"],[3,7,"LDX"],[3,7,"STX"],[2,4,"SUBB"],[2,4,"CMPB"],[2,4,"SBCB"],[3,8,"ADDD"],[2,4,"ANDB"],[2,4,"BITB"],[2,4,"LDB"],[1,0,"???"],[2,4,"EORB"],[2,4,"ADCB"],[2,4,"ORB"],[2,4,"ADDB"],[3,8,"LDD"],[1,0,"???"],[3,8,"LDU"],[1,0,"???"],[2,1,"SUBB"],[2,1,"CMPB"],[2,1,"SBCB"],[2,1,"ADDD"],[2,1,"ANDB"],[2,1,"BITB"],[2,1,"LDB"],[2,1,"STB"],[2,1,"EORB"],[2,1,"ADCB"],[2,1,"ORB "],[2,1,"ADDB"],[2,1,"LDD "],[2,1,"STD "],[2,1,"LDU "],[2,1,"STU "],[2,6,"SUBB"],[2,6,"CMPB"],[2,6,"SBCB"],[2,6,"ADDD"],[2,6,"ANDB"],[2,6,"BITB"],[2,6,"LDB"],[2,6,"STB"],[2,6,"EORB"],[2,6,"ADCB"],[2,6,"ORB"],[2,6,"ADDB"],[2,6,"LDD"],[2,6,"STD"],[2,6,"LDU"],[2,6,"STU"],[3,7,"SUBB"],[3,7,"CMPB"],[3,7,"SBCB"],[3,7,"ADDD"],[3,7,"ANDB"],[3,7,"BITB"],[3,7,"LDB"],[3,7,"STB"],[3,7,"EORB"],[3,7,"ADCB"],[3,7,"ORB"],[3,7,"ADDB"],[3,7,"LDD"],[3,7,"STD"],[3,7,"LDU"],[3,7,"STU"]],S={63:[2,2,"SWI3"],131:[4,8,"CMPU"],140:[4,8,"CMPS"],147:[3,1,"CMPU"],156:[3,1,"CMPS"],163:[3,6,"CMPU"],172:[3,6,"CMPS"],179:[4,7,"CMPU"],188:[4,7,"CMPS"]},B={33:[5,3,"LBRN"],34:[5,3,"LBHI"],35:[5,3,"LBLS"],36:[5,3,"LBCC"],37:[5,3,"LBCS"],38:[5,3,"LBNE"],39:[5,3,"LBEQ"],40:[5,3,"LBVC"],41:[5,3,"LBVS"],42:[5,3,"LBPL"],43:[5,3,"LBMI"],44:[5,3,"LBGE"],45:[5,3,"LBLT"],46:[5,3,"LBGT"],47:[5,3,"LBLE"],63:[2,2,"SWI2"],131:[4,8,"CMPD"],140:[4,8,"CMPY"],142:[4,8,"LDY"],147:[3,1,"CMPD"],156:[3,1,"CMPY"],158:[3,1,"LDY"],159:[3,1,"STY"],163:[3,6,"CMPD"],172:[3,6,"CMPY"],174:[3,6,"LDY"],175:[3,6,"STY"],179:[4,7,"CMPD"],188:[4,7,"CMPY"],190:[4,7,"LDY"],191:[4,7,"STY"],206:[4,8,"LDS"],222:[3,1,"LDS"],223:[3,1,"STS"],238:[3,6,"LDS"],239:[3,6,"STS"],254:[4,7,"LDS"],255:[4,7,"STS"]},D=function(u,r,g,s,e,b){var _=function(ue,Qe){for(var Pe=ue.toString(16);Pe.length>5];if(!(xe&128)){var ve=xe&31;ve>15&&(ve=ve-32),J+=ve+","+Z0;break}var Ge=xe&16,Oe=xe&15,ge=g>127?g-256:g,pe=g*256+s>32767?g*256+s-65536:g*256+s;if(Ge)switch(Oe){case 0:J+="???";break;case 1:J+="[,"+Z0+"++]";break;case 2:J+="???";break;case 3:J+="[,--"+Z0+"]";break;case 4:J+="[,"+Z0+"]";break;case 5:J+="[B,"+Z0+"]";break;case 6:J+="[A,"+Z0+"]";break;case 7:J+="???";break;case 8:J+="["+ge+","+Z0+"]",j0++;break;case 9:J+="["+pe+","+Z0+"]",j0+=2;break;case 10:J+="???";break;case 11:J+="[D,"+Z0+"]";break;case 12:J+="["+ge+",PC]",j0++;break;case 13:J+="["+pe+",PC]",j0+=2;break;case 14:J+="???";break;case 15:J+="[$"+$0(g*256+s)+"]",j0+=2;break}else switch(Oe){case 0:J+=","+Z0+"+";break;case 1:J+=","+Z0+"++";break;case 2:J+=",-"+Z0;break;case 3:J+=",--"+Z0;break;case 4:J+=","+Z0;break;case 5:J+="B,"+Z0;break;case 6:J+="A,"+Z0;break;case 7:J+="???";break;case 8:J+=ge+","+Z0,j0++;break;case 9:J+=pe+","+Z0,j0+=2;break;case 10:J+="???";break;case 11:J+="D,"+Z0;break;case 12:J+=ge+",PC",j0++;break;case 13:J+=pe+",PC",j0+=2;break;case 14:J+="???";break;case 15:J+="$"+$0(g*256+s),j0+=2;break}break;case 7:J+=" $"+$0(r*256+g);break;case 8:J+=" #$"+$0(r*256+g);break;case 10:for(I0=["PC","U","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(I0[7-Q0]),r>>=1;J+=" "+ne.join(",");break;case 11:for(I0=["PC","S","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(I0[7-Q0]),r>>=1;J+=" "+ne.join(",");break;case 20:I0=["D","X","Y","U","S","PC","?","?","A","B","CC","DP","?","?","?","?"],J+=" "+I0[r>>4]+","+I0[r&15];break}return{line:J,nbytes:j0}};return{steps:function(u){for(;u>0;)u-=K0()},runFrame:function(u){for(;H>g;s===0?u+=r[g].toLowerCase():u+=r[g]}return u},disasm:D,isStable:function(){return!0}}}var ot=function(){var h=this;this.powerOn=function(){this.reset()},this.powerOff=function(){},this.clockPulse=function(){n&&(G++,A[G]())},this.connectBus=function(l){t=l},this.setRDY=function(l){n=l},this.isRDY=function(){return n},this.reset=function(){p=1,G=-1,A=[z],a=t.read(H)|t.read(H+1)<<8,this.setRDY(!0)};var t,n=!1,a=0,m=0,o=0,d=0,x=0,i=0,Y=0,y=0,p=0,N=0,w=0,G=-1,u0=-1,A,R=0,i0=0,T=0,W=!1,f=0,c=0,g0=0;let M0=65530,H=65532,D0=65534,P=0,v=1,V0=7,t0=6,q=1,H0=0;this.debug=!1,this.trace=!1;var z=function(){u0=t.read(a),A=e[u0],G=0,a++},F=z,A0=function(){t.read(a)},x0=function(){c=t.read(a),a++},I=function(){i0=t.read(a),a++},U0=function(){i0|=t.read(a)<<8,a++},Y0=function(){i0=t.read(T)},T0=function(){i0|=t.read(T)<<8},k0=function(){T=t.read(a),a++},Q=function(){T|=t.read(a)<<8,a++},l0=function(){T=t.read(f)},L0=function(){T|=t.read(f)<<8},b0=function(){var l=(T&255)+d;W=l>255,T=T&65280|l&255},B0=function(){var l=(T&255)+x;W=l>255,T=T&65280|l&255},W0=function(){var l=(T&255)+1;W=l>255,T=T&65280|l&255},O0=function(){W&&(T=T+256&65535)},F0=function(){f=t.read(a),a++},p0=function(){f|=t.read(a)<<8,a++},c0=function(){var l=(f&255)+1;f=f&65280|l&255},a0=function(){R=t.read(a),a++},E=function(){R=t.read(i0)},k=function(){R=t.read(T)},M=function(){t.write(i0,R)},f0=function(){t.write(T,R)},Z=function(){var l=a&255,C=l+c&255;c>127?g0=C>l?-256:0:g0=C>>7,Y=l>>>6&1,y=l>>>3&1,p=l>>>2&1,N=l>>>1&1,w=l&1},V=function(l){h.debug&&h.breakpoint("Illegal Opcode: "+l)},e0=function(l){return[z,A0,function(){l(),F()}]},s0=function(l){return[z,a0,function(){l(),F()}]},_0=function(l){return[z,I,E,function(){l(),F()}]},R0=function(l){return[z,I,U0,E,function(){l(),F()}]},X0=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},E,function(){l(),F()}]},o0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},function(){W?k():(K(),F())},function(){K(),F()}]}},d0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),k()},function(){K(),F()}]}},E0=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},function(){W?k():(l(),F())},function(){l(),F()}]},w0=function(l){return[z,I,function(){l(),M()},F]},z0=function(l){return[z,I,U0,function(){l(),M()},F]},U=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},function(){l(),M()},F]},K0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},function(){K(),f0()},F]}},G0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),K(),f0()},F]}},q0=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},function(){l(),f0()},F]},S=function(l){return[z,I,E,M,function(){l(),M()},F]},B=function(l){return[z,I,U0,E,M,function(){l(),M()},F]},D=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),k()},f0,function(){K(),f0()},F]}},u=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},k,f0,function(){K(),f0()},F]}},r=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},E,M,function(){l(),M()},F]},g=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},k,f0,function(){l(),f0()},F]},s=new Array(256),e=new Array(256);s[0]="BRK",e[0]=xn(),s[1]="ORA",e[1]=se(X0),s[2]="uKIL",e[2]=J0(),s[3]="uSLO",e[3]=Ae(r),s[4]="uNOP",e[4]=v0(_0),s[5]="ORA",e[5]=se(_0),s[6]="ASL",e[6]=Ze(S),s[7]="uSLO",e[7]=Ae(S),s[8]="PHP",e[8]=fn(),s[9]="ORA",e[9]=se(s0),s[10]="ASL",e[10]=b(),s[11]="uANC",e[11]=At(s0),s[12]="uNOP",e[12]=v0(R0),s[13]="ORA",e[13]=se(R0),s[14]="ASL",e[14]=Ze(B),s[15]="uSLO",e[15]=Ae(B),s[16]="BPL",e[16]=oe(V0,0),s[17]="ORA",e[17]=se(E0),s[18]="uKIL",e[18]=J0(),s[19]="uSLO",e[19]=Ae(g),s[20]="uNOP",e[20]=v0(d0(P)),s[21]="ORA",e[21]=se(d0(P)),s[22]="ASL",e[22]=Ze(D(P)),s[23]="uSLO",e[23]=Ae(D(P)),s[24]="CLC",e[24]=_(),s[25]="ORA",e[25]=se(o0(v)),s[26]="uNOP",e[26]=v0(e0),s[27]="uSLO",e[27]=Ae(u(v)),s[28]="uNOP",e[28]=v0(o0(P)),s[29]="ORA",e[29]=se(o0(P)),s[30]="ASL",e[30]=Ze(u(P)),s[31]="uSLO",e[31]=Ae(u(P)),s[32]="JSR",e[32]=on(),s[33]="AND",e[33]=ae(X0),s[34]="uKIL",e[34]=J0(),s[35]="uRLA",e[35]=de(r),s[36]="BIT",e[36]=ht(_0),s[37]="AND",e[37]=ae(_0),s[38]="ROL",e[38]=Ue(S),s[39]="uRLA",e[39]=de(S),s[40]="PLP",e[40]=sn(),s[41]="AND",e[41]=ae(s0),s[42]="ROL",e[42]=xe(),s[43]="uANC",e[43]=At(s0),s[44]="BIT",e[44]=ht(R0),s[45]="AND",e[45]=ae(R0),s[46]="ROL",e[46]=Ue(B),s[47]="uRLA",e[47]=de(B),s[48]="BMI",e[48]=oe(V0,1),s[49]="AND",e[49]=ae(E0),s[50]="uKIL",e[50]=J0(),s[51]="uRLA",e[51]=de(g),s[52]="uNOP",e[52]=v0(d0(P)),s[53]="AND",e[53]=ae(d0(P)),s[54]="ROL",e[54]=Ue(D(P)),s[55]="uRLA",e[55]=de(D(P)),s[56]="SEC",e[56]=ve(),s[57]="AND",e[57]=ae(o0(v)),s[58]="uNOP",e[58]=v0(e0),s[59]="uRLA",e[59]=de(u(v)),s[60]="uNOP",e[60]=v0(o0(P)),s[61]="AND",e[61]=ae(o0(P)),s[62]="ROL",e[62]=Ue(u(P)),s[63]="uRLA",e[63]=de(u(P)),s[64]="RTI",e[64]=ln(),s[65]="EOR",e[65]=fe(X0),s[66]="uKIL",e[66]=J0(),s[67]="uSRE",e[67]=Ce(r),s[68]="uNOP",e[68]=v0(_0),s[69]="EOR",e[69]=fe(_0),s[70]="LSR",e[70]=Fe(S),s[71]="uSRE",e[71]=Ce(S),s[72]="PHA",e[72]=an(),s[73]="EOR",e[73]=fe(s0),s[74]="LSR",e[74]=Je(),s[75]="uASR",e[75]=Gt(s0),s[76]="JMP",e[76]=dn(),s[77]="EOR",e[77]=fe(R0),s[78]="LSR",e[78]=Fe(B),s[79]="uSRE",e[79]=Ce(B),s[80]="BVC",e[80]=oe(t0,0),s[81]="EOR",e[81]=fe(E0),s[82]="uKIL",e[82]=J0(),s[83]="uSRE",e[83]=Ce(g),s[84]="uNOP",e[84]=v0(d0(P)),s[85]="EOR",e[85]=fe(d0(P)),s[86]="LSR",e[86]=Fe(D(P)),s[87]="uSRE",e[87]=Ce(D(P)),s[88]="CLI",e[88]=$0(),s[89]="EOR",e[89]=fe(o0(v)),s[90]="uNOP",e[90]=v0(e0),s[91]="uSRE",e[91]=Ce(u(v)),s[92]="uNOP",e[92]=v0(o0(P)),s[93]="EOR",e[93]=fe(o0(P)),s[94]="LSR",e[94]=Fe(u(P)),s[95]="uSRE",e[95]=Ce(u(P)),s[96]="RTS",e[96]=bn(),s[97]="ADC",e[97]=re(X0),s[98]="uKIL",e[98]=J0(),s[99]="uRRA",e[99]=he(r),s[100]="uNOP",e[100]=v0(_0),s[101]="ADC",e[101]=re(_0),s[102]="ROR",e[102]=Xe(S),s[103]="uRRA",e[103]=he(S),s[104]="PLA",e[104]=cn(),s[105]="ADC",e[105]=re(s0),s[106]="ROR",e[106]=Z0(),s[107]="uARR",e[107]=Jt(s0),s[108]="JMP",e[108]=hn(),s[109]="ADC",e[109]=re(R0),s[110]="ROR",e[110]=Xe(B),s[111]="uRRA",e[111]=he(B),s[112]="BVS",e[112]=oe(t0,1),s[113]="ADC",e[113]=re(E0),s[114]="uKIL",e[114]=J0(),s[115]="uRRA",e[115]=he(g),s[116]="uNOP",e[116]=v0(d0(P)),s[117]="ADC",e[117]=re(d0(P)),s[118]="ROR",e[118]=Xe(D(P)),s[119]="uRRA",e[119]=he(D(P)),s[120]="SEI",e[120]=Oe(),s[121]="ADC",e[121]=re(o0(v)),s[122]="uNOP",e[122]=v0(e0),s[123]="uRRA",e[123]=he(u(v)),s[124]="uNOP",e[124]=v0(o0(P)),s[125]="ADC",e[125]=re(o0(P)),s[126]="ROR",e[126]=Xe(u(P)),s[127]="uRRA",e[127]=he(u(P)),s[128]="uNOP",e[128]=v0(s0),s[129]="STA",e[129]=me(U),s[130]="uNOP",e[130]=v0(s0),s[131]="uSAX",e[131]=Ee(U),s[132]="STY",e[132]=nt(w0),s[133]="STA",e[133]=me(w0),s[134]="STX",e[134]=tt(w0),s[135]="uSAX",e[135]=Ee(w0),s[136]="DEY",e[136]=Q0(),s[137]="uNOP",e[137]=v0(s0),s[138]="TXA",e[138]=Qe(),s[139]="uANE",e[139]=$t(s0),s[140]="STY",e[140]=nt(z0),s[141]="STA",e[141]=me(z0),s[142]="STX",e[142]=tt(z0),s[143]="uSAX",e[143]=Ee(z0),s[144]="BCC",e[144]=oe(H0,0),s[145]="STA",e[145]=me(q0),s[146]="uKIL",e[146]=J0(),s[147]="uSHA",e[147]=Ct(q0),s[148]="STY",e[148]=nt(G0(P)),s[149]="STA",e[149]=me(G0(P)),s[150]="STX",e[150]=tt(G0(v)),s[151]="uSAX",e[151]=Ee(G0(v)),s[152]="TYA",e[152]=jt(),s[153]="STA",e[153]=me(K0(v)),s[154]="TXS",e[154]=Pe(),s[155]="uSHS",e[155]=tn(K0(v)),s[156]="uSHY",e[156]=rn(K0(P)),s[157]="STA",e[157]=me(K0(P)),s[158]="uSHX",e[158]=nn(K0(v)),s[159]="uSHA",e[159]=Ct(K0(v)),s[160]="LDY",e[160]=De(s0),s[161]="LDA",e[161]=ce(X0),s[162]="LDX",e[162]=ke(s0),s[163]="uLAX",e[163]=_e(X0),s[164]="LDY",e[164]=De(_0),s[165]="LDA",e[165]=ce(_0),s[166]="LDX",e[166]=ke(_0),s[167]="uLAX",e[167]=_e(_0),s[168]="TAY",e[168]=pe(),s[169]="LDA",e[169]=ce(s0),s[170]="TAX",e[170]=ge(),s[171]="uLXA",e[171]=qt(s0),s[172]="LDY",e[172]=De(R0),s[173]="LDA",e[173]=ce(R0),s[174]="LDX",e[174]=ke(R0),s[175]="uLAX",e[175]=_e(R0),s[176]="BCS",e[176]=oe(H0,1),s[177]="LDA",e[177]=ce(E0),s[178]="uKIL",e[178]=J0(),s[179]="uLAX",e[179]=_e(E0),s[180]="LDY",e[180]=De(d0(P)),s[181]="LDA",e[181]=ce(d0(P)),s[182]="LDX",e[182]=ke(d0(v)),s[183]="uLAX",e[183]=_e(d0(v)),s[184]="CLV",e[184]=I0(),s[185]="LDA",e[185]=ce(o0(v)),s[186]="TSX",e[186]=ue(),s[187]="uLAS",e[187]=Qt(o0(v)),s[188]="LDY",e[188]=De(o0(P)),s[189]="LDA",e[189]=ce(o0(P)),s[190]="LDX",e[190]=ke(o0(v)),s[191]="uLAX",e[191]=_e(o0(v)),s[192]="CPY",e[192]=et(s0),s[193]="CMP",e[193]=ie(X0),s[194]="uNOP",e[194]=v0(s0),s[195]="uDCP",e[195]=le(r),s[196]="CPY",e[196]=et(_0),s[197]="CMP",e[197]=ie(_0),s[198]="DEC",e[198]=Me(S),s[199]="uDCP",e[199]=le(S),s[200]="INY",e[200]=j0(),s[201]="CMP",e[201]=ie(s0),s[202]="DEX",e[202]=ne(),s[203]="uSBX",e[203]=en(s0),s[204]="CPY",e[204]=et(R0),s[205]="CMP",e[205]=ie(R0),s[206]="DEC",e[206]=Me(B),s[207]="uDCP",e[207]=le(B),s[208]="BNE",e[208]=oe(q,0),s[209]="CMP",e[209]=ie(E0),s[210]="uKIL",e[210]=J0(),s[211]="uDCP",e[211]=le(g),s[212]="uNOP",e[212]=v0(d0(P)),s[213]="CMP",e[213]=ie(d0(P)),s[214]="DEC",e[214]=Me(D(P)),s[215]="uDCP",e[215]=le(D(P)),s[216]="CLD",e[216]=y0(),s[217]="CMP",e[217]=ie(o0(v)),s[218]="uNOP",e[218]=v0(e0),s[219]="uDCP",e[219]=le(u(v)),s[220]="uNOP",e[220]=v0(o0(P)),s[221]="CMP",e[221]=ie(o0(P)),s[222]="DEC",e[222]=Me(u(P)),s[223]="uDCP",e[223]=le(u(P)),s[224]="CPX",e[224]=qe(s0),s[225]="SBC",e[225]=te(X0),s[226]="uNOP",e[226]=v0(s0),s[227]="uISB",e[227]=be(r),s[228]="CPX",e[228]=qe(_0),s[229]="SBC",e[229]=te(_0),s[230]="INC",e[230]=Te(S),s[231]="uISB",e[231]=be(S),s[232]="INX",e[232]=ee(),s[233]="SBC",e[233]=te(s0),s[234]="NOP",e[234]=J(),s[235]="SBC",e[235]=te(s0),s[236]="CPX",e[236]=qe(R0),s[237]="SBC",e[237]=te(R0),s[238]="INC",e[238]=Te(B),s[239]="uISB",e[239]=be(B),s[240]="BEQ",e[240]=oe(q,1),s[241]="SBC",e[241]=te(E0),s[242]="uKIL",e[242]=J0(),s[243]="uISB",e[243]=be(g),s[244]="uNOP",e[244]=v0(d0(P)),s[245]="SBC",e[245]=te(d0(P)),s[246]="INC",e[246]=Te(D(P)),s[247]="uISB",e[247]=be(D(P)),s[248]="SED",e[248]=Ge(),s[249]="SBC",e[249]=te(o0(v)),s[250]="uNOP",e[250]=v0(e0),s[251]="uISB",e[251]=be(u(v)),s[252]="uNOP",e[252]=v0(o0(P)),s[253]="SBC",e[253]=te(o0(P)),s[254]="INC",e[254]=Te(u(P)),s[255]="uISB",e[255]=be(u(P));function b(){return e0(function(){X(o>127),o=o<<1&255,L(o),O(o)})}function _(){return e0(function(){w=0})}function y0(){return e0(function(){y=0})}function $0(){return e0(function(){p=0})}function I0(){return e0(function(){Y=0})}function ne(){return e0(function(){d=d-1&255,L(d),O(d)})}function Q0(){return e0(function(){x=x-1&255,L(x),O(x)})}function ee(){return e0(function(){d=d+1&255,L(d),O(d)})}function j0(){return e0(function(){x=x+1&255,L(x),O(x)})}function Je(){return e0(function(){w=o&1,o>>>=1,L(o),i=0})}function J(){return e0(function(){})}function xe(){return e0(function(){var l=o>127;o=(o<<1|w)&255,X(l),L(o),O(o)})}function Z0(){return e0(function(){var l=o&1;o=o>>>1|w<<7,X(l),L(o),O(o)})}function ve(){return e0(function(){w=1})}function Ge(){return e0(function(){y=1})}function Oe(){return e0(function(){p=1})}function ge(){return e0(function(){d=o,L(d),O(d)})}function pe(){return e0(function(){x=o,L(x),O(x)})}function ue(){return e0(function(){d=m,L(d),O(d)})}function Qe(){return e0(function(){o=d,L(o),O(o)})}function Pe(){return e0(function(){m=d})}function jt(){return e0(function(){o=x,L(o),O(o)})}function J0(){return[z,function(){V("KIL/HLT/JAM")},function(){G--}]}function v0(l){return l(function(){V("NOP/DOP")})}function re(l){return l(function(){if(y){var C=R,K=(o&15)+(C&15)+w;K>9&&(K+=6);var S0=(o>>4)+(C>>4)+(K>15?1:0)<<4;L(o+C+w&255),O(S0),P0((o^S0)&~(o^C)&128),S0>159&&(S0+=96),X(S0>255),o=(S0|K&15)&255}else{var h0=o+R+w;X(h0>255),P0((o^h0)&(R^h0)&128),o=h0&255,L(o),O(o)}})}function ae(l){return l(function(){o&=R,L(o),O(o)})}function ht(l){return l(function(){var C=R;L(o&C),P0(C&64),O(C)})}function ie(l){return l(function(){var C=o-R&255;X(o>=R),L(C),O(C)})}function qe(l){return l(function(){var C=d-R&255;X(d>=R),L(C),O(C)})}function et(l){return l(function(){var C=x-R&255;X(x>=R),L(C),O(C)})}function fe(l){return l(function(){o^=R,L(o),O(o)})}function ce(l){return l(function(){o=R,L(o),O(o)})}function ke(l){return l(function(){d=R,L(d),O(d)})}function De(l){return l(function(){x=R,L(x),O(x)})}function se(l){return l(function(){o|=R,L(o),O(o)})}function te(l){return l(function(){if(y){var C=R,K=(o&15)-(C&15)-(1-w),S0=(o>>4)-(C>>4)-(K<0?1:0);K<0&&(K-=6),S0<0&&(S0-=6);var h0=o-C-(1-w);X(~h0&256),P0((o^C)&(o^h0)&128),L(h0&255),O(h0),o=(S0<<4|K&15)&255}else C=~R&255,h0=o+C+w,X(h0>255),P0((o^h0)&(C^h0)&128),o=h0&255,L(o),O(o)})}function At(l){return l(function(){V("ANC"),o&=R,L(o),i=w=o&128?1:0})}function $t(l){return l(function(){V("ANE")})}function Jt(l){return l(function(){V("ARR");var C=o&R,K=w?128:0;C=C>>>1|K,o=C,L(C),O(C);var S0=o&96;S0==96?(w=1,Y=0):S0==0?(w=0,Y=0):S0==32?(w=0,Y=1):S0==64&&(w=1,Y=1)})}function Gt(l){return l(function(){V("ASR");var C=o&R;w=C&1,C=C>>>1,o=C,L(C),i=0})}function Qt(l){return l(function(){V("LAS");var C=m&R;o=C,d=C,m=C,L(C),O(C)})}function _e(l){return l(function(){V("LAX");var C=R;o=C,d=C,L(C),O(C)})}function qt(l){return l(function(){V("LXA");var C=o&R;o=C,d=C,L(C),O(C)})}function en(l){return l(function(){V("SBX");var C=o&d,K=R,S0=C-K&255;d=S0,X(C>=K),L(S0),O(S0)})}function me(l){return l(function(){R=o})}function tt(l){return l(function(){R=d})}function nt(l){return l(function(){R=x})}function Ee(l){return l(function(){V("SAX"),R=o&d})}function Ct(l){return l(function(){V("SHA"),R=o&d&(T>>>8)+1&255})}function tn(l){return l(function(){V("SHS");var C=o&d;m=C,R=C&(T>>>8)+1&255})}function nn(l){return l(function(){V("SHX"),R=d&(T>>>8)+1&255})}function rn(l){return l(function(){V("SHY"),R=x&(T>>>8)+1&255})}function Ze(l){return l(function(){X(R>127);var C=R<<1&255;R=C,L(C),O(C)})}function Me(l){return l(function(){var C=R-1&255;R=C,L(C),O(C)})}function Te(l){return l(function(){var C=R+1&255;R=C,L(C),O(C)})}function Fe(l){return l(function(){w=R&1,R>>>=1,L(R),i=0})}function Ue(l){return l(function(){var C=R>127,K=(R<<1|w)&255;R=K,X(C),L(K),O(K)})}function Xe(l){return l(function(){var C=R&1,K=R>>>1|w<<7;R=K,X(C),L(K),O(K)})}function le(l){return l(function(){V("DCP");var C=R-1&255;R=C,C=o-C,X(C>=0),L(C),O(C)})}function be(l){return l(function(){if(V("ISB"),R=R+1&255,y){var C=R,K=(o&15)-(C&15)-(1-w),S0=(o>>4)-(C>>4)-(K<0?1:0);K<0&&(K-=6),S0<0&&(S0-=6);var h0=o-C-(1-w);X(~h0&256),P0((o^C)&(o^h0)&128),L(h0&255),O(h0),o=(S0<<4|K&15)&255}else C=~R&255,h0=o+C+w,X(h0>255),P0((o^h0)&(C^h0)&128),o=h0&255,L(o),O(o)})}function de(l){return l(function(){V("RLA");var C=R,K=w;X(C&128),C=(C<<1|K)&255,R=C,o&=C,L(C),O(C)})}function he(l){return l(function(){V("RRA");var C=R,K=w?128:0;if(X(C&1),C=C>>>1|K,R=C,y){var S0=R,h0=(o&15)+(S0&15)+w;h0>9&&(h0+=6);var we=(o>>4)+(S0>>4)+(h0>15?1:0)<<4;L(o+S0+w&255),O(we),P0((o^we)&~(o^S0)&128),we>159&&(we+=96),X(we>255),o=(we|h0&15)&255}else{var He=o+R+w;X(He>255),P0((o^He)&(R^He)&128),o=He&255,L(o),O(o)}})}function Ae(l){return l(function(){V("SLO");var C=R;X(C&128),C=C<<1&255,R=C,C=o|C,o=C,L(C),O(C)})}function Ce(l){return l(function(){V("SRE");var C=R;X(C&1),C=C>>>1,R=C,C=(o^C)&255,o=C,L(C),O(C)})}function an(){return[z,A0,function(){j(o)},F]}function fn(){return[z,A0,function(){j(m0())},F]}function cn(){return[z,A0,C0,function(){o=r0(),L(o),O(o)},F]}function sn(){return[z,A0,C0,function(){N0(r0())},F]}function on(){return[z,I,C0,function(){j(a>>>8&255)},function(){j(a&255)},U0,function(){a=i0,F()}]}function xn(){return[z,a0,function(){h.debug&&h.breakpoint("BRK "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0())},function(){i0=t.read(D0)},function(){i0|=t.read(D0+1)<<8},function(){a=i0,p=1,F()}]}function un(){return[z,a0,function(){h.debug&&h.breakpoint("IRQ "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0()&-17)},function(){i0=t.read(D0)},function(){i0|=t.read(D0+1)<<8},function(){a=i0,F()}]}function mn(){return[z,a0,function(){h.debug&&h.breakpoint("NMI "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0()&-17)},function(){i0=t.read(M0)},function(){i0|=t.read(M0+1)<<8},function(){a=i0,F()}]}function ln(){return[z,A0,C0,function(){N0(r0())},function(){i0=r0()},function(){i0|=r0()<<8},function(){a=i0,F()}]}function bn(){return[z,A0,C0,function(){i0=r0()},function(){i0|=r0()<<8},function(){a=i0,a0()},F]}function dn(){return[z,I,U0,function(){a=i0,F()}]}function hn(){return[z,F0,p0,l0,function(){c0(),L0()},function(){a=T,F()}]}function oe(l,C){var K;return l===q?K=function(){return N===C}:l===V0?K=function(){return i===C}:l===H0?K=function(){return w===C}:K=function(){return Y===C},[z,x0,function(){K()?(A0(),Z()):F()},function(){g0?(A0(),n0()):F()},F]}this.saveState=function(){return{PC:a-1&65535,A:o,X:d,Y:x,SP:m,N:i,V:Y,D:y,I:p,Z:N,C:w,T:G,o:u0,R:n?1:0,d:R,AD:i0,BA:T,BC:W?1:0,IA:f,bo:c,boa:g0}},this.loadState=function(l){a=l.PC+1&65535,o=l.A,d=l.X,x=l.Y,m=l.SP,i=l.N,Y=l.V,y=l.D,p=l.I,N=l.Z,w=l.C,G=l.T,u0=l.o,n=!!l.R,R=l.d,i0=l.AD,T=l.BA,W=!!l.BC,f=l.IA,c=l.bo,g0=l.boa,A=u0<0?[z]:e[u0]},this.toString=function(){return"CPU PC: "+a.toString(16)+" op: "+u0.toString()+" T: "+G+" data: "+R+` - A: `+o.toString(16)+" X: "+d.toString(16)+" Y: "+x.toString(16)+" SP: "+m.toString(16)+" N"+i+" V"+Y+" D"+y+" I"+p+" Z"+N+" C"+w+" "},this.breakpoint=function(l){if(this.trace)var C="CPU Breakpoint! "+(l?"("+l+")":"")+` - -`+this.toString()};var St=[7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,0,6,0,6,3,3,3,3,2,0,2,0,4,4,4,4,2,6,0,0,4,4,4,4,2,5,2,0,0,5,0,0,2,6,2,6,3,3,3,3,2,2,2,0,4,4,4,4,2,5,0,5,4,4,4,4,2,4,2,0,4,4,4,4,2,6,0,8,3,3,5,5,2,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,2,6,0,8,3,3,5,5,2,2,2,0,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7],An=[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1],Cn=[1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,3,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,0,2,0,2,2,2,2,2,1,0,1,0,3,3,3,3,2,2,0,0,2,2,2,3,1,3,1,0,0,3,0,0,2,2,2,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3],yn=[1,2,0,0,0,2,2,0,1,2,1,0,0,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,3,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,0,2,0,0,2,2,2,0,1,0,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,0,3,0,0,2,2,2,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0];this.getOpcodeMetadata=function(l,C){return{opcode:l,mnenomic:s[l],minCycles:St[l],maxCycles:St[l]+An[l],insnlength:Cn[l]}},this.setNMI=function(){A=mn(),G=1,a=a-1&65535},this.setIRQ=function(){p||(A=un(),G=1,a=a-1&65535)},this.getSP=function(){return m},this.getPC=function(){return a-1&65535},this.getT=function(){return G},this.isHalted=function(){return s[u0]=="uKIL"},this.isPCStable=function(){return G==0}};var Ot=class{constructor(){this.cpu=new ot;this.interruptType=0}connectMemoryBus(t){this.cpu.connectBus(t)}advanceClock(){if(this.interruptType&&this.isStable()){switch(this.interruptType){case 1:this.cpu.setNMI();break;case 2:this.cpu.setIRQ();break}this.interruptType=0}this.cpu.clockPulse()}advanceInsn(){do this.advanceClock();while(!this.isStable())}reset(){this.cpu.reset(),this.interruptType=0}interrupt(t){this.interruptType!=1&&(this.interruptType=t)}NMI(){this.interrupt(1)}IRQ(){this.interrupt(2)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.isHalted()}saveState(){var t=this.cpu.saveState();return t.it=this.interruptType,t}loadState(t){this.cpu.loadState(t),this.interruptType=t.it}isStable(){return this.cpu.isPCStable()}getOpcodeMetadata(t){return this.cpu.getOpcodeMetadata(t)}};var Ne=class{constructor(t){this.maxROMSize=262144;this.videoOffsetBytes=0;this.prefix=t;var n=this;this.cpu={getPC:n.getPC.bind(n),getSP:n.getSP.bind(n),isStable:n.isStable.bind(n),reset:n.reset.bind(n),saveState:()=>n.getCPUState(),loadState:()=>{console.log("loadState not implemented")},connectMemoryBus(){console.log("connectMemoryBus not implemented")}}}getImports(t){return{}}async fetchWASM(){var t=await fetch("res/"+this.prefix+".wasm");if(t.status==200||t.size){var n=await t.arrayBuffer(),a=await WebAssembly.compile(n),m=await WebAssembly.instantiate(a,this.getImports(a));this.instance=m,this.exports=m.exports}else throw new Error("could not load WASM file")}allocateBIOS(t){this.biosptr=this.exports.malloc(t.byteLength),this.biosarr=new Uint8Array(this.exports.memory.buffer,this.biosptr,t.byteLength)}async fetchBIOS(){var t=await fetch("res/"+this.prefix+".bios");if(t.status==200||t.size){var n=new Uint8Array(await t.arrayBuffer());this.allocateBIOS(n),this.loadBIOS(n)}else throw new Error("could not load BIOS file")}async initWASM(){this.sys=this.exports.machine_init(this.biosptr);let t=this.exports.machine_get_state_size();this.stateptr=this.exports.malloc(t);let n=this.exports.machine_get_controls_state_size();this.ctrlstateptr=this.exports.malloc(n);let a=this.exports.machine_get_cpu_state_size();this.cpustateptr=this.exports.malloc(a),this.romptr=this.exports.malloc(this.maxROMSize),this.statearr=new Uint8Array(this.exports.memory.buffer,this.stateptr,t),this.ctrlstatearr=new Uint8Array(this.exports.memory.buffer,this.ctrlstateptr,n),this.cpustatearr=new Uint8Array(this.exports.memory.buffer,this.cpustateptr,a);let m=4096*4;this.audioarr=new Float32Array(this.exports.memory.buffer,this.exports.machine_get_sample_buffer(),m),this.romarr=new Uint8Array(this.exports.memory.buffer,this.romptr,this.maxROMSize),console.log("machine_init",this.sys,t,n,a,m)}async loadWASM(){await this.fetchWASM(),this.exports.memory.grow(96),await this.fetchBIOS(),await this.initWASM()}getPC(){return this.exports.machine_cpu_get_pc(this.sys)}getSP(){return this.exports.machine_cpu_get_sp(this.sys)}isStable(){return this.exports.machine_cpu_is_stable(this.sys)}loadROM(t){if(t.length>this.maxROMSize)throw new _t(`Rom size too big: ${t.length} bytes`);this.romarr.set(t),this.romlen=t.length,console.log("load rom",t.length,"bytes"),this.reset()}loadBIOS(t){this.biosarr.set(t)}reset(){this.exports.machine_reset(this.sys)}read(t){return this.exports.machine_mem_read(this.sys,t&65535)}readConst(t){return this.exports.machine_mem_read(this.sys,t&65535)}write(t,n){this.exports.machine_mem_write(this.sys,t&65535,n&255)}getAudioParams(){return{sampleRate:44100,stereo:!1}}connectVideo(t){this.pixel_dest=t;var n=this.exports.machine_get_pixel_buffer(this.sys);console.log("connectVideo",n,t.length),this.pixel_src=new Uint32Array(this.exports.memory.buffer,n+this.videoOffsetBytes,t.length)}syncVideo(){this.exports.machine_update_video&&this.exports.machine_update_video(this.sys),this.pixel_dest!=null&&this.pixel_dest.set(this.pixel_src)}saveControlsState(){return this.exports.machine_save_controls_state(this.sys,this.ctrlstateptr),{controls:this.ctrlstatearr.slice(0)}}loadControlsState(t){this.ctrlstatearr.set(t.controls),this.exports.machine_load_controls_state(this.sys,this.ctrlstateptr)}connectAudio(t){this.audio=t}syncAudio(){if(this.audio!=null)for(var t=this.exports.machine_get_sample_count(),n=0;n{var t=!1;for(var n in this.id2bp)this.id2bp[n].cond()&&(t=!0);return t}}},mt=class{constructor(){this.recorder=null;this.internalFiles={}}setRecorder(t){this.recorder=t}updateRecorder(){this.recorder&&this.isRunning()&&this.recorder.frameRequested()&&this.recorder.recordFrame(this.saveState())}inspect(t){return Pn(this,t)}getDebugTree(){var n;var t={};return t.state=this.saveState(),(n=this.debugSymbols)!=null&&n.debuginfo&&(t.debuginfo=this.debugSymbols.debuginfo),t}readFile(t){return this.internalFiles[t]}writeFile(t,n){return this.internalFiles[t]=n,!0}},ye=class extends mt{constructor(){super(...arguments);this.debugSavedState=null;this.debugBreakState=null;this.debugTargetClock=0;this.debugClock=0;this.breakpoints=new ut;this.frameCount=0}setBreakpoint(n,a){a?(this.breakpoints.id2bp[n]={cond:a},this.restartDebugging()):this.clearBreakpoint(n)}clearBreakpoint(n){delete this.breakpoints.id2bp[n]}hasBreakpoint(n){return this.breakpoints.id2bp[n]!=null}getDebugCallback(){return this.breakpoints.getDebugCondition()}setupDebug(n){this.onBreakpointHit=n}clearDebug(){this.debugBreakState!=null&&this.debugSavedState!=null&&this.loadState(this.debugSavedState),this.debugSavedState=null,this.debugBreakState=null,this.debugTargetClock=-1,this.debugClock=0,this.onBreakpointHit=null,this.clearBreakpoint("debug"),this.frameCount=0}setDebugCondition(n){this.setBreakpoint("debug",n)}resetDebugging(){this.debugSavedState?this.loadState(this.debugSavedState):this.debugSavedState=this.saveState(),this.debugClock=0,this.debugCallback=this.getDebugCallback(),this.debugBreakState=null}restartDebugging(){this.resetDebugging(),this.resume()}preFrame(){this.debugCallback&&!this.debugBreakState&&(this.debugSavedState=this.saveState(),this.debugTargetClock-=this.debugClock,this.debugClock=0)}postFrame(){this.debugCallback&&this.debugBreakState&&this.loadState(this.debugBreakState),this.frameCount++}pollControls(){}nextFrame(n){this.pollControls(),this.updateRecorder(),this.preFrame();var a=this.advance(n);return this.postFrame(),a}evalDebugCondition(){this.debugCallback&&!this.debugBreakState&&this.debugCallback()}wasBreakpointHit(){return this.debugBreakState!=null}breakpointHit(n,a){console.log(this.debugTargetClock,n,this.debugClock,this.isStable()),this.debugTargetClock=n,this.debugBreakState=this.saveState(),console.log("Breakpoint at clk",this.debugClock,"PC",this.debugBreakState.c.PC.toString(16)),this.pause(),this.onBreakpointHit&&this.onBreakpointHit(this.debugBreakState,a)}haltAndCatchFire(n){this.breakpointHit(this.debugClock,n)}runEval(n){this.setDebugCondition(()=>{if(++this.debugClock>=this.debugTargetClock&&this.isStable()){var a=this.getCPUState();return n(a)?(this.breakpointHit(this.debugClock),!0):!1}})}runToPC(n){this.debugTargetClock++;let a=new Set(n);this.runEval(m=>a.has(m.PC))}runUntilReturn(){var n=this.getSP();this.runEval(a=>a.SP>n)}runToFrameClock(n){this.restartDebugging(),this.debugTargetClock=n,this.runEval(()=>!0)}step(){this.runToFrameClock(this.debugClock+1)}stepBack(){var n,a,m=this.debugTargetClock;this.restartDebugging(),this.debugTargetClock=m-25,this.runEval(o=>this.debugClockthis.frameCount>n)}};function Pn(h,t){if(h.debugSymbols){var n=h.debugSymbols.symbolmap,a=h.debugSymbols.addr2symbol;if(!n||!h.readAddress)return null;var m=n["_"+t]||n[t];if(typeof m!="number")return null;var o=h.readAddress(m);if(a&&a[m+1]!=null)return"$"+$(m,4)+" = $"+$(o,2)+" ("+o+" decimal)";{let d=h.readAddress(m+1),x=o|d<<8;return"$"+$(m,4)+" = $"+$(o,2)+" $"+$(d,2)+" ("+(x<<16>>16)+" decimal)"}}}function Ht(h){return h.endsWith("-llvm.c")?"remote:llvm-mos":h.endsWith(".c")||h.endsWith(".h")?"cc65":h.endsWith(".s")||h.endsWith(".ca65")?"ca65":h.endsWith(".dasm")?"dasm":h.endsWith(".acme")?"acme":h.endsWith(".xa")?"xa":h.endsWith(".wiz")?"wiz":h.endsWith(".ecs")?"ecs":h.endsWith(".cpp")||h.endsWith(".cc")||h.endsWith(".o64")?"oscar64":"dasm"}var Zt=class extends ye{constructor(){super(...arguments);this.debugPCDelta=-1;this.getToolForFilename=Ht}fixPC(n){return n.PC=n.PC+this.debugPCDelta&65535,n}unfixPC(n){return n.PC=n.PC-this.debugPCDelta&65535,n}getSP(){return this.getCPUState().SP}getPC(){return this.getCPUState().PC}isStable(){return!this.getCPUState().T}newCPU(n){var a=new ot;return a.connectBus(n),a}getOpcodeMetadata(n,a){return Yt(n,a)}getOriginPC(){return(this.readAddress(65532)|this.readAddress(65533)<<8)&65535}disassemble(n,a){return at(n,a(n),a(n+1),a(n+2))}getDefaultExtensions(){return[".c",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}getDebugCategories(){return["CPU","ZPRAM","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Vt(a.c);case"ZPRAM":return rt(a.b||a.ram,0,256);case"Stack":return Le(this,a.b||a.ram,256,511,256+a.c.SP,32)}}};function Vt(h){function t(n){var a="";return a+=n.N?" N":" -",a+=n.V?" V":" -",a+=n.D?" D":" -",a+=n.Z?" Z":" -",a+=n.C?" C":" -",a+=n.I?" I":" -",a}return"PC "+$(h.PC,4)+" "+t(h)+` - A `+$(h.A)+" "+(h.R?"":"BUSY")+` - X `+$(h.X)+` - Y `+$(h.Y)+" SP "+$(h.SP)+` -`}var $e={cycletime:[7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,0,6,0,6,3,3,3,3,2,0,2,0,4,4,4,4,2,6,0,0,4,4,4,4,2,5,2,0,0,5,0,0,2,6,2,6,3,3,3,3,2,2,2,0,4,4,4,4,2,5,0,5,4,4,4,4,2,4,2,0,4,4,4,4,2,6,0,8,3,3,5,5,2,2,2,2,4,4,3,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,2,6,0,8,3,3,5,5,2,2,2,0,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7],extracycles:[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1],insnlengths:[1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,3,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,0,2,0,2,2,2,2,2,1,0,1,0,3,3,3,3,2,2,0,0,2,2,2,3,1,3,1,0,0,3,0,0,2,2,2,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3],validinsns:[1,2,0,0,0,2,2,0,1,2,1,0,0,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,3,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,0,2,0,0,2,2,2,0,1,0,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,0,3,0,0,2,2,2,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0]};function Yt(h,t){return{opcode:h,minCycles:$e.cycletime[h],maxCycles:$e.cycletime[h]+$e.extracycles[h],insnlength:$e.insnlengths[h]}}function Wt(h){function t(n){return Ve(n,["S","Z",,"H",,"V","N","C"],!0)}return"PC "+$(h.PC,4)+" "+t(h.AF)+" "+(h.iff1?"I":"-")+(h.iff2?"I":"-")+` -SP `+$(h.SP,4)+" IR "+$(h.IR,4)+` -IX `+$(h.IX,4)+" IY "+$(h.IY,4)+` -AF `+$(h.AF,4)+" BC "+$(h.BC,4)+` -DE `+$(h.DE,4)+" HL "+$(h.HL,4)+` -`}function fr(h){function t(n){return Ve(n,["Z","N","H","C"],!0)}return"PC "+$(h.PC,4)+" "+t(h.AF>>4)+" "+(h.ime?"I":"-")+` -SP `+$(h.SP,4)+` -AF `+$(h.AF,4)+" BC "+$(h.BC,4)+` -DE `+$(h.DE,4)+" HL "+$(h.HL,4)+` -`}var lt=class extends ye{constructor(){super(...arguments);this.waitCycles=0;this.getToolForFilename=zt}newCPU(n,a){return this._cpu=new Ye,this._cpu.connectMemoryBus(n),this._cpu.connectIOBus(a),this._cpu}getPC(){return this._cpu.getPC()}getSP(){return this._cpu.getSP()}isStable(){return!0}runCPU(n,a){if(this._cpu=n,this.waitCycles=0,this.wasBreakpointHit())return 0;var m=this.getDebugCallback(),o=0;for(this.waitCycles+=a;this.waitCycles>0;){if(m&&m()){m=null;break}var d=n.advanceInsn();o+=d,this.waitCycles-=d}return o}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Wt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),console.log(m,o,d),Le(this,[],o,d,m,205)}}}disassemble(n,a){return st(n,a(n),a(n+1),a(n+2),a(n+3))}};function zt(h){return h.endsWith(".c")||h.endsWith(".h")?"sdcc":h.endsWith(".s")?"sdasz80":h.endsWith(".sgb")?"sdasgb":h.endsWith(".ns")?"naken":h.endsWith(".scc")?"sccz80":h.endsWith(".z")?"zmac":h.endsWith(".wiz")?"wiz":"zmac"}function bt(h){function t(n){return Ve(n,["E","F","H","I","N","Z","V","C"],!0)}return"PC "+$(h.PC,4)+" "+t(h.CC)+` -SP `+$(h.SP,4)+` -DP `+$(h.DP,2)+` - A `+$(h.A,2)+` - B `+$(h.B,2)+` - X `+$(h.X,4)+` - Y `+$(h.Y,4)+` - U `+$(h.U,4)+` -`}function Kt(h){return h.endsWith(".c")||h.endsWith(".h")?"cmoc":h.endsWith(".xasm")?"xasm6809":h.endsWith(".lwasm")?"lwasm":"cmoc"}var Mt=class extends lt{constructor(){super(...arguments);this.getToolForFilename=Kt}newCPU(n){var a=Object.create(je());return a.init(n.write,n.read,0),a}cpuStateToLongString(n){return bt(n)}disassemble(n,a){return Object.create(je()).disasm(a(n),a(n+1),a(n+2),a(n+3),a(n+4),n)}getDefaultExtensions(){return[".c",".lwasm",".xasm"]}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return bt(a.c);default:return super.getDebugInfo(n,a)}}};function Le(h,t,n,a,m,o,d){var x="",i=0;function Y(w){return w>8);var p=o==32?-2:-3,N=Y(y+p);N==o?(x+=` -$`+$(m)+": ",x+=$(y,4)+" "+_n(h,y,!0),m++,i=0):(i==0&&(x+=` -$`+$(m)+": "),x+=$(Y(m))+" ",++i==8&&(i=0))}return x+` -`}function _n(h,t,n){for(var a=t,m=h.debugSymbols&&h.debugSymbols.addr2symbol;m&&t>=0;){var o=m[t];if(o){var o=m[t];return n?o+" + $"+$(a-t):o}if(!n)break;t--}return""}function wn(h){return typeof h.connectVideo=="function"}function kn(h){return typeof h.connectAudio=="function"}function Dn(h){return typeof h.setKeyInput=="function"}function Tt(h){return typeof h.setPaddleInput=="function"}function xt(h){return typeof h.getRasterY=="function"}function Rn(h){return typeof h.connectProbe=="function"}function Bn(h){return typeof h.loadBIOS=="function"}function Nn(h){return typeof h.connectSerialIO=="function"}var Ie=class extends ye{constructor(t){super(),this.mainElement=t}reset(){this.machine.reset(),this.serialVisualizer!=null&&this.serialVisualizer.reset()}loadState(t){this.machine.loadState(t)}saveState(){return this.machine.saveState()}getSP(){return this.machine.cpu.getSP()}getPC(){return this.machine.cpu.getPC()}isStable(){return this.machine.cpu.isStable()}getCPUState(){return this.machine.cpu.saveState()}loadControlsState(t){this.machine.loadControlsState(t)}saveControlsState(){return this.machine.saveControlsState()}async start(){this.machine=this.newMachine();let t=this.machine;t instanceof Ne&&await t.loadWASM();var n;if(wn(t)){var a=t.getVideoParams();this.video=new pt(this.mainElement,a.width,a.height,{overscan:!!a.overscan,rotate:a.rotate|0,aspect:a.aspect}),this.video.create(),t.connectVideo(this.video.getFrameData()),Dn(t)&&(this.video.setKeyboardEvents(t.setKeyInput.bind(t)),this.poller=new kt(t.setKeyInput.bind(t))),n=a.videoFrequency}if(this.timer=new wt(n||60,this.nextFrame.bind(this)),kn(t)){var m=t.getAudioParams();this.audio=new ze(m.sampleRate),this.audio.start(),t.connectAudio(this.audio)}Tt(t)&&this.video.setupMouseEvents(),Rn(t)&&(this.probeRecorder=new Ke(t),this.startProbing=()=>(t.connectProbe(this.probeRecorder),this.probeRecorder),this.stopProbing=()=>{t.connectProbe(null)}),Bn(t)&&(this.loadBIOS=(o,d)=>{t.loadBIOS(d,o)}),Nn(t)&&(this.serialIOInterface==null?this.serialVisualizer=new dt(this.mainElement,t):t.connectSerialIO(this.serialIOInterface))}loadROM(t,n,a){this.machine.loadROM(n,t,a),this.reset()}pollControls(){this.poller&&this.poller.poll(),Tt(this.machine)&&(this.machine.setPaddleInput(0,this.video.paddle_x),this.machine.setPaddleInput(1,this.video.paddle_y),this.machine.setPaddleButton&&this.video.paddle_buttons!=null&&(this.machine.setPaddleButton(0,this.video.paddle_buttons[0]),this.machine.setPaddleButton(1,this.video.paddle_buttons[1]),this.machine.setPaddleButton(2,this.video.paddle_buttons[2]))),this.machine.pollControls&&this.machine.pollControls()}advance(t){let n=this.getDebugCallback();try{var a=this.machine.advanceFrame(n);return a}finally{!t&&this.video&&(this.video.updateFrame(),this.updateVideoDebugger()),!t&&this.serialVisualizer&&this.serialVisualizer.refresh()}}updateVideoDebugger(){var t;if(!this.isRunning()&&xt(this.machine)&&this.machine.getRasterCanvasPosition){let{x:n,y:a}=this.machine.getRasterCanvasPosition();if(n>=0||a>=0){let m=(t=this.video)==null?void 0:t.getContext();m&&Pt(m,n,a,1)}}}advanceFrameClock(t,n){if(n>0)return this.machine instanceof Ne?this.machine.advanceFrameClock(t,n):this.machine.advanceFrame(()=>--n<=0)}isRunning(){return this.timer&&this.timer.isRunning()}resume(){this.timer.start(),this.audio&&this.audio.start()}pause(){this.timer.stop(),this.audio&&this.audio.stop()}runToVsync(){this.restartDebugging();var t=!1;this.runEval(()=>{if(this.getRasterScanline()>0)t=!0;else return t})}getRasterScanline(){return xt(this.machine)&&this.machine.getRasterY?this.machine.getRasterY():-1}getRasterLineClock(){return xt(this.machine)&&this.machine.getRasterX?this.machine.getRasterX():-1}readAddress(t){return this.machine.read(t)}getDebugCategories(){if(Se(this.machine))return this.machine.getDebugCategories()}getDebugInfo(t,n){return Se(this.machine)&&this.machine.getDebugInfo(t,n)}},Ft=class extends Ie{constructor(){super(...arguments);this.getOpcodeMetadata=Yt}getToolForFilename(n){return Ht(n)}getDefaultExtensions(){return[".c",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}disassemble(n,a){return at(n,a(n),a(n+1),a(n+2))}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","ZPRAM","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Vt(a.c);case"ZPRAM":return rt(a.b||a.ram,0,256);case"Stack":return Le(this,a.b||a.ram,256,511,256+a.c.SP,32);default:return Se(this.machine)&&this.machine.getDebugInfo(n,a)}}},Ut=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=zt}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Wt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),Le(this,[],o,d,m,205)}default:return Se(this.machine)&&this.machine.getDebugInfo(n,a)}}disassemble(n,a){return st(n,a(n),a(n+1),a(n+2),a(n+3))}},Xt=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=Kt}getDefaultExtensions(){return[".c",".lwasm",".xasm"]}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return bt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),Le(this,[],o,d,m,23,!0)}default:return super.getDebugInfo(n,a)}}disassemble(n,a){return Object.create(je()).disasm(a(n),a(n+1),a(n+2),a(n+3),a(n+4),n)}},dt=class{constructor(t,n){this.lastOutCount=-1;this.lastInCount=-1;this.device=n,this.textarea=document.createElement("textarea"),this.textarea.classList.add("transcript"),this.textarea.classList.add("transcript-style-2"),this.textarea.style.display="none",t.appendChild(this.textarea)}reset(){this.lastOutCount=0,this.lastInCount=0,this.textarea.style.display="none"}refresh(){var t="";if(this.device.serialOut.length!=this.lastOutCount){var n="";for(var a of this.device.serialOut)t!=a.op&&(n!=""&&(n+=` -`),a.op==="read"?n+="<< ":a.op==="write"&&(n+=">> "),t=a.op),a.value==10?(n+="\u21B5",t=""):n+=gt(a.value);this.textarea.value=n,this.lastOutCount=this.device.serialOut.length,this.textarea.style.display="block"}}};export{at as a,st as b,Ye as c,it as d,Dt as e,Rt as f,En as g,gn as h,Zn as i,pn as j,Bt as k,je as l,Ot as m,Ke as n,Be as o,ft as p,ct as q,Nt as r,Ne as s,Et as t,Se as u,mt as v,Pn as w,Ht as x,Zt as y,Vt as z,Yt as A,Wt as B,fr as C,lt as D,zt as E,Mt as F,Le as G,Ie as H,Ft as I,Ut as J,Xt as K}; -//# sourceMappingURL=chunk-BDSSD4L3.js.map diff --git a/gen/chunk-BDSSD4L3.js.map b/gen/chunk-BDSSD4L3.js.map deleted file mode 100644 index efa28ccb..00000000 --- a/gen/chunk-BDSSD4L3.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/common/cpu/disasm6502.ts", "../src/common/cpu/ZilogZ80.ts", "../src/common/audio.ts", "../src/common/probe.ts", "../src/common/devices.ts", "../src/common/cpu/disasmz80.ts", "../src/common/cpu/6809.ts", "../src/common/cpu/MOS6502.ts", "../src/common/wasmplatform.ts", "../src/common/baseplatform.ts"], - "sourcesContent": ["\nimport { hex } from \"../util\";\n\nexport var OPS_6502 = [\n {mn:\"BRK\",am:\"\",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:\"SI\"}, // 0\n {mn:\"ORA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 2\n {mn:\"SLO\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 4\n {mn:\"ORA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 5\n {mn:\"ASL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6\n {mn:\"SLO\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 7\n {mn:\"PHP\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 8\n {mn:\"ORA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 9\n {mn:\"ASL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // b\n {mn:\"NOP\",am:\"AAAA\",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // c\n {mn:\"ORA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // d\n {mn:\"ASL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // e\n {mn:\"SLO\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // f\n {mn:\"BPL\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 10\n {mn:\"ORA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 11\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 12\n {mn:\"SLO\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 13\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 14\n {mn:\"ORA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 15\n {mn:\"ASL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 16\n {mn:\"SLO\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 17\n {mn:\"CLC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 18\n {mn:\"ORA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 19\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 1a\n {mn:\"SLO\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 1c\n {mn:\"ORA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 1d\n {mn:\"ASL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 1e\n {mn:\"SLO\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1f\n {mn:\"JSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:\"S\"}, // 20\n {mn:\"AND\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 21\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 22\n {mn:\"RLA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 23\n {mn:\"BIT\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 24\n {mn:\"AND\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 25\n {mn:\"ROL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 26\n {mn:\"RLA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 27\n {mn:\"PLP\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SCZIDVN\"}, // 28\n {mn:\"AND\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 29\n {mn:\"ROL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2b\n {mn:\"BIT\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 2c\n {mn:\"AND\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 2d\n {mn:\"ROL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 2e\n {mn:\"RLA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 2f\n {mn:\"BMI\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 30\n {mn:\"AND\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 31\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 32\n {mn:\"RLA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 33\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 34\n {mn:\"AND\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 35\n {mn:\"ROL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 36\n {mn:\"RLA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 37\n {mn:\"SEC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 38\n {mn:\"AND\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 39\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 3a\n {mn:\"RLA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 3c\n {mn:\"AND\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 3d\n {mn:\"ROL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 3e\n {mn:\"RLA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3f\n {mn:\"RTI\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"SCZIDVN\"}, // 40\n {mn:\"EOR\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 41\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 42\n {mn:\"SRE\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 43\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 44\n {mn:\"EOR\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 45\n {mn:\"LSR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 46\n {mn:\"SRE\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 47\n {mn:\"PHA\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 48\n {mn:\"EOR\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 49\n {mn:\"LSR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4a\n {mn:\"ASR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4b\n {mn:\"JMP\",am:\"AAAA\",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 4c\n {mn:\"EOR\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 4d\n {mn:\"LSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 4e\n {mn:\"SRE\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 4f\n {mn:\"BVC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 50\n {mn:\"EOR\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 51\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 52\n {mn:\"SRE\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 53\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 54\n {mn:\"EOR\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 55\n {mn:\"LSR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 56\n {mn:\"SRE\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 57\n {mn:\"CLI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 58\n {mn:\"EOR\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 59\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 5a\n {mn:\"SRE\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 5c\n {mn:\"EOR\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 5d\n {mn:\"LSR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 5e\n {mn:\"SRE\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5f\n {mn:\"RTS\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"S\"}, // 60\n {mn:\"ADC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 61\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 62\n {mn:\"RRA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 63\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 64\n {mn:\"ADC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 65\n {mn:\"ROR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 66\n {mn:\"RRA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 67\n {mn:\"PLA\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SAZN\"}, // 68\n {mn:\"ADC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 69\n {mn:\"ROR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 6a\n {mn:\"ARR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6b\n {mn:\"JMP\",am:\"(AAAA)\",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:\"\"}, // 6c\n {mn:\"ADC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6d\n {mn:\"ROR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6e\n {mn:\"RRA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 6f\n {mn:\"BVS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 70\n {mn:\"ADC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 71\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 72\n {mn:\"RRA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 73\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 74\n {mn:\"ADC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 75\n {mn:\"ROR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 76\n {mn:\"RRA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 77\n {mn:\"SEI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 78\n {mn:\"ADC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 79\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 7a\n {mn:\"RRA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 7c\n {mn:\"ADC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 7d\n {mn:\"ROR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 7e\n {mn:\"RRA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7f\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 80\n {mn:\"STA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 81\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 82\n {mn:\"SAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 83\n {mn:\"STY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 84\n {mn:\"STA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 85\n {mn:\"STX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 86\n {mn:\"SAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 87\n {mn:\"DEY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // 88\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 89\n {mn:\"TXA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8a\n {mn:\"ANE\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8b\n {mn:\"STY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8c\n {mn:\"STA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8d\n {mn:\"STX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8e\n {mn:\"SAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8f\n {mn:\"BCC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 90\n {mn:\"STA\",am:\"(aa),y\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 91\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 92\n {mn:\"SHA\",am:\"(aa),y\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 93\n {mn:\"STY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 94\n {mn:\"STA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 95\n {mn:\"STX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 96\n {mn:\"SAX\",am:\"aa,y\",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:\"\"}, // 97\n {mn:\"TYA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 98\n {mn:\"STA\",am:\"AAAA,y\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 99\n {mn:\"TXS\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"S\"}, // 9a\n {mn:\"SHS\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"S\"}, // 9b\n {mn:\"SHY\",am:\"AAAA,x\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9c\n {mn:\"STA\",am:\"AAAA,x\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9d\n {mn:\"SHX\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9e\n {mn:\"SHA\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9f\n {mn:\"LDY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a0\n {mn:\"LDA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // a1\n {mn:\"LDX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // a2\n {mn:\"LAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a3\n {mn:\"LDY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"YZN\"}, // a4\n {mn:\"LDA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // a5\n {mn:\"LDX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"XZN\"}, // a6\n {mn:\"LAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a7\n {mn:\"TAY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a8\n {mn:\"LDA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // a9\n {mn:\"TAX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // aa\n {mn:\"LXA\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AXZN\"}, // ab\n {mn:\"LDY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // ac\n {mn:\"LDA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // ad\n {mn:\"LDX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // ae\n {mn:\"LAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // af\n {mn:\"BCS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // b0\n {mn:\"LDA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // b1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // b2\n {mn:\"LAX\",am:\"(aa),y\",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:\"AXZN\"}, // b3\n {mn:\"LDY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // b4\n {mn:\"LDA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // b5\n {mn:\"LDX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // b6\n {mn:\"LAX\",am:\"aa,y\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // b7\n {mn:\"CLV\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"V\"}, // b8\n {mn:\"LDA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // b9\n {mn:\"TSX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ba\n {mn:\"LAS\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"SAXZN\"}, // bb\n {mn:\"LDY\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"YZN\"}, // bc\n {mn:\"LDA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // bd\n {mn:\"LDX\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"XZN\"}, // be\n {mn:\"LAX\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"AXZN\"}, // bf\n {mn:\"CPY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c0\n {mn:\"CMP\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"CZN\"}, // c1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // c2\n {mn:\"DCP\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // c3\n {mn:\"CPY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c4\n {mn:\"CMP\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c5\n {mn:\"DEC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // c6\n {mn:\"DCP\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // c7\n {mn:\"INY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // c8\n {mn:\"CMP\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c9\n {mn:\"DEX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ca\n {mn:\"SBX\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"XCZN\"}, // cb\n {mn:\"CPY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cc\n {mn:\"CMP\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cd\n {mn:\"DEC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ce\n {mn:\"DCP\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // cf\n {mn:\"BNE\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // d0\n {mn:\"CMP\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"CZN\"}, // d1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // d2\n {mn:\"DCP\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // d3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // d4\n {mn:\"CMP\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // d5\n {mn:\"DEC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // d6\n {mn:\"DCP\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // d7\n {mn:\"CLD\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // d8\n {mn:\"CMP\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // d9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // da\n {mn:\"DCP\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // db\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // dc\n {mn:\"CMP\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // dd\n {mn:\"DEC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // de\n {mn:\"DCP\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // df\n {mn:\"CPX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // e0\n {mn:\"SBC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // e2\n {mn:\"ISB\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e3\n {mn:\"CPX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // e4\n {mn:\"SBC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e5\n {mn:\"INC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // e6\n {mn:\"ISB\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e7\n {mn:\"INX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // e8\n {mn:\"SBC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e9\n {mn:\"NOP\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // ea\n {mn:\"SBC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // eb\n {mn:\"CPX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // ec\n {mn:\"SBC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // ed\n {mn:\"INC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ee\n {mn:\"ISB\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ef\n {mn:\"BEQ\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // f0\n {mn:\"SBC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // f2\n {mn:\"ISB\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // f4\n {mn:\"SBC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // f5\n {mn:\"INC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // f6\n {mn:\"ISB\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f7\n {mn:\"SED\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // f8\n {mn:\"SBC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // fa\n {mn:\"ISB\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // fb\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // fc\n {mn:\"SBC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // fd\n {mn:\"INC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // fe\n {mn:\"ISB\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ff\n];\n\nexport function disassemble6502(pc:number, b0:number, b1:number, b2:number) : {line:string, nbytes:number, isaddr:boolean} {\n\n var op = OPS_6502[b0];\n if (op == null) return {line:\"???\", nbytes:1, isaddr:false};\n var s = op.mn;\n var am = op.am;\n var isaddr = false;\n if (am == 'branch') {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = '$'+hex(offset, 4);\n isaddr = true;\n } else {\n am = am.replace('aa','$'+hex(b1, 2));\n am = am.replace('AAAA','$'+hex(b1+(b2<<8), 4));\n if (am.indexOf('#') < 0 && am.indexOf('$') >= 0)\n isaddr = true;\n }\n return {line:op.mn + \" \" + am, nbytes:op.nb, isaddr:isaddr};\n};\n", "// Generated by CoffeeScript 1.9.3\n\nimport { CPU, Bus, InstructionBased, IOBusConnected, SavesState, Interruptable } from \"../devices\";\n\n///////////////////////////////////////////////////////////////////////////////\n/// @file Z80.js\n///\n/// @brief Emulator for the Zilog Z80 microprocessor\n///\n/// @author Matthew Howell\n///\n/// @remarks\n/// This module is a simple, straightforward instruction interpreter.\n/// There is no fancy dynamic recompilation or cycle-accurate emulation.\n/// The author believes that this should be sufficient for any emulator that\n/// would be feasible to write in JavaScript anyway.\n/// The code and the comments in this file assume that the reader is familiar\n/// with the Z80 architecture. If you're not, here are some references I use:\n/// http://clrhome.org/table/ - Z80 instruction set tables\n/// http://www.zilog.com/docs/z80/um0080.pdf - The official manual\n/// http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf\n/// - The Undocumented Z80, Documented\n///\n/// @copyright (c) 2013 Matthew Howell\n/// This code is released under the MIT license,\n/// a copy of which is available in the associated README.md file,\n/// or at http://opensource.org/licenses/MIT\n///////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////\n/// We'll begin with the object constructor and the public API functions.\n///////////////////////////////////////////////////////////////////////////////\nfunction FastZ80(coreParameter)\n{\n // Obviously we'll be needing the core object's functions again.\n const core = coreParameter;\n \n // The argument to this constructor should be an object containing 4 functions:\n // mem_read(address) should return the byte at the given memory address,\n // mem_write(address, value) should write the given value to the given memory address,\n // io_read(port) should read a return a byte read from the given I/O port,\n // io_write(port, value) should write the given byte to the given I/O port.\n // If any of those functions is missing, this module cannot run.\n if (!core || (typeof core.mem_read !== \"function\") || (typeof core.mem_write !== \"function\") ||\n (typeof core.io_read !== \"function\") || (typeof core.io_write !== \"function\"))\n throw(\"Z80: Core object is missing required functions.\");\n \n // All right, let's initialize the registers.\n // First, the standard 8080 registers.\n let a = 0x00;\n let b = 0x00;\n let c = 0x00;\n let d = 0x00;\n let e = 0x00;\n let h = 0x00;\n let l = 0x00;\n // Now the special Z80 copies of the 8080 registers\n // (the ones used for the SWAP instruction and such).\n let a_prime = 0x00;\n let b_prime = 0x00;\n let c_prime = 0x00;\n let d_prime = 0x00;\n let e_prime = 0x00;\n let h_prime = 0x00;\n let l_prime = 0x00;\n // And now the Z80 index registers.\n let ix = 0x0000;\n let iy = 0x0000;\n // Then the \"utility\" registers: the interrupt vector,\n // the memory refresh, the stack pointer, and the program counter.\n let i = 0x00;\n let r = 0x00;\n let sp = 0xdff0;\n let pc = 0x0000;\n // We don't keep an F register for the flags,\n // because most of the time we're only accessing a single flag,\n // so we optimize for that case and use utility functions\n // for the rarer occasions when we need to access the whole register.\n let flags = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n let flags_prime = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n // And finally we have the interrupt mode and flip-flop registers.\n let imode = 0;\n let iff1 = 0;\n let iff2 = 0;\n \n // These are all specific to this implementation, not Z80 features.\n // Keep track of whether we've had a HALT instruction called.\n let halted = false;\n // EI and DI wait one instruction before they take effect;\n // these flags tell us when we're in that wait state.\n let do_delayed_di = false;\n let do_delayed_ei = false;\n // This tracks the number of cycles spent in a single instruction run,\n // including processing any prefixes and handling interrupts.\n let cycle_counter = 0;\n \n function getState():Z80State {\n return {\n PC:pc,\n SP:sp,\n IX:ix,\n IY:iy,\n AF:(a<<8)+get_flags_register(),\n BC:(b<<8)+c,\n DE:(d<<8)+e,\n HL:(h<<8)+l,\n AF_:(a_prime<<8)+get_flags_prime(),\n BC_:(b_prime<<8)+c_prime,\n DE_:(d_prime<<8)+e_prime,\n HL_:(h_prime<<8)+l_prime,\n IR:(i<<8)+r,\n im : imode,\n iff1 : iff1,\n iff2 : iff2,\n halted : halted,\n do_delayed_di : do_delayed_di,\n do_delayed_ei : do_delayed_ei,\n cycle_counter : cycle_counter\n }; \n }\n\n function setState(state:Z80State) {\n pc = state.PC;\n sp = state.SP;\n ix = state.IX;\n iy = state.IY;\n a = (state.AF >> 8) & 0xff;\n set_flags_register(state.AF);\n b = (state.BC >> 8) & 0xff;\n c = state.BC & 0xff;\n d = (state.DE >> 8) & 0xff;\n e = state.DE & 0xff;\n h = (state.HL >> 8) & 0xff;\n l = state.HL & 0xff;\n a_prime = (state.AF_ >> 8) & 0xff;\n set_flags_prime(state.AF_);\n b_prime = (state.BC_ >> 8) & 0xff;\n c_prime = state.BC_ & 0xff;\n d_prime = (state.DE_ >> 8) & 0xff;\n e_prime = state.DE_ & 0xff;\n h_prime = (state.HL_ >> 8) & 0xff;\n l_prime = state.HL_ & 0xff;\n i = (state.IR >> 8) & 0xff;\n r = state.IR & 0xff;\n imode = state.im;\n iff1 = state.iff1;\n iff2 = state.iff2;\n halted = state.halted;\n do_delayed_di = state.do_delayed_di;\n do_delayed_ei = state.do_delayed_ei;\n cycle_counter = state.cycle_counter;\n }\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public reset\n///\n/// @brief Re-initialize the processor as if a reset or power on had occured\n///////////////////////////////////////////////////////////////////////////////\nlet reset = function()\n{\n // These registers are the ones that have predictable states\n // immediately following a power-on or a reset.\n // The others are left alone, because their states are unpredictable.\n sp = 0xdff0;\n pc = 0x0000;\n a = 0x00;\n r = 0x00;\n set_flags_register(0);\n // Start up with interrupts disabled.\n imode = 0;\n iff1 = 0;\n iff2 = 0;\n // Don't start halted or in a delayed DI or EI.\n halted = false;\n do_delayed_di = false;\n do_delayed_ei = false;\n // Obviously we've not used any cycles yet.\n cycle_counter = 0;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public run_instruction\n///\n/// @brief Runs a single instruction\n///\n/// @return The number of T cycles the instruction took to run,\n/// plus any time that went into handling interrupts that fired\n/// while this instruction was executing\n///////////////////////////////////////////////////////////////////////////////\nlet run_instruction = function()\n{\n if (!halted)\n {\n // If the previous instruction was a DI or an EI,\n // we'll need to disable or enable interrupts\n // after whatever instruction we're about to run is finished.\n var doing_delayed_di = false, doing_delayed_ei = false;\n if (do_delayed_di)\n {\n do_delayed_di = false;\n doing_delayed_di = true;\n }\n else if (do_delayed_ei)\n {\n do_delayed_ei = false;\n doing_delayed_ei = true;\n }\n\n // R is incremented at the start of every instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n // Read the byte at the PC and run the instruction it encodes.\n var opcode = core.mem_read(pc);\n decode_instruction(opcode);\n pc = (pc + 1) & 0xffff;\n \n // Actually do the delayed interrupt disable/enable if we have one.\n if (doing_delayed_di)\n {\n iff1 = 0;\n iff2 = 0;\n //console.log(\"DI\",pc);\n }\n else if (doing_delayed_ei)\n {\n iff1 = 1;\n iff2 = 1;\n //console.log(\"EI\",pc);\n }\n \n // And finally clear out the cycle counter for the next instruction\n // before returning it to the emulator core.\n var retval = cycle_counter;\n cycle_counter = 0;\n return retval;\n }\n else\n {\n // While we're halted, claim that we spent a cycle doing nothing,\n // so that the rest of the emulator can still proceed.\n return 1;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public interrupt\n///\n/// @brief Simulates pulsing the processor's INT (or NMI) pin\n///\n/// @param non_maskable - true if this is a non-maskable interrupt\n/// @param data - the value to be placed on the data bus, if needed\n///////////////////////////////////////////////////////////////////////////////\nlet interrupt = function(non_maskable:boolean, data:number) : boolean\n{\n //console.log(non_maskable, data, iff1, iff2, do_delayed_ei, do_delayed_di);\n if (non_maskable)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n // Non-maskable interrupts are always handled the same way;\n // clear IFF1 and then do a CALL 0x0066.\n // Also, all interrupts reset the HALT state.\n halted = false;\n iff2 = iff1;\n iff1 = 0;\n push_word(pc);\n pc = 0x66;\n cycle_counter += 11;\n return true;\n }\n else if (iff1)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n halted = false;\n iff1 = 0;\n iff2 = 0;\n \n if (imode === 0)\n {\n // In the 8080-compatible interrupt mode,\n // decode the content of the data bus as an instruction and run it.\n pc = (pc - 1) & 0xffff; //SEH: so do_reset() pushes right value\n decode_instruction(data);\n pc = (pc + 1) & 0xffff; //SEH: so do_reset() pushes right value\n cycle_counter += 2;\n }\n else if (imode === 1)\n {\n // Mode 1 is always just RST 0x38.\n push_word(pc);\n pc = 0x38;\n cycle_counter += 13;\n }\n else if (imode === 2)\n {\n // Mode 2 uses the value on the data bus as in index\n // into the vector table pointer to by the I register.\n push_word(pc);\n // The Z80 manual says that this address must be 2-byte aligned,\n // but it doesn't appear that this is actually the case on the hardware,\n // so we don't attempt to enforce that here.\n var vector_address = ((i << 8) | data);\n pc = core.mem_read(vector_address) | \n (core.mem_read((vector_address + 1) & 0xffff) << 8);\n \n cycle_counter += 19;\n }\n //console.log(imode,data,pc);\n return true;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// The public API functions end here.\n///\n/// What begins here are just general utility functions, used variously.\n///////////////////////////////////////////////////////////////////////////////\nlet decode_instruction = function(opcode)\n{\n // The register-to-register loads and ALU instructions\n // are all so uniform that we can decode them directly\n // instead of going into the instruction array for them.\n // This function gets the operand for all of these instructions.\n var get_operand = function(opcode)\n {\n return ((opcode & 0x07) === 0) ? b :\n ((opcode & 0x07) === 1) ? c :\n ((opcode & 0x07) === 2) ? d :\n ((opcode & 0x07) === 3) ? e :\n ((opcode & 0x07) === 4) ? h :\n ((opcode & 0x07) === 5) ? l :\n ((opcode & 0x07) === 6) ? core.mem_read(l | (h << 8)) : a;\n };\n\n // Handle HALT right up front, because it fouls up our LD decoding\n // by falling where LD (HL), (HL) ought to be.\n if (opcode === 0x76)\n {\n halted = true;\n }\n else if ((opcode >= 0x40) && (opcode < 0x80))\n {\n // This entire range is all 8-bit register loads.\n // Get the operand and assign it to the correct destination.\n var operand = get_operand(opcode);\n \n if (((opcode & 0x38) >>> 3) === 0)\n b = operand;\n else if (((opcode & 0x38) >>> 3) === 1)\n c = operand;\n else if (((opcode & 0x38) >>> 3) === 2)\n d = operand;\n else if (((opcode & 0x38) >>> 3) === 3)\n e = operand;\n else if (((opcode & 0x38) >>> 3) === 4)\n h = operand;\n else if (((opcode & 0x38) >>> 3) === 5)\n l = operand;\n else if (((opcode & 0x38) >>> 3) === 6)\n core.mem_write(l | (h << 8), operand);\n else if (((opcode & 0x38) >>> 3) === 7)\n a = operand;\n }\n else if ((opcode >= 0x80) && (opcode < 0xc0))\n {\n // These are the 8-bit register ALU instructions.\n // We'll get the operand and then use this \"jump table\"\n // to call the correct utility function for the instruction.\n var operand = get_operand(opcode),\n op_array = [do_add, do_adc, do_sub, do_sbc,\n do_and, do_xor, do_or, do_cp];\n \n op_array[(opcode & 0x38) >>> 3]( operand);\n }\n else\n {\n // This is one of the less formulaic instructions;\n // we'll get the specific function for it from our array.\n var func = instructions[opcode];\n func();\n }\n \n // Update the cycle counter with however many cycles\n // the base instruction took.\n // If this was a prefixed instruction, then\n // the prefix handler has added its extra cycles already.\n cycle_counter += cycle_counts[opcode];\n};\n\nlet get_signed_offset_byte = function(value)\n{\n // This function requires some explanation.\n // We just use JavaScript Number variables for our registers,\n // not like a typed array or anything.\n // That means that, when we have a byte value that's supposed\n // to represent a signed offset, the value we actually see\n // isn't signed at all, it's just a small integer.\n // So, this function converts that byte into something JavaScript\n // will recognize as signed, so we can easily do arithmetic with it.\n // First, we clamp the value to a single byte, just in case.\n value &= 0xff;\n // We don't have to do anything if the value is positive.\n if (value & 0x80)\n {\n // But if the value is negative, we need to manually un-two's-compliment it.\n // I'm going to assume you can figure out what I meant by that,\n // because I don't know how else to explain it.\n // We could also just do value |= 0xffffff00, but I prefer\n // not caring how many bits are in the integer representation\n // of a JavaScript number in the currently running browser.\n value = -((0xff & ~value) + 1);\n }\n return value;\n};\n\nlet get_flags_register = function()\n{\n // We need the whole F register for some reason.\n // probably a PUSH AF instruction,\n // so make the F register out of our separate flags.\n return (flags.S << 7) |\n (flags.Z << 6) |\n (flags.Y << 5) |\n (flags.H << 4) |\n (flags.X << 3) |\n (flags.P << 2) |\n (flags.N << 1) |\n (flags.C);\n};\n\nlet get_flags_prime = function()\n{\n // This is the same as the above for the F' register.\n return (flags_prime.S << 7) |\n (flags_prime.Z << 6) |\n (flags_prime.Y << 5) |\n (flags_prime.H << 4) |\n (flags_prime.X << 3) |\n (flags_prime.P << 2) |\n (flags_prime.N << 1) |\n (flags_prime.C);\n};\n\nlet set_flags_register = function(operand)\n{\n // We need to set the F register, probably for a POP AF,\n // so break out the given value into our separate flags.\n flags.S = (operand & 0x80) >>> 7;\n flags.Z = (operand & 0x40) >>> 6;\n flags.Y = (operand & 0x20) >>> 5;\n flags.H = (operand & 0x10) >>> 4;\n flags.X = (operand & 0x08) >>> 3;\n flags.P = (operand & 0x04) >>> 2;\n flags.N = (operand & 0x02) >>> 1;\n flags.C = (operand & 0x01);\n};\n\nlet set_flags_prime = function(operand)\n{\n // Again, this is the same as the above for F'.\n flags_prime.S = (operand & 0x80) >>> 7;\n flags_prime.Z = (operand & 0x40) >>> 6;\n flags_prime.Y = (operand & 0x20) >>> 5;\n flags_prime.H = (operand & 0x10) >>> 4;\n flags_prime.X = (operand & 0x08) >>> 3;\n flags_prime.P = (operand & 0x04) >>> 2;\n flags_prime.N = (operand & 0x02) >>> 1;\n flags_prime.C = (operand & 0x01);\n};\n\nlet update_xy_flags = function(result)\n{\n // Most of the time, the undocumented flags\n // (sometimes called X and Y, or 3 and 5),\n // take their values from the corresponding bits\n // of the result of the instruction,\n // or from some other related value.\n // This is a utility function to set those flags based on those bits.\n flags.Y = (result & 0x20) >>> 5;\n flags.X = (result & 0x08) >>> 3;\n};\n\nlet get_parity = function(value)\n{\n // We could try to actually calculate the parity every time,\n // but why calculate what you can pre-calculate?\n var parity_bits = [\n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,\n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1\n ];\n return parity_bits[value];\n};\n\nlet push_word = function(operand)\n{\n // Pretty obvious what this function does; given a 16-bit value,\n // decrement the stack pointer, write the high byte to the new\n // stack pointer location, then repeat for the low byte.\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, (operand & 0xff00) >>> 8);\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, operand & 0x00ff);\n};\n\nlet pop_word = function()\n{\n // Again, not complicated; read a byte off the top of the stack,\n // increment the stack pointer, rinse and repeat.\n var retval = core.mem_read(sp) & 0xff;\n sp = (sp + 1) & 0xffff;\n retval |= core.mem_read(sp) << 8;\n sp = (sp + 1) & 0xffff;\n return retval;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// Now, the way most instructions work in this emulator is that they set up\n/// their operands according to their addressing mode, and then they call a\n/// utility function that handles all variations of that instruction.\n/// Those utility functions begin here.\n///////////////////////////////////////////////////////////////////////////////\nlet do_conditional_absolute_jump = function(condition)\n{\n // This function implements the JP [condition],nn instructions.\n if (condition)\n {\n // We're taking this jump, so write the new PC,\n // and then decrement the thing we just wrote,\n // because the instruction decoder increments the PC\n // unconditionally at the end of every instruction\n // and we need to counteract that so we end up at the jump target.\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n // We're not taking this jump, just move the PC past the operand.\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_relative_jump = function(condition)\n{\n // This function implements the JR [condition],n instructions.\n if (condition)\n {\n // We need a few more cycles to actually take the jump.\n cycle_counter += 5;\n // Calculate the offset specified by our operand.\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n // Add the offset to the PC, also skipping past this instruction.\n pc = (pc + offset + 1) & 0xffff;\n }\n else\n {\n // No jump happening, just skip the operand.\n pc = (pc + 1) & 0xffff;\n }\n};\n\nlet do_conditional_call = function(condition)\n{\n // This function is the CALL [condition],nn instructions.\n // If you've seen the previous functions, you know this drill.\n if (condition)\n {\n cycle_counter += 7;\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_return = function(condition)\n{\n if (condition)\n {\n cycle_counter += 6;\n pc = (pop_word() - 1) & 0xffff;\n }\n};\n\nlet do_reset = function(address)\n{\n // The RST [address] instructions go through here.\n push_word((pc + 1) & 0xffff);\n pc = (address - 1) & 0xffff;\n};\n\nlet do_add = function(operand)\n{\n // This is the ADD A, [operand] instructions.\n // We'll do the literal addition, which includes any overflow,\n // so that we can more easily figure out whether we had\n // an overflow or a carry and set the flags accordingly.\n var result = a + operand;\n \n // The great majority of the work for the arithmetic instructions\n // turns out to be setting the flags rather than the actual operation.\n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f)) & 0x10) ? 1 : 0;\n // An overflow has happened if the sign bits of the accumulator and the operand\n // don't match the sign bit of the result value.\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_adc = function(operand)\n{\n var result = a + operand + flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f) + flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sub = function(operand)\n{\n var result = a - operand;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f)) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sbc = function(operand)\n{\n var result = a - operand - flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f) - flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_cp = function(operand)\n{\n // A compare instruction is just a subtraction that doesn't save the value,\n // so we implement it as... a subtraction that doesn't save the value.\n var temp = a;\n do_sub(operand);\n a = temp;\n // Since this instruction has no \"result\" value, the undocumented flags\n // are set based on the operand instead.\n update_xy_flags(operand);\n};\n\nlet do_and = function(operand)\n{\n // The logic instructions are all pretty straightforward.\n a &= operand & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 1;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_or = function(operand)\n{\n a = (operand | a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_xor = function(operand)\n{\n a = (operand ^ a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_inc = function(operand)\n{\n var result = operand + 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x0f) ? 1 : 0;\n // It's a good deal easier to detect overflow for an increment/decrement.\n flags.P = (operand === 0x7f) ? 1 : 0;\n flags.N = 0;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_dec = function(operand)\n{\n var result = operand - 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x00) ? 1 : 0;\n flags.P = (operand === 0x80) ? 1 : 0;\n flags.N = 1;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_hl_add = function(operand)\n{\n // The HL arithmetic instructions are the same as the A ones,\n // just with twice as many bits happening.\n var hl = l | (h << 8), result = hl + operand;\n \n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n update_xy_flags(h);\n};\n\nlet do_hl_adc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl + operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) === (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_hl_sbc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl - operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) - (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) !== (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_in = function(port)\n{\n var result = core.io_read(port);\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = result ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(result) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_neg = function()\n{\n // This instruction is defined to not alter the register if it === 0x80.\n if (a !== 0x80)\n {\n // This is a signed operation, so convert A to a signed value.\n a = get_signed_offset_byte(a);\n \n a = (-a) & 0xff;\n }\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = (((-a) & 0x0f) > 0) ? 1 : 0;\n flags.P = (a === 0x80) ? 1 : 0;\n flags.N = 1;\n flags.C = a ? 1 : 0;\n update_xy_flags(a);\n};\n\nlet do_ldi = function()\n{\n // Copy the value that we're supposed to copy.\n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n // Increment DE and HL, and decrement BC.\n var result = (e | (d << 8)) + 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.H = 0;\n flags.P = (c || b) ? 1 : 0;\n flags.N = 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpi = function()\n{\n var temp_carry = flags.C;\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ini = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n flags.N = 1;\n};\n\nlet do_outi = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_ldd = function()\n{\n flags.N = 0;\n flags.H = 0;\n \n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n var result = (e | (d << 8)) - 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = (c || b) ? 1 : 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpd = function()\n{\n var temp_carry = flags.C\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ind = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n flags.N = 1;\n};\n\nlet do_outd = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_rlc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | flags.C) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_rrc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (flags.C << 7);\n \n flags.Z = !(operand & 0xff) ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand & 0xff;\n};\n\nlet do_rl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | temp) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_rr = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (temp << 7);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_sla = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = (operand << 1) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sra = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (operand & 0x80);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sll = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) & 0xff) | 1;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_srl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = (operand >>> 1) & 0x7f;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_ix_add = function(operand)\n{\n flags.N = 0;\n \n var result = ix + operand;\n \n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((ix & 0xfff) + (operand & 0xfff)) & 0x1000) ? 1 : 0;\n update_xy_flags((result & 0xff00) >>> 8);\n \n ix = result & 0xffff;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table contains the implementations for the instructions that weren't\n/// implemented directly in the decoder function (everything but the 8-bit\n/// register loads and the accumulator ALU instructions, in other words).\n/// Similar tables for the ED and DD/FD prefixes follow this one.\n///////////////////////////////////////////////////////////////////////////////\nlet instructions = [];\n\n// 0x00 : NOP\ninstructions[0x00] = function() { };\n// 0x01 : LD BC, nn\ninstructions[0x01] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x02 : LD (BC), A\ninstructions[0x02] = function()\n{\n core.mem_write(c | (b << 8), a);\n};\n// 0x03 : INC BC\ninstructions[0x03] = function()\n{\n var result = (c | (b << 8));\n result += 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x04 : INC B\ninstructions[0x04] = function()\n{\n b = do_inc(b);\n};\n// 0x05 : DEC B\ninstructions[0x05] = function()\n{\n b = do_dec(b);\n};\n// 0x06 : LD B, n\ninstructions[0x06] = function()\n{\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x07 : RLCA\ninstructions[0x07] = function()\n{\n // This instruction is implemented as a special case of the\n // more general Z80-specific RLC instruction.\n // Specifially, RLCA is a version of RLC A that affects fewer flags.\n // The same applies to RRCA, RLA, and RRA.\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rlc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x08 : EX AF, AF'\ninstructions[0x08] = function()\n{\n var temp = a;\n a = a_prime;\n a_prime = temp;\n \n temp = get_flags_register();\n set_flags_register(get_flags_prime());\n set_flags_prime(temp);\n};\n// 0x09 : ADD HL, BC\ninstructions[0x09] = function()\n{\n do_hl_add(c | (b << 8));\n};\n// 0x0a : LD A, (BC)\ninstructions[0x0a] = function()\n{\n a = core.mem_read(c | (b << 8));\n};\n// 0x0b : DEC BC\ninstructions[0x0b] = function()\n{\n var result = (c | (b << 8));\n result -= 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x0c : INC C\ninstructions[0x0c] = function()\n{\n c = do_inc(c);\n};\n// 0x0d : DEC C\ninstructions[0x0d] = function()\n{\n c = do_dec(c);\n};\n// 0x0e : LD C, n\ninstructions[0x0e] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n};\n// 0x0f : RRCA\ninstructions[0x0f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rrc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x10 : DJNZ nn\ninstructions[0x10] = function()\n{\n b = (b - 1) & 0xff;\n do_conditional_relative_jump(b !== 0);\n};\n// 0x11 : LD DE, nn\ninstructions[0x11] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x12 : LD (DE), A\ninstructions[0x12] = function()\n{\n core.mem_write(e | (d << 8), a);\n};\n// 0x13 : INC DE\ninstructions[0x13] = function()\n{\n var result = (e | (d << 8));\n result += 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x14 : INC D\ninstructions[0x14] = function()\n{\n d = do_inc(d);\n};\n// 0x15 : DEC D\ninstructions[0x15] = function()\n{\n d = do_dec(d);\n};\n// 0x16 : LD D, n\ninstructions[0x16] = function()\n{\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x17 : RLA\ninstructions[0x17] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rl(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x18 : JR n\ninstructions[0x18] = function()\n{\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n pc = (pc + offset + 1) & 0xffff;\n};\n// 0x19 : ADD HL, DE\ninstructions[0x19] = function()\n{\n do_hl_add(e | (d << 8));\n};\n// 0x1a : LD A, (DE)\ninstructions[0x1a] = function()\n{\n a = core.mem_read(e | (d << 8));\n};\n// 0x1b : DEC DE\ninstructions[0x1b] = function()\n{\n var result = (e | (d << 8));\n result -= 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x1c : INC E\ninstructions[0x1c] = function()\n{\n e = do_inc(e);\n};\n// 0x1d : DEC E\ninstructions[0x1d] = function()\n{\n e = do_dec(e);\n};\n// 0x1e : LD E, n\ninstructions[0x1e] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n};\n// 0x1f : RRA\ninstructions[0x1f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rr(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x20 : JR NZ, n\ninstructions[0x20] = function()\n{\n do_conditional_relative_jump(!flags.Z);\n};\n// 0x21 : LD HL, nn\ninstructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x22 : LD (nn), HL\ninstructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x23 : INC HL\ninstructions[0x23] = function()\n{\n var result = (l | (h << 8));\n result += 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x24 : INC H\ninstructions[0x24] = function()\n{\n h = do_inc(h);\n};\n// 0x25 : DEC H\ninstructions[0x25] = function()\n{\n h = do_dec(h);\n};\n// 0x26 : LD H, n\ninstructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x27 : DAA\ninstructions[0x27] = function()\n{\n var temp = a;\n if (!flags.N)\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp += 0x06;\n if (flags.C || (a > 0x99))\n temp += 0x60;\n }\n else\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp -= 0x06;\n if (flags.C || (a > 0x99))\n temp -= 0x60;\n }\n \n flags.S = (temp & 0x80) ? 1 : 0;\n flags.Z = !(temp & 0xff) ? 1 : 0;\n flags.H = ((a & 0x10) ^ (temp & 0x10)) ? 1 : 0;\n flags.P = get_parity(temp & 0xff);\n // DAA never clears the carry flag if it was already set,\n // but it is able to set the carry flag if it was clear.\n // Don't ask me, I don't know.\n // Note also that we check for a BCD carry, instead of the usual.\n flags.C = (flags.C || (a > 0x99)) ? 1 : 0;\n \n a = temp & 0xff;\n \n update_xy_flags(a);\n};\n// 0x28 : JR Z, n\ninstructions[0x28] = function()\n{\n do_conditional_relative_jump(!!flags.Z);\n};\n// 0x29 : ADD HL, HL\ninstructions[0x29] = function()\n{\n do_hl_add(l | (h << 8));\n};\n// 0x2a : LD HL, (nn)\ninstructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x2b : DEC HL\ninstructions[0x2b] = function()\n{\n var result = (l | (h << 8));\n result -= 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x2c : INC L\ninstructions[0x2c] = function()\n{\n l = do_inc(l);\n};\n// 0x2d : DEC L\ninstructions[0x2d] = function()\n{\n l = do_dec(l);\n};\n// 0x2e : LD L, n\ninstructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n};\n// 0x2f : CPL\ninstructions[0x2f] = function()\n{\n a = (~a) & 0xff;\n flags.N = 1;\n flags.H = 1;\n update_xy_flags(a);\n};\n// 0x30 : JR NC, n\ninstructions[0x30] = function()\n{\n do_conditional_relative_jump(!flags.C);\n};\n// 0x31 : LD SP, nn\ninstructions[0x31] = function()\n{\n sp = core.mem_read((pc + 1) & 0xffff) | \n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc + 2) & 0xffff;\n};\n// 0x32 : LD (nn), A\ninstructions[0x32] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, a);\n};\n// 0x33 : INC SP\ninstructions[0x33] = function()\n{\n sp = (sp + 1) & 0xffff;\n};\n// 0x34 : INC (HL)\ninstructions[0x34] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_inc(core.mem_read(address)));\n};\n// 0x35 : DEC (HL)\ninstructions[0x35] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_dec(core.mem_read(address)));\n};\n// 0x36 : LD (HL), n\ninstructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.mem_write(l | (h << 8), core.mem_read(pc));\n};\n// 0x37 : SCF\ninstructions[0x37] = function()\n{\n flags.N = 0;\n flags.H = 0;\n flags.C = 1;\n update_xy_flags(a);\n};\n// 0x38 : JR C, n\ninstructions[0x38] = function()\n{\n do_conditional_relative_jump(!!flags.C);\n};\n// 0x39 : ADD HL, SP\ninstructions[0x39] = function()\n{\n do_hl_add(sp);\n};\n// 0x3a : LD A, (nn)\ninstructions[0x3a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n a = core.mem_read(address);\n};\n// 0x3b : DEC SP\ninstructions[0x3b] = function()\n{\n sp = (sp - 1) & 0xffff;\n};\n// 0x3c : INC A\ninstructions[0x3c] = function()\n{\n a = do_inc(a);\n};\n// 0x3d : DEC A\ninstructions[0x3d] = function()\n{\n a = do_dec(a);\n};\n// 0x3e : LD A, n\ninstructions[0x3e] = function()\n{\n a = core.mem_read((pc + 1) & 0xffff);\n pc = (pc + 1) & 0xffff;\n};\n// 0x3f : CCF\ninstructions[0x3f] = function()\n{\n flags.N = 0;\n flags.H = flags.C;\n flags.C = flags.C ? 0 : 1;\n update_xy_flags(a);\n};\n// 0xc0 : RET NZ\ninstructions[0xc0] = function()\n{\n do_conditional_return(!flags.Z);\n};\n// 0xc1 : POP BC\ninstructions[0xc1] = function()\n{\n var result = pop_word();\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0xc2 : JP NZ, nn\ninstructions[0xc2] = function()\n{\n do_conditional_absolute_jump(!flags.Z);\n};\n// 0xc3 : JP nn\ninstructions[0xc3] = function()\n{\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xc4 : CALL NZ, nn\ninstructions[0xc4] = function()\n{\n do_conditional_call(!flags.Z);\n};\n// 0xc5 : PUSH BC\ninstructions[0xc5] = function()\n{\n push_word(c | (b << 8));\n};\n// 0xc6 : ADD A, n\ninstructions[0xc6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_add(core.mem_read(pc));\n};\n// 0xc7 : RST 00h\ninstructions[0xc7] = function()\n{\n do_reset(0x00);\n};\n// 0xc8 : RET Z\ninstructions[0xc8] = function()\n{\n do_conditional_return(!!flags.Z);\n};\n// 0xc9 : RET\ninstructions[0xc9] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0xca : JP Z, nn\ninstructions[0xca] = function()\n{\n do_conditional_absolute_jump(!!flags.Z);\n};\n// 0xcb : CB Prefix\ninstructions[0xcb] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n // We don't have a table for this prefix,\n // the instructions are all so uniform that we can directly decode them.\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n bit_number = (opcode & 0x38) >>> 3,\n reg_code = opcode & 0x07;\n \n if (opcode < 0x40)\n {\n // Shift/rotate instructions\n var op_array = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n if (reg_code === 0)\n b = op_array[bit_number]( b);\n else if (reg_code === 1)\n c = op_array[bit_number]( c);\n else if (reg_code === 2)\n d = op_array[bit_number]( d);\n else if (reg_code === 3)\n e = op_array[bit_number]( e);\n else if (reg_code === 4)\n h = op_array[bit_number]( h);\n else if (reg_code === 5)\n l = op_array[bit_number]( l);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n op_array[bit_number]( core.mem_read(l | (h << 8))));\n else if (reg_code === 7)\n a = op_array[bit_number]( a);\n }\n else if (opcode < 0x80)\n {\n // BIT instructions\n if (reg_code === 0)\n flags.Z = !(b & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 1)\n flags.Z = !(c & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 2)\n flags.Z = !(d & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 3)\n flags.Z = !(e & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 4)\n flags.Z = !(h & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 5)\n flags.Z = !(l & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 6)\n flags.Z = !((core.mem_read(l | (h << 8))) & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 7)\n flags.Z = !(a & (1 << bit_number)) ? 1 : 0;\n \n flags.N = 0;\n flags.H = 1;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n // For the BIT n, (HL) instruction, the X and Y flags are obtained\n // from what is apparently an internal temporary register used for\n // some of the 16-bit arithmetic instructions.\n // I haven't implemented that register here,\n // so for now we'll set X and Y the same way for every BIT opcode,\n // which means that they will usually be wrong for BIT n, (HL).\n flags.Y = ((bit_number === 5) && !flags.Z) ? 1 : 0;\n flags.X = ((bit_number === 3) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES instructions\n if (reg_code === 0)\n b &= (0xff & ~(1 << bit_number));\n else if (reg_code === 1)\n c &= (0xff & ~(1 << bit_number));\n else if (reg_code === 2)\n d &= (0xff & ~(1 << bit_number));\n else if (reg_code === 3)\n e &= (0xff & ~(1 << bit_number));\n else if (reg_code === 4)\n h &= (0xff & ~(1 << bit_number));\n else if (reg_code === 5)\n l &= (0xff & ~(1 << bit_number));\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) & ~(1 << bit_number));\n else if (reg_code === 7)\n a &= (0xff & ~(1 << bit_number));\n }\n else\n {\n // SET instructions\n if (reg_code === 0)\n b |= (1 << bit_number);\n else if (reg_code === 1)\n c |= (1 << bit_number);\n else if (reg_code === 2)\n d |= (1 << bit_number);\n else if (reg_code === 3)\n e |= (1 << bit_number);\n else if (reg_code === 4)\n h |= (1 << bit_number);\n else if (reg_code === 5)\n l |= (1 << bit_number);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) | (1 << bit_number));\n else if (reg_code === 7)\n a |= (1 << bit_number);\n }\n \n cycle_counter += cycle_counts_cb[opcode];\n};\n// 0xcc : CALL Z, nn\ninstructions[0xcc] = function()\n{\n do_conditional_call(!!flags.Z);\n};\n// 0xcd : CALL nn\ninstructions[0xcd] = function()\n{\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xce : ADC A, n\ninstructions[0xce] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_adc(core.mem_read(pc));\n};\n// 0xcf : RST 08h\ninstructions[0xcf] = function()\n{\n do_reset(0x08);\n};\n// 0xd0 : RET NC\ninstructions[0xd0] = function()\n{\n do_conditional_return(!flags.C);\n};\n// 0xd1 : POP DE\ninstructions[0xd1] = function()\n{\n var result = pop_word();\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0xd2 : JP NC, nn\ninstructions[0xd2] = function()\n{\n do_conditional_absolute_jump(!flags.C);\n};\n// 0xd3 : OUT (n), A\ninstructions[0xd3] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.io_write((a << 8) | core.mem_read(pc), a);\n};\n// 0xd4 : CALL NC, nn\ninstructions[0xd4] = function()\n{\n do_conditional_call(!flags.C);\n};\n// 0xd5 : PUSH DE\ninstructions[0xd5] = function()\n{\n push_word(e | (d << 8));\n};\n// 0xd6 : SUB n\ninstructions[0xd6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sub(core.mem_read(pc));\n};\n// 0xd7 : RST 10h\ninstructions[0xd7] = function()\n{\n do_reset(0x10);\n};\n// 0xd8 : RET C\ninstructions[0xd8] = function()\n{\n do_conditional_return(!!flags.C);\n};\n// 0xd9 : EXX\ninstructions[0xd9] = function()\n{\n var temp = b;\n b = b_prime;\n b_prime = temp;\n temp = c;\n c = c_prime;\n c_prime = temp;\n temp = d;\n d = d_prime;\n d_prime = temp;\n temp = e;\n e = e_prime;\n e_prime = temp;\n temp = h;\n h = h_prime;\n h_prime = temp;\n temp = l;\n l = l_prime;\n l_prime = temp;\n};\n// 0xda : JP C, nn\ninstructions[0xda] = function()\n{\n do_conditional_absolute_jump(!!flags.C);\n};\n// 0xdb : IN A, (n)\ninstructions[0xdb] = function()\n{\n pc = (pc + 1) & 0xffff;\n a = core.io_read((a << 8) | core.mem_read(pc));\n};\n// 0xdc : CALL C, nn\ninstructions[0xdc] = function()\n{\n do_conditional_call(!!flags.C);\n};\n// 0xdd : DD Prefix (IX instructions)\ninstructions[0xdd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if a DD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xde : SBC n\ninstructions[0xde] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sbc(core.mem_read(pc));\n};\n// 0xdf : RST 18h\ninstructions[0xdf] = function()\n{\n do_reset(0x18);\n};\n// 0xe0 : RET PO\ninstructions[0xe0] = function()\n{\n do_conditional_return(!flags.P);\n};\n// 0xe1 : POP HL\ninstructions[0xe1] = function()\n{\n var result = pop_word();\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0xe2 : JP PO, (nn)\ninstructions[0xe2] = function()\n{\n do_conditional_absolute_jump(!flags.P);\n};\n// 0xe3 : EX (SP), HL\ninstructions[0xe3] = function()\n{\n var temp = core.mem_read(sp);\n core.mem_write(sp, l);\n l = temp;\n temp = core.mem_read((sp + 1) & 0xffff);\n core.mem_write((sp + 1) & 0xffff, h);\n h = temp;\n};\n// 0xe4 : CALL PO, nn\ninstructions[0xe4] = function()\n{\n do_conditional_call(!flags.P);\n};\n// 0xe5 : PUSH HL\ninstructions[0xe5] = function()\n{\n push_word(l | (h << 8));\n};\n// 0xe6 : AND n\ninstructions[0xe6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_and(core.mem_read(pc));\n};\n// 0xe7 : RST 20h\ninstructions[0xe7] = function()\n{\n do_reset(0x20);\n};\n// 0xe8 : RET PE\ninstructions[0xe8] = function()\n{\n do_conditional_return(!!flags.P);\n};\n// 0xe9 : JP (HL)\ninstructions[0xe9] = function()\n{\n pc = l | (h << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xea : JP PE, nn\ninstructions[0xea] = function()\n{\n do_conditional_absolute_jump(!!flags.P);\n};\n// 0xeb : EX DE, HL\ninstructions[0xeb] = function()\n{\n var temp = d;\n d = h;\n h = temp;\n temp = e;\n e = l;\n l = temp;\n};\n// 0xec : CALL PE, nn\ninstructions[0xec] = function()\n{\n do_conditional_call(!!flags.P);\n};\n// 0xed : ED Prefix\ninstructions[0xed] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = ed_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_ed[opcode];\n }\n else\n {\n // If the opcode didn't exist, the whole thing is a two-byte NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xee : XOR n\ninstructions[0xee] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_xor(core.mem_read(pc));\n};\n// 0xef : RST 28h\ninstructions[0xef] = function()\n{\n do_reset(0x28);\n};\n// 0xf0 : RET P\ninstructions[0xf0] = function()\n{\n do_conditional_return(!flags.S);\n};\n// 0xf1 : POP AF\ninstructions[0xf1] = function()\n{\n var result = pop_word();\n set_flags_register(result & 0xff);\n a = (result & 0xff00) >>> 8;\n};\n// 0xf2 : JP P, nn\ninstructions[0xf2] = function()\n{\n do_conditional_absolute_jump(!flags.S);\n};\n// 0xf3 : DI\ninstructions[0xf3] = function()\n{\n // DI doesn't actually take effect until after the next instruction.\n do_delayed_di = true;\n};\n// 0xf4 : CALL P, nn\ninstructions[0xf4] = function()\n{\n do_conditional_call(!flags.S);\n};\n// 0xf5 : PUSH AF\ninstructions[0xf5] = function()\n{\n push_word(get_flags_register() | (a << 8));\n};\n// 0xf6 : OR n\ninstructions[0xf6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_or(core.mem_read(pc));\n};\n// 0xf7 : RST 30h\ninstructions[0xf7] = function()\n{\n do_reset(0x30);\n};\n// 0xf8 : RET M\ninstructions[0xf8] = function()\n{\n do_conditional_return(!!flags.S);\n};\n// 0xf9 : LD SP, HL\ninstructions[0xf9] = function()\n{\n sp = l | (h << 8);\n};\n// 0xfa : JP M, nn\ninstructions[0xfa] = function()\n{\n do_conditional_absolute_jump(!!flags.S);\n};\n// 0xfb : EI\ninstructions[0xfb] = function()\n{\n // EI doesn't actually take effect until after the next instruction.\n do_delayed_ei = true;\n};\n// 0xfc : CALL M, nn\ninstructions[0xfc] = function()\n{\n do_conditional_call(!!flags.S);\n};\n// 0xfd : FD Prefix (IY instructions)\ninstructions[0xfd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n // Rather than copy and paste all the IX instructions into IY instructions,\n // what we'll do is sneakily copy IY into IX, run the IX instruction,\n // and then copy the result into IY and restore the old IX.\n var temp = ix;\n ix = iy;\n //func = func.bind(this);\n func();\n iy = ix;\n ix = temp;\n \n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if an FD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xfe : CP n\ninstructions[0xfe] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_cp(core.mem_read(pc));\n};\n// 0xff : RST 38h\ninstructions[0xff] = function()\n{\n do_reset(0x38);\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table of ED opcodes is pretty sparse;\n/// there are not very many valid ED-prefixed opcodes in the Z80,\n/// and many of the ones that are valid are not documented.\n///////////////////////////////////////////////////////////////////////////////\nlet ed_instructions = [];\n// 0x40 : IN B, (C)\ned_instructions[0x40] = function()\n{\n b = do_in((b << 8) | c);\n};\n// 0x41 : OUT (C), B\ned_instructions[0x41] = function()\n{\n core.io_write((b << 8) | c, b);\n};\n// 0x42 : SBC HL, BC\ned_instructions[0x42] = function()\n{\n do_hl_sbc(c | (b << 8));\n};\n// 0x43 : LD (nn), BC\ned_instructions[0x43] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, c);\n core.mem_write((address + 1) & 0xffff, b);\n};\n// 0x44 : NEG\ned_instructions[0x44] = function()\n{\n do_neg();\n};\n// 0x45 : RETN\ned_instructions[0x45] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x46 : IM 0\ned_instructions[0x46] = function()\n{\n imode = 0;\n};\n// 0x47 : LD I, A\ned_instructions[0x47] = function()\n{\n i = a\n};\n// 0x48 : IN C, (C)\ned_instructions[0x48] = function()\n{\n c = do_in((b << 8) | c);\n};\n// 0x49 : OUT (C), C\ned_instructions[0x49] = function()\n{\n core.io_write((b << 8) | c, c);\n};\n// 0x4a : ADC HL, BC\ned_instructions[0x4a] = function()\n{\n do_hl_adc(c | (b << 8));\n};\n// 0x4b : LD BC, (nn)\ned_instructions[0x4b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n c = core.mem_read(address);\n b = core.mem_read((address + 1) & 0xffff);\n};\n// 0x4c : NEG (Undocumented)\ned_instructions[0x4c] = function()\n{\n do_neg();\n};\n// 0x4d : RETI\ned_instructions[0x4d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0x4e : IM 0 (Undocumented)\ned_instructions[0x4e] = function()\n{\n imode = 0;\n};\n// 0x4f : LD R, A\ned_instructions[0x4f] = function()\n{\n r = a;\n};\n// 0x50 : IN D, (C)\ned_instructions[0x50] = function()\n{\n d = do_in((b << 8) | c);\n};\n// 0x51 : OUT (C), D\ned_instructions[0x51] = function()\n{\n core.io_write((b << 8) | c, d);\n};\n// 0x52 : SBC HL, DE\ned_instructions[0x52] = function()\n{\n do_hl_sbc(e | (d << 8));\n};\n// 0x53 : LD (nn), DE\ned_instructions[0x53] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, e);\n core.mem_write((address + 1) & 0xffff, d);\n};\n// 0x54 : NEG (Undocumented)\ned_instructions[0x54] = function()\n{\n do_neg();\n};\n// 0x55 : RETN\ned_instructions[0x55] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x56 : IM 1\ned_instructions[0x56] = function()\n{\n imode = 1;\n};\n// 0x57 : LD A, I\ned_instructions[0x57] = function()\n{\n a = i;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x58 : IN E, (C)\ned_instructions[0x58] = function()\n{\n e = do_in((b << 8) | c);\n};\n// 0x59 : OUT (C), E\ned_instructions[0x59] = function()\n{\n core.io_write((b << 8) | c, e);\n};\n// 0x5a : ADC HL, DE\ned_instructions[0x5a] = function()\n{\n do_hl_adc(e | (d << 8));\n};\n// 0x5b : LD DE, (nn)\ned_instructions[0x5b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n e = core.mem_read(address);\n d = core.mem_read((address + 1) & 0xffff);\n};\n// 0x5c : NEG (Undocumented)\ned_instructions[0x5c] = function()\n{\n do_neg();\n};\n// 0x5d : RETN\ned_instructions[0x5d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x5e : IM 2\ned_instructions[0x5e] = function()\n{\n imode = 2;\n};\n// 0x5f : LD A, R\ned_instructions[0x5f] = function()\n{\n a = r;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x60 : IN H, (C)\ned_instructions[0x60] = function()\n{\n h = do_in((b << 8) | c);\n};\n// 0x61 : OUT (C), H\ned_instructions[0x61] = function()\n{\n core.io_write((b << 8) | c, h);\n};\n// 0x62 : SBC HL, HL\ned_instructions[0x62] = function()\n{\n do_hl_sbc(l | (h << 8));\n};\n// 0x63 : LD (nn), HL (Undocumented)\ned_instructions[0x63] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x64 : NEG (Undocumented)\ned_instructions[0x64] = function()\n{\n do_neg();\n};\n// 0x65 : RETN\ned_instructions[0x65] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x66 : IM 0\ned_instructions[0x66] = function()\n{\n imode = 0;\n};\n// 0x67 : RRD\ned_instructions[0x67] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0x0f, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0xf0) >>> 4) | (temp2 << 4);\n a = (a & 0xf0) | temp1;\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x68 : IN L, (C)\ned_instructions[0x68] = function()\n{\n l = do_in((b << 8) | c);\n};\n// 0x69 : OUT (C), L\ned_instructions[0x69] = function()\n{\n core.io_write((b << 8) | c, l);\n};\n// 0x6a : ADC HL, HL\ned_instructions[0x6a] = function()\n{\n do_hl_adc(l | (h << 8));\n};\n// 0x6b : LD HL, (nn) (Undocumented)\ned_instructions[0x6b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x6c : NEG (Undocumented)\ned_instructions[0x6c] = function()\n{\n do_neg();\n};\n// 0x6d : RETN\ned_instructions[0x6d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x6e : IM 0 (Undocumented)\ned_instructions[0x6e] = function()\n{\n imode = 0;\n};\n// 0x6f : RLD\ned_instructions[0x6f] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0xf0, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0x0f) << 4) | temp2;\n a = (a & 0xf0) | (temp1 >>> 4);\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x70 : IN (C) (Undocumented)\ned_instructions[0x70] = function()\n{\n do_in((b << 8) | c);\n};\n// 0x71 : OUT (C), 0 (Undocumented)\ned_instructions[0x71] = function()\n{\n core.io_write((b << 8) | c, 0);\n};\n// 0x72 : SBC HL, SP\ned_instructions[0x72] = function()\n{\n do_hl_sbc(sp);\n};\n// 0x73 : LD (nn), SP\ned_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, sp & 0xff);\n core.mem_write((address + 1) & 0xffff, (sp >>> 8) & 0xff);\n};\n// 0x74 : NEG (Undocumented)\ned_instructions[0x74] = function()\n{\n do_neg();\n};\n// 0x75 : RETN\ned_instructions[0x75] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x76 : IM 1\ned_instructions[0x76] = function()\n{\n imode = 1;\n};\n// 0x78 : IN A, (C)\ned_instructions[0x78] = function()\n{\n a = do_in((b << 8) | c);\n};\n// 0x79 : OUT (C), A\ned_instructions[0x79] = function()\n{\n core.io_write((b << 8) | c, a);\n};\n// 0x7a : ADC HL, SP\ned_instructions[0x7a] = function()\n{\n do_hl_adc(sp);\n};\n// 0x7b : LD SP, (nn)\ned_instructions[0x7b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n sp = core.mem_read(address);\n sp |= core.mem_read((address + 1) & 0xffff) << 8;\n};\n// 0x7c : NEG (Undocumented)\ned_instructions[0x7c] = function()\n{\n do_neg();\n};\n// 0x7d : RETN\ned_instructions[0x7d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x7e : IM 2\ned_instructions[0x7e] = function()\n{\n imode = 2;\n};\n// 0xa0 : LDI\ned_instructions[0xa0] = function()\n{\n do_ldi();\n};\n// 0xa1 : CPI\ned_instructions[0xa1] = function()\n{\n do_cpi();\n};\n// 0xa2 : INI\ned_instructions[0xa2] = function()\n{\n do_ini();\n};\n// 0xa3 : OUTI\ned_instructions[0xa3] = function()\n{\n do_outi();\n};\n// 0xa8 : LDD\ned_instructions[0xa8] = function()\n{\n do_ldd();\n};\n// 0xa9 : CPD\ned_instructions[0xa9] = function()\n{\n do_cpd();\n};\n// 0xaa : IND\ned_instructions[0xaa] = function()\n{\n do_ind();\n};\n// 0xab : OUTD\ned_instructions[0xab] = function()\n{\n do_outd();\n};\n// 0xb0 : LDIR\ned_instructions[0xb0] = function()\n{\n do_ldi();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb1 : CPIR\ned_instructions[0xb1] = function()\n{\n do_cpi();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb2 : INIR\ned_instructions[0xb2] = function()\n{\n do_ini();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb3 : OTIR\ned_instructions[0xb3] = function()\n{\n do_outi();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb8 : LDDR\ned_instructions[0xb8] = function()\n{\n do_ldd();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb9 : CPDR\ned_instructions[0xb9] = function()\n{\n do_cpd();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xba : INDR\ned_instructions[0xba] = function()\n{\n do_ind();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xbb : OTDR\ned_instructions[0xbb] = function()\n{\n do_outd();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// Like ED, this table is quite sparse,\n/// and many of the opcodes here are also undocumented.\n/// The undocumented instructions here are those that deal with only one byte\n/// of the two-byte IX register; the bytes are designed IXH and IXL here.\n///////////////////////////////////////////////////////////////////////////////\nlet dd_instructions = [];\n// 0x09 : ADD IX, BC\ndd_instructions[0x09] = function()\n{\n do_ix_add(c | (b << 8));\n};\n// 0x19 : ADD IX, DE\ndd_instructions[0x19] = function()\n{\n do_ix_add(e | (d << 8));\n};\n// 0x21 : LD IX, nn\ndd_instructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n ix |= (core.mem_read(pc) << 8);\n};\n// 0x22 : LD (nn), IX\ndd_instructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n core.mem_write(address, ix & 0xff);\n core.mem_write((address + 1) & 0xffff, (ix >>> 8) & 0xff);\n};\n// 0x23 : INC IX\ndd_instructions[0x23] = function()\n{\n ix = (ix + 1) & 0xffff;\n};\n// 0x24 : INC IXH (Undocumented)\ndd_instructions[0x24] = function()\n{\n ix = (do_inc(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x25 : DEC IXH (Undocumented)\ndd_instructions[0x25] = function()\n{\n ix = (do_dec(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x26 : LD IXH, n (Undocumented)\ndd_instructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) << 8) | (ix & 0xff);\n};\n// 0x29 : ADD IX, IX\ndd_instructions[0x29] = function()\n{\n do_ix_add(ix);\n};\n// 0x2a : LD IX, (nn)\ndd_instructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n ix = core.mem_read(address);\n ix |= (core.mem_read((address + 1) & 0xffff) << 8);\n};\n// 0x2b : DEC IX\ndd_instructions[0x2b] = function()\n{\n ix = (ix - 1) & 0xffff;\n};\n// 0x2c : INC IXL (Undocumented)\ndd_instructions[0x2c] = function()\n{\n ix = do_inc(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2d : DEC IXL (Undocumented)\ndd_instructions[0x2d] = function()\n{\n ix = do_dec(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2e : LD IXL, n (Undocumented)\ndd_instructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) & 0xff) | (ix & 0xff00);\n};\n// 0x34 : INC (IX+n)\ndd_instructions[0x34] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_inc(value));\n};\n// 0x35 : DEC (IX+n)\ndd_instructions[0x35] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_dec(value));\n};\n// 0x36 : LD (IX+n), n\ndd_instructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n core.mem_write((ix + offset) & 0xffff, core.mem_read(pc)); \n};\n// 0x39 : ADD IX, SP\ndd_instructions[0x39] = function()\n{\n do_ix_add(sp);\n};\n// 0x44 : LD B, IXH (Undocumented)\ndd_instructions[0x44] = function()\n{\n b = (ix >>> 8) & 0xff;\n};\n// 0x45 : LD B, IXL (Undocumented)\ndd_instructions[0x45] = function()\n{\n b = ix & 0xff;\n};\n// 0x46 : LD B, (IX+n)\ndd_instructions[0x46] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n b = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x4c : LD C, IXH (Undocumented)\ndd_instructions[0x4c] = function()\n{\n c = (ix >>> 8) & 0xff;\n};\n// 0x4d : LD C, IXL (Undocumented)\ndd_instructions[0x4d] = function()\n{\n c = ix & 0xff;\n};\n// 0x4e : LD C, (IX+n)\ndd_instructions[0x4e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n c = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x54 : LD D, IXH (Undocumented)\ndd_instructions[0x54] = function()\n{\n d = (ix >>> 8) & 0xff;\n};\n// 0x55 : LD D, IXL (Undocumented)\ndd_instructions[0x55] = function()\n{\n d = ix & 0xff;\n};\n// 0x56 : LD D, (IX+n)\ndd_instructions[0x56] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n d = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x5c : LD E, IXH (Undocumented)\ndd_instructions[0x5c] = function()\n{\n e = (ix >>> 8) & 0xff;\n};\n// 0x5d : LD E, IXL (Undocumented)\ndd_instructions[0x5d] = function()\n{\n e = ix & 0xff;\n};\n// 0x5e : LD E, (IX+n)\ndd_instructions[0x5e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n e = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x60 : LD IXH, B (Undocumented)\ndd_instructions[0x60] = function()\n{\n ix = (ix & 0xff) | (b << 8);\n};\n// 0x61 : LD IXH, C (Undocumented)\ndd_instructions[0x61] = function()\n{\n ix = (ix & 0xff) | (c << 8);\n};\n// 0x62 : LD IXH, D (Undocumented)\ndd_instructions[0x62] = function()\n{\n ix = (ix & 0xff) | (d << 8);\n};\n// 0x63 : LD IXH, E (Undocumented)\ndd_instructions[0x63] = function()\n{\n ix = (ix & 0xff) | (e << 8);\n};\n// 0x64 : LD IXH, IXH (Undocumented)\ndd_instructions[0x64] = function()\n{\n // No-op.\n};\n// 0x65 : LD IXH, IXL (Undocumented)\ndd_instructions[0x65] = function()\n{\n ix = (ix & 0xff) | ((ix & 0xff) << 8);\n};\n// 0x66 : LD H, (IX+n)\ndd_instructions[0x66] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n h = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x67 : LD IXH, A (Undocumented)\ndd_instructions[0x67] = function()\n{\n ix = (ix & 0xff) | (a << 8);\n};\n// 0x68 : LD IXL, B (Undocumented)\ndd_instructions[0x68] = function()\n{\n ix = (ix & 0xff00) | b;\n};\n// 0x69 : LD IXL, C (Undocumented)\ndd_instructions[0x69] = function()\n{\n ix = (ix & 0xff00) | c;\n};\n// 0x6a : LD IXL, D (Undocumented)\ndd_instructions[0x6a] = function()\n{\n ix = (ix & 0xff00) | d;\n};\n// 0x6b : LD IXL, E (Undocumented)\ndd_instructions[0x6b] = function()\n{\n ix = (ix & 0xff00) | e;\n};\n// 0x6c : LD IXL, IXH (Undocumented)\ndd_instructions[0x6c] = function()\n{\n ix = (ix & 0xff00) | (ix >>> 8);\n};\n// 0x6d : LD IXL, IXL (Undocumented)\ndd_instructions[0x6d] = function()\n{\n // No-op.\n};\n// 0x6e : LD L, (IX+n)\ndd_instructions[0x6e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n l = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x6f : LD IXL, A (Undocumented)\ndd_instructions[0x6f] = function()\n{\n ix = (ix & 0xff00) | a;\n};\n// 0x70 : LD (IX+n), B\ndd_instructions[0x70] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, b);\n};\n// 0x71 : LD (IX+n), C\ndd_instructions[0x71] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, c);\n};\n// 0x72 : LD (IX+n), D\ndd_instructions[0x72] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, d);\n};\n// 0x73 : LD (IX+n), E\ndd_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, e);\n};\n// 0x74 : LD (IX+n), H\ndd_instructions[0x74] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, h);\n};\n// 0x75 : LD (IX+n), L\ndd_instructions[0x75] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, l);\n};\n// 0x77 : LD (IX+n), A\ndd_instructions[0x77] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, a);\n};\n// 0x7c : LD A, IXH (Undocumented)\ndd_instructions[0x7c] = function()\n{\n a = (ix >>> 8) & 0xff;\n};\n// 0x7d : LD A, IXL (Undocumented)\ndd_instructions[0x7d] = function()\n{\n a = ix & 0xff;\n};\n// 0x7e : LD A, (IX+n)\ndd_instructions[0x7e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n a = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x84 : ADD A, IXH (Undocumented)\ndd_instructions[0x84] = function()\n{\n do_add((ix >>> 8) & 0xff);\n};\n// 0x85 : ADD A, IXL (Undocumented)\ndd_instructions[0x85] = function()\n{\n do_add(ix & 0xff);\n};\n// 0x86 : ADD A, (IX+n)\ndd_instructions[0x86] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_add(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x8c : ADC A, IXH (Undocumented)\ndd_instructions[0x8c] = function()\n{\n do_adc((ix >>> 8) & 0xff);\n};\n// 0x8d : ADC A, IXL (Undocumented)\ndd_instructions[0x8d] = function()\n{\n do_adc(ix & 0xff);\n};\n// 0x8e : ADC A, (IX+n)\ndd_instructions[0x8e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_adc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x94 : SUB IXH (Undocumented)\ndd_instructions[0x94] = function()\n{\n do_sub((ix >>> 8) & 0xff);\n};\n// 0x95 : SUB IXL (Undocumented)\ndd_instructions[0x95] = function()\n{\n do_sub(ix & 0xff);\n};\n// 0x96 : SUB A, (IX+n)\ndd_instructions[0x96] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sub(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x9c : SBC IXH (Undocumented)\ndd_instructions[0x9c] = function()\n{\n do_sbc((ix >>> 8) & 0xff);\n};\n// 0x9d : SBC IXL (Undocumented)\ndd_instructions[0x9d] = function()\n{\n do_sbc(ix & 0xff);\n};\n// 0x9e : SBC A, (IX+n)\ndd_instructions[0x9e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sbc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xa4 : AND IXH (Undocumented)\ndd_instructions[0xa4] = function()\n{\n do_and((ix >>> 8) & 0xff);\n};\n// 0xa5 : AND IXL (Undocumented)\ndd_instructions[0xa5] = function()\n{\n do_and(ix & 0xff);\n};\n// 0xa6 : AND A, (IX+n)\ndd_instructions[0xa6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_and(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xac : XOR IXH (Undocumented)\ndd_instructions[0xac] = function()\n{\n do_xor((ix >>> 8) & 0xff);\n};\n// 0xad : XOR IXL (Undocumented)\ndd_instructions[0xad] = function()\n{\n do_xor(ix & 0xff);\n};\n// 0xae : XOR A, (IX+n)\ndd_instructions[0xae] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_xor(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xb4 : OR IXH (Undocumented)\ndd_instructions[0xb4] = function()\n{\n do_or((ix >>> 8) & 0xff);\n};\n// 0xb5 : OR IXL (Undocumented)\ndd_instructions[0xb5] = function()\n{\n do_or(ix & 0xff);\n};\n// 0xb6 : OR A, (IX+n)\ndd_instructions[0xb6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_or(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xbc : CP IXH (Undocumented)\ndd_instructions[0xbc] = function()\n{\n do_cp((ix >>> 8) & 0xff);\n};\n// 0xbd : CP IXL (Undocumented)\ndd_instructions[0xbd] = function()\n{\n do_cp(ix & 0xff);\n};\n// 0xbe : CP A, (IX+n)\ndd_instructions[0xbe] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_cp(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xcb : CB Prefix (IX bit instructions)\ndd_instructions[0xcb] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc), value;\n \n // As with the \"normal\" CB prefix, we implement the DDCB prefix\n // by decoding the opcode directly, rather than using a table.\n if (opcode < 0x40)\n {\n // Shift and rotate instructions.\n var ddcb_functions = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n // Most of the opcodes in this range are not valid,\n // so we map this opcode onto one of the ones that is.\n var func = ddcb_functions[(opcode & 0x38) >>> 3],\n value = func( core.mem_read((ix + offset) & 0xffff));\n \n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n var bit_number = (opcode & 0x38) >>> 3;\n \n if (opcode < 0x80)\n {\n // BIT\n flags.N = 0;\n flags.H = 1;\n flags.Z = !(core.mem_read((ix + offset) & 0xffff) & (1 << bit_number)) ? 1 : 0;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES\n value = core.mem_read((ix + offset) & 0xffff) & ~(1 << bit_number) & 0xff;\n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n // SET\n value = core.mem_read((ix + offset) & 0xffff) | (1 << bit_number);\n core.mem_write((ix + offset) & 0xffff, value);\n }\n }\n \n // This implements the undocumented shift, RES, and SET opcodes,\n // which write their result to memory and also to an 8080 register.\n if (value !== undefined)\n {\n if ((opcode & 0x07) === 0)\n b = value;\n else if ((opcode & 0x07) === 1)\n c = value;\n else if ((opcode & 0x07) === 2)\n d = value;\n else if ((opcode & 0x07) === 3)\n e = value;\n else if ((opcode & 0x07) === 4)\n h = value;\n else if ((opcode & 0x07) === 5)\n l = value;\n // 6 is the documented opcode, which doesn't set a register.\n else if ((opcode & 0x07) === 7)\n a = value;\n }\n \n cycle_counter += cycle_counts_cb[opcode] + 8;\n};\n// 0xe1 : POP IX\ndd_instructions[0xe1] = function()\n{\n ix = pop_word();\n};\n// 0xe3 : EX (SP), IX\ndd_instructions[0xe3] = function()\n{\n var temp = ix;\n ix = core.mem_read(sp);\n ix |= core.mem_read((sp + 1) & 0xffff) << 8;\n core.mem_write(sp, temp & 0xff);\n core.mem_write((sp + 1) & 0xffff, (temp >>> 8) & 0xff);\n};\n// 0xe5 : PUSH IX\ndd_instructions[0xe5] = function()\n{\n push_word(ix);\n};\n// 0xe9 : JP (IX)\ndd_instructions[0xe9] = function()\n{\n pc = (ix - 1) & 0xffff;\n};\n// 0xf9 : LD SP, IX\ndd_instructions[0xf9] = function()\n{\n sp = ix;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// These tables contain the number of T cycles used for each instruction.\n/// In a few special cases, such as conditional control flow instructions,\n/// additional cycles might be added to these values.\n/// The total number of cycles is the return value of run_instruction().\n///////////////////////////////////////////////////////////////////////////////\nlet cycle_counts = [\n 4, 10, 7, 6, 4, 4, 7, 4, 4, 11, 7, 6, 4, 4, 7, 4,\n 8, 10, 7, 6, 4, 4, 7, 4, 12, 11, 7, 6, 4, 4, 7, 4,\n 7, 10, 16, 6, 4, 4, 7, 4, 7, 11, 16, 6, 4, 4, 7, 4,\n 7, 10, 13, 6, 11, 11, 10, 4, 7, 11, 13, 6, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 5, 10, 10, 10, 10, 11, 7, 11, 5, 10, 10, 0, 10, 17, 7, 11,\n 5, 10, 10, 11, 10, 11, 7, 11, 5, 4, 10, 11, 10, 0, 7, 11,\n 5, 10, 10, 19, 10, 11, 7, 11, 5, 4, 10, 4, 10, 0, 7, 11,\n 5, 10, 10, 4, 10, 11, 7, 11, 5, 6, 10, 4, 10, 0, 7, 11\n];\n\nlet cycle_counts_ed = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 18, 12, 12, 15, 20, 8, 14, 8, 18,\n 12, 12, 15, 20, 8, 14, 8, 0, 12, 12, 15, 20, 8, 14, 8, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n];\n\nlet cycle_counts_cb = [\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8\n];\n\nlet cycle_counts_dd = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 14, 20, 10, 8, 8, 11, 0, 0, 15, 20, 10, 8, 8, 11, 0,\n 0, 0, 0, 0, 23, 23, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 8, 8, 8, 8, 8, 8, 19, 8, 8, 8, 8, 8, 8, 8, 19, 8,\n 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 14, 0, 23, 0, 15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0\n];\n\n // There's tons of stuff in this object,\n // but only these three functions are the public API.\n this.saveState = getState;\n this.loadState = setState;\n this.reset = reset;\n this.advanceInsn = run_instruction;\n this.interrupt = interrupt;\n this.getPC = ():number => { return pc; }\n this.getSP = ():number => { return sp; }\n this.getHalted = ():boolean => { return halted; }\n}\n\nexport interface Z80State {\nAF : number;\nBC : number;\nDE : number;\nHL : number;\nAF_ : number;\nBC_ : number;\nDE_ : number;\nHL_ : number;\nIX : number;\nIY : number;\nSP : number;\nPC : number;\nIR : number;\niff1 : number;\niff2 : number;\nim : number;\nhalted : boolean;\ndo_delayed_di : boolean;\ndo_delayed_ei : boolean;\ncycle_counter : number;\n}\n\nexport class Z80 implements CPU, InstructionBased, IOBusConnected, SavesState, Interruptable {\n\n cpu;\n interruptType;\n memBus : Bus;\n ioBus : Bus;\n retryInterrupts : boolean = false;\n retryData : number = -1;\n \n private buildCPU() {\n if (this.memBus && this.ioBus) {\n this.cpu = new FastZ80({\n mem_read: this.memBus.read.bind(this.memBus),\n mem_write: this.memBus.write.bind(this.memBus),\n io_read: this.ioBus.read.bind(this.ioBus),\n io_write: this.ioBus.write.bind(this.ioBus),\n });\n }\n }\n connectMemoryBus(bus:Bus) {\n this.memBus = bus;\n this.buildCPU();\n }\n connectIOBus(bus:Bus) {\n this.ioBus = bus;\n this.buildCPU();\n }\n advanceInsn() {\n if (this.retryInterrupts && this.retryData >= 0 && this.cpu.interrupt(false, this.retryData)) {\n this.retryData = -1;\n }\n return this.cpu.advanceInsn();\n }\n reset() {\n this.cpu.reset();\n }\n interrupt(data:number) {\n if (!this.cpu.interrupt(false, data) && this.retryInterrupts) {\n this.retryData = data;\n }\n }\n NMI() {\n this.cpu.interrupt(true, 0);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.getHalted();\n }\n saveState() {\n return this.cpu.saveState();\n }\n loadState(s) {\n this.cpu.loadState(s);\n }\n isStable() { return true; }\n // TODO: metadata\n // TODO: disassembler\n}\n", "\nimport { SampledAudioSink } from \"./devices\";\n\n// from TSS\ndeclare var MasterChannel, AudioLooper, PsgDeviceChannel;\n\nexport class MasterAudio {\n master = new MasterChannel();\n looper;\n start() {\n if (!this.looper) {\n this.looper = new AudioLooper(512);\n this.looper.setChannel(this.master);\n this.looper.activate();\n }\n }\n stop() {\n if (this.looper) {\n this.looper.setChannel(null);\n this.looper = null;\n }\n }\n}\n\nexport class AY38910_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n curreg = 0;\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910);\n master.master.addChannel(this.psg);\n }\n\n reset() {\n for (var i=15; i>=0; i--) {\n this.selectRegister(i);\n this.setData(0);\n }\n }\n selectRegister(val : number) {\n this.curreg = val & 0xf;\n }\n setData(val : number) {\n this.psg.writeRegisterAY(this.curreg, val & 0xff);\n }\n readData() {\n return this.psg.readRegister(this.curreg);\n }\n currentRegister() { return this.curreg; }\n}\n\nexport class SN76489_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489);\n master.master.addChannel(this.psg);\n }\n reset() {\n // TODO\n }\n setData(val : number) {\n this.psg.writeRegisterSN(0, val & 0xff);\n }\n}\n\n// https://en.wikipedia.org/wiki/POKEY\n// https://user.xmission.com/~trevin/atari/pokey_regs.html\n// http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm\n\nexport function newPOKEYAudio(count:number) {\n var audio = new MasterAudio();\n for (var i=1; i<=count; i++) {\n var pokey = new POKEYDeviceChannel();\n audio['pokey'+i] = pokey; // TODO: cheezy\n audio.master.addChannel(pokey);\n }\n return audio;\n}\n\nfunction combinePolys(a, b) {\n var arr = new Uint8Array(a.length * b.length);\n var n = 0;\n for (var i=0; i 0.5 ? 1 : 0;\n }\n var bit17_5 = combinePolys(bit17, bit5);\n var bit5_4 = combinePolys(bit5, bit4);\n var wavetones = [\n bit17_5, bit5, bit5_4, bit5,\n bit17, bit2, bit4, bit2\n ];\n // TIA\n var div2 = divideBy(2);\n var div6 = divideBy(6);\n var div31 = divideBy(31);\n var div93 = divideBy(93);\n var bit15_4 = combinePolys(bit15, bit4);\n var bit5_2 = combinePolys(bit5, div2);\n var bit5_6 = combinePolys(bit5, div6);\n var tiawavetones = [\n bit1, bit4, bit15_4, bit5_4,\n div2, div2, div31, bit5_2,\n bit9, bit5, div31, bit1,\n div6, div6, div93, bit5_6\n ];\n \n // registers\n var regs = new Uint8Array(16);\n var counters = new Float32Array(4);\n var deltas = new Float32Array(4);\n var volume = new Float32Array(4);\n var audc = new Uint8Array(4);\n var waveforms = [bit1, bit1, bit1, bit1];\n var buffer;\n var sampleRate;\n var clock, baseDelta;\n var dirty = true;\n\n //\n\n this.setBufferLength = function (length) {\n buffer = new Int32Array(length);\n };\n\n this.getBuffer = function () {\n return buffer;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n baseDelta = FREQ_17_EXACT / rate;\n };\n\n function updateValues(addr) {\n var ctrl = regs[8];\n var base = (ctrl & CLOCK_15) ? DIV_15 : DIV_64;\n var div;\n var i = addr & 4;\n var j = i>>1;\n var k = i>>2;\n if (ctrl & (CH1_CH2>>k)) {\n if (ctrl & (CH1_179>>k))\n div = regs[i+2] * 256 + regs[i+0] + 7;\n else\n div = (regs[i+2] * 256 + regs[i+0] + 1) * base;\n deltas[j+1] = baseDelta / div;\n deltas[j+0] = 0;\n } else {\n if (ctrl & (CH1_179>>k)) {\n div = regs[i+0] + 4;\n } else {\n div = (regs[i+0] + 1) * base;\n }\n deltas[j+0] = baseDelta / div;\n div = (regs[i+2] + 1) * base;\n deltas[j+1] = baseDelta / div;\n }\n //console.log(addr, ctrl.toString(16), div, deltas[j+0], deltas[j+1]);\n }\n\n this.setRegister = function(addr, value) {\n addr &= 0xf;\n value &= 0xff;\n if (regs[addr] != value) {\n regs[addr] = value;\n switch (addr) {\n case 0:\n case 2:\n case 4:\n case 6: // AUDF\n case 8: // ctrl\n dirty = true;\n break;\n case 1:\n case 3:\n case 5:\n case 7: // AUDC\n volume[addr>>1] = value & 0xf;\n waveforms[addr>>1] = wavetones[value>>5];\n break;\n }\n }\n }\n\n this.getRegister = function(addr) {\n addr &= 0xf;\n return regs[addr];\n }\n \n this.setTIARegister = function(addr, value) {\n switch (addr) {\n case 0x17:\n case 0x18:\n regs[(addr&1)*4] = value & 0x1f;\n dirty = true;\n break;\n case 0x15:\n case 0x16:\n waveforms[(addr&1)*2] = tiawavetones[value & 0xf];\n break;\n case 0x19:\n case 0x1a:\n volume[(addr&1)*2] = value & 0xf;\n break;\n }\n }\n\n this.generate = function (length) {\n if (dirty) {\n updateValues(0);\n updateValues(4);\n dirty = false;\n }\n for (var s=0; s 0 && d < 1 && v > 0) {\n var wav = waveforms[i];\n var cnt = counters[i] += d;\n if (cnt > wav.length) {\n cnt = counters[i] = cnt - Math.floor(cnt / wav.length) * wav.length;\n }\n var on = wav[Math.floor(cnt)];\n if (on) {\n sample += v;\n }\n }\n }\n sample *= 64;\n buffer[s] = sample;\n buffer[s+1] = sample;\n }\n }\n}\n\n////// Worker sound\n\nexport var WorkerSoundChannel = function(worker) {\n var sampleRate;\n var output;\n var pending = [];\n var pendingLength = 0;\n\n worker.onmessage = function(e) {\n if (e && e.data && e.data.samples && output) {\n pending.push(e.data.samples);\n pendingLength += e.data.samples.length;\n }\n };\n\n this.setBufferLength = function (length) {\n output = new Int16Array(length);\n //worker.postMessage({bufferLength:length,numChannels:2});\n pendingLength = 0;\n };\n\n this.getBuffer = function () {\n return output;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n worker.postMessage({sampleRate:rate});\n };\n\n this.generate = function (length) {\n if (pendingLength < length*3) {\n //console.log(length, pendingLength);\n output.fill(0);\n return; // TODO: send sync msg?\n }\n for (var i=0; i= buffer.length) {\n bufpos = 0;\n bufferlist[ifill] = buffer;\n var inext = (ifill + 1) % bufferlist.length;\n if (inext == idrain) {\n ifill = Math.floor(idrain + nbuffers/2) % bufferlist.length;\n //console.log('SampleAudio: skipped buffer', idrain, ifill); // TODO\n } else {\n ifill = inext;\n }\n buffer = bufferlist[ifill];\n }\n }\n\n this.feedSample = function(value, count) {\n accum += value * count;\n sfrac += sinc * count;\n if (sfrac >= 1) {\n accum /= sfrac;\n while (sfrac >= 1) {\n this.addSingleSample(accum * sinc);\n sfrac -= 1;\n }\n accum *= sfrac;\n }\n }\n \n}\n\n\nexport class SampledAudio {\n sa;\n constructor(sampleRate : number) {\n this.sa = new SampleAudio(sampleRate);\n }\n feedSample(value:number, count:number) {\n this.sa.feedSample(value, count);\n }\n start() {\n this.sa.start();\n }\n stop() {\n this.sa.stop();\n }\n}\n\ninterface TssChannel {\n setBufferLength(len : number) : void;\n setSampleRate(rate : number) : void;\n getBuffer() : number[];\n generate(numSamples : number) : void;\n}\n\nexport class TssChannelAdapter {\n channels : TssChannel[];\n audioGain = 1.0 / 8192;\n bufferLength : number;\n\n constructor(chans, oversample:number, sampleRate:number) {\n this.bufferLength = oversample * 2;\n this.channels = chans.generate ? [chans] : chans; // array or single channel\n this.channels.forEach((c) => {\n c.setBufferLength(this.bufferLength);\n c.setSampleRate(sampleRate);\n });\n }\n\n generate(sink:SampledAudioSink) {\n var l = this.bufferLength;\n var bufs = this.channels.map((ch) => ch.getBuffer());\n this.channels.forEach((ch) => {\n ch.generate(l);\n });\n for (let i=0; i total += buf[i]);\n sink.feedSample(total * this.audioGain, 1);\n };\n }\n}\n\n", "\nimport { Probeable, ProbeAll } from \"./devices\";\n\nexport enum ProbeFlags {\n CLOCKS\t = 0x00000000,\n EXECUTE\t = 0x01000000,\n INTERRUPT\t= 0x08000000,\n ILLEGAL\t = 0x09000000,\n SP_PUSH\t = 0x0a000000,\n SP_POP\t = 0x0b000000,\n HAS_VALUE = 0x10000000,\n MEM_READ\t= 0x12000000,\n MEM_WRITE\t= 0x13000000,\n IO_READ\t = 0x14000000,\n IO_WRITE\t= 0x15000000,\n VRAM_READ\t= 0x16000000,\n VRAM_WRITE= 0x17000000,\n DMA_READ = 0x18000000,\n DMA_WRITE = 0x19000000,\n WAIT = 0x1f000000,\n SCANLINE\t= 0x7e000000,\n FRAME\t\t = 0x7f000000,\n}\n\nclass ProbeFrame {\n data : Uint32Array;\n len : number;\n}\n\nexport class ProbeRecorder implements ProbeAll {\n\n m : Probeable; // machine to probe\n buf : Uint32Array; // buffer\n idx : number = 0; // index into buffer\n sl : number = 0; // scanline\n cur_sp = -1; // last stack pointer\n singleFrame : boolean = true; // clear between frames\n\n constructor(m:Probeable, buflen?:number) {\n this.m = m;\n this.reset(buflen || 0x100000);\n }\n start() {\n this.m.connectProbe(this);\n }\n stop() {\n this.m.connectProbe(null);\n }\n reset(newbuflen? : number) {\n if (newbuflen) this.buf = new Uint32Array(newbuflen);\n this.sl = 0;\n this.cur_sp = -1;\n this.clear();\n }\n clear() {\n this.idx = 0;\n }\n logData(a:number) {\n this.log(a);\n }\n log(a:number) {\n // TODO: coalesce READ and EXECUTE and PUSH/POP\n if (this.idx >= this.buf.length) return;\n this.buf[this.idx++] = a;\n }\n relog(a:number) {\n this.buf[this.idx-1] = a;\n }\n lastOp() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xff000000;\n else\n return -1;\n }\n lastAddr() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xffffff;\n else\n return -1;\n }\n addLogBuffer(src: Uint32Array) {\n if (this.idx + src.length > this.buf.length) {\n src = src.slice(0, this.buf.length - this.idx);\n }\n this.buf.set(src, this.idx);\n this.idx += src.length;\n}\n logClocks(clocks:number) {\n clocks |= 0;\n if (clocks > 0) {\n if (this.lastOp() == ProbeFlags.CLOCKS)\n this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks\n else\n this.log(clocks | ProbeFlags.CLOCKS);\n }\n }\n logNewScanline() {\n this.log(ProbeFlags.SCANLINE);\n this.sl++;\n }\n logNewFrame() {\n this.log(ProbeFlags.FRAME);\n this.sl = 0;\n if (this.singleFrame) this.clear();\n }\n logExecute(address:number, SP:number) {\n // record stack pushes/pops (from last instruction)\n if (this.cur_sp !== SP) {\n if (SP < this.cur_sp) {\n this.log(ProbeFlags.SP_PUSH | SP);\n }\n if (SP > this.cur_sp) {\n this.log(ProbeFlags.SP_POP | SP);\n }\n this.cur_sp = SP;\n }\n this.log(address | ProbeFlags.EXECUTE);\n }\n logInterrupt(type:number) {\n this.log(type | ProbeFlags.INTERRUPT);\n }\n logValue(address:number, value:number, op:number) {\n this.log((address & 0xffff) | ((value & 0xff)<<16) | op);\n }\n logRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_READ);\n }\n logWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_WRITE);\n }\n logIORead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_READ);\n }\n logIOWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_WRITE);\n }\n logVRAMRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_READ);\n }\n logVRAMWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_WRITE);\n }\n logIllegal(address:number) {\n this.log(address | ProbeFlags.ILLEGAL);\n }\n logWait(address:number) {\n this.log(address | ProbeFlags.WAIT);\n }\n logDMARead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_READ);\n }\n logDMAWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_WRITE);\n }\n countEvents(op : number) : number {\n var count = 0;\n for (var i=0; i {\n saveState(): S;\n loadState(state: S): void;\n}\n\nexport interface Bus {\n read(a: number): number;\n write(a: number, v: number): void;\n readConst?(a: number): number;\n}\n\nexport interface Bus32 {\n read32(a: number): number;\n write32(a: number, v: number): void;\n readConst32?(a: number): number;\n}\n\nexport interface ClockBased {\n advanceClock(): void;\n}\n\nexport interface InstructionBased {\n advanceInsn(): number;\n}\n\nexport type TrapCondition = () => boolean;\n\nexport interface FrameBased {\n advanceFrame(trap: TrapCondition): number;\n}\n\nexport interface VideoSource {\n getVideoParams(): VideoParams;\n connectVideo(pixels: Uint32Array): void;\n}\n\nexport interface RasterFrameBased extends FrameBased, VideoSource {\n getRasterY(): number;\n getRasterX(): number;\n getRasterCanvasPosition?(): { x: number, y: number };\n}\n\nexport interface VideoParams {\n width: number;\n height: number;\n overscan?: boolean;\n rotate?: number;\n videoFrequency?: number; // default = 60\n aspect?: number;\n}\n\n// TODO: frame buffer optimization (apple2, etc)\n\nexport interface SampledAudioParams {\n sampleRate: number;\n stereo: boolean;\n}\n\nexport interface SampledAudioSink {\n feedSample(value: number, count: number): void;\n //sendAudioFrame(samples:Uint16Array) : void;\n}\n\nexport interface SampledAudioSource {\n getAudioParams(): SampledAudioParams;\n connectAudio(audio: SampledAudioSink): void;\n}\n\nexport interface AcceptsROM {\n loadROM(data: Uint8Array, title?: string, origin?: number): void;\n}\n\nexport interface AcceptsBIOS {\n loadBIOS(data: Uint8Array, title?: string): void;\n}\n\nexport interface Resettable {\n reset(): void;\n}\n\nexport interface MemoryBusConnected {\n connectMemoryBus(bus: Bus): void;\n}\n\nexport interface IOBusConnected {\n connectIOBus(bus: Bus): void;\n}\n\nexport interface CPU extends MemoryBusConnected, Resettable, SavesState {\n getPC(): number;\n getSP(): number;\n isStable(): boolean;\n}\n\nexport interface HasCPU extends Resettable {\n cpu: CPU;\n}\n\nexport interface Interruptable {\n interrupt(type: IT): void;\n}\n\nexport interface SavesInputState {\n loadControlsState(cs: CS): void;\n saveControlsState(): CS;\n}\n\nexport interface AcceptsKeyInput {\n setKeyInput(key: number, code: number, flags: number): void;\n}\n\nexport interface AcceptsPaddleInput {\n setPaddleInput(controller: number, value: number): void;\n setPaddleButton?(index: number, pressed: boolean): void;\n}\n\n// TODO: interface not yet used (setKeyInput() handles joystick)\nexport interface AcceptsJoyInput {\n setJoyInput(joy: number, bitmask: number): void;\n}\n\n// SERIAL I/O\n\nexport interface SerialEvent {\n op: 'read' | 'write';\n value: number;\n nbits: number;\n}\n\n// TODO: all these needed?\nexport interface SerialIOInterface {\n // from machine to platform\n clearToSend(): boolean;\n sendByte(b: number);\n // from platform to machine\n byteAvailable(): boolean;\n recvByte(): number;\n // implement these too\n reset(): void;\n advance(clocks: number): void;\n // refresh() : void;\n}\n\nexport interface HasSerialIO {\n connectSerialIO(serial: SerialIOInterface);\n serialOut?: SerialEvent[]; // outgoing event log\n serialIn?: SerialEvent[]; // incoming queue\n}\n\n/// PROFILER\n\nexport interface Probeable {\n connectProbe(probe: ProbeAll): void;\n}\n\nexport interface ProbeTime {\n logClocks(clocks: number);\n logNewScanline();\n logNewFrame();\n}\n\nexport interface ProbeCPU {\n logExecute(address: number, SP: number);\n logInterrupt(type: number);\n logIllegal(address: number);\n logWait(address: number);\n}\n\nexport interface ProbeBus {\n logRead(address: number, value: number);\n logWrite(address: number, value: number);\n logDMARead(address: number, value: number);\n logDMAWrite(address: number, value: number);\n}\n\nexport interface ProbeIO {\n logIORead(address: number, value: number);\n logIOWrite(address: number, value: number);\n}\n\nexport interface ProbeVRAM {\n logVRAMRead(address: number, value: number);\n logVRAMWrite(address: number, value: number);\n}\n\nexport interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO, ProbeVRAM {\n logData(data: number); // entire 32 bits\n addLogBuffer(src: Uint32Array);\n}\n\nexport class NullProbe implements ProbeAll {\n logClocks() { }\n logNewScanline() { }\n logNewFrame() { }\n logExecute() { }\n logInterrupt() { }\n logRead() { }\n logWrite() { }\n logIORead() { }\n logIOWrite() { }\n logVRAMRead() { }\n logVRAMWrite() { }\n logIllegal() { }\n logWait() { }\n logDMARead() { }\n logDMAWrite() { }\n logData() { }\n addLogBuffer(src: Uint32Array) { }\n}\n\n/// CONVENIENCE\n\nexport interface BasicMachineControlsState {\n inputs: Uint8Array;\n}\n\nexport interface BasicMachineState extends BasicMachineControlsState {\n c: any; // TODO\n ram: Uint8Array;\n}\n\nexport abstract class BasicHeadlessMachine implements HasCPU, Bus, AcceptsROM, Probeable,\n SavesState, SavesInputState {\n\n abstract cpuFrequency: number;\n abstract defaultROMSize: number;\n\n abstract cpu: CPU;\n abstract ram: Uint8Array;\n\n rom: Uint8Array;\n inputs: Uint8Array = new Uint8Array(32);\n handler: (key, code, flags) => void; // keyboard handler\n\n nullProbe = new NullProbe();\n probe: ProbeAll = this.nullProbe;\n\n abstract read(a: number): number;\n abstract write(a: number, v: number): void;\n\n setKeyInput(key: number, code: number, flags: number): void {\n this.handler && this.handler(key, code, flags);\n }\n connectProbe(probe: ProbeAll): void {\n this.probe = probe || this.nullProbe;\n }\n reset() {\n this.cpu.reset();\n }\n loadROM(data: Uint8Array, title?: string, origin?: number): void {\n if (!this.rom) this.rom = new Uint8Array(this.defaultROMSize);\n if (data.length > this.rom.length)\n throw new Error(`ROM too big: ${data.length} > ${this.rom.length}`);\n this.rom.set(data);\n }\n loadState(state) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.inputs.set(state.inputs);\n }\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n inputs: this.inputs.slice(0),\n };\n }\n loadControlsState(state) {\n this.inputs.set(state.inputs);\n }\n saveControlsState() {\n return {\n inputs: this.inputs.slice(0)\n };\n }\n advanceCPU() {\n var c = this.cpu as any;\n var n = 1;\n if (this.cpu.isStable()) { this.probe.logExecute(this.cpu.getPC(), this.cpu.getSP()); }\n if (c.advanceClock) { c.advanceClock(); }\n else if (c.advanceInsn) { n = c.advanceInsn(1); }\n this.probe.logClocks(n);\n return n;\n }\n probeMemoryBus(membus: Bus & Partial): Bus & Partial {\n return {\n read: (a) => {\n let val = membus.read(a);\n this.probe.logRead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write(a, v);\n },\n read32: (a) => {\n let val = membus.read32(a);\n this.probe.logRead(a, val);\n return val;\n },\n write32: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write32(a, v);\n }\n };\n }\n connectCPUMemoryBus(membus: Bus): void {\n this.cpu.connectMemoryBus(this.probeMemoryBus(membus as Bus&Bus32));\n }\n probeIOBus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logIORead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logIOWrite(a, v);\n iobus.write(a, v);\n },\n };\n }\n probeDMABus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logDMARead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logDMAWrite(a, v);\n iobus.write(a, v);\n }\n };\n }\n connectCPUIOBus(iobus: Bus): void {\n this.cpu['connectIOBus'](this.probeIOBus(iobus));\n }\n}\n\nexport abstract class BasicMachine extends BasicHeadlessMachine implements SampledAudioSource {\n\n abstract canvasWidth: number;\n abstract numVisibleScanlines: number;\n abstract sampleRate: number;\n overscan: boolean = false;\n rotate: number = 0;\n aspectRatio: number;\n\n pixels: Uint32Array;\n audio: SampledAudioSink;\n\n scanline: number;\n\n getAudioParams(): SampledAudioParams {\n return { sampleRate: this.sampleRate, stereo: false };\n }\n connectAudio(audio: SampledAudioSink): void {\n this.audio = audio;\n }\n getVideoParams(): VideoParams {\n return {\n width: this.canvasWidth,\n height: this.numVisibleScanlines,\n aspect: this.aspectRatio,\n overscan: this.overscan,\n rotate: this.rotate\n };\n }\n connectVideo(pixels: Uint32Array): void {\n this.pixels = pixels;\n }\n}\n\nexport abstract class BasicScanlineMachine extends BasicMachine implements RasterFrameBased {\n\n abstract numTotalScanlines: number;\n abstract cpuCyclesPerLine: number;\n\n abstract startScanline(): void;\n abstract drawScanline(): void;\n\n frameCycles: number;\n\n advanceFrame(trap: TrapCondition): number {\n this.preFrame();\n var endLineClock = 0;\n var steps = 0;\n this.probe.logNewFrame();\n this.frameCycles = 0;\n for (var sl = 0; sl < this.numTotalScanlines; sl++) {\n endLineClock += this.cpuCyclesPerLine; // could be fractional\n this.scanline = sl;\n this.startScanline();\n while (this.frameCycles < endLineClock) {\n if (trap && trap()) {\n sl = 999;\n break;\n }\n this.frameCycles += this.advanceCPU();\n steps++;\n }\n this.drawScanline();\n this.probe.logNewScanline();\n this.probe.logClocks(Math.floor(this.frameCycles - endLineClock)); // remainder of prev. line\n }\n this.postFrame();\n return steps; // TODO: return steps, not clock? for recorder\n }\n preFrame() { }\n postFrame() { }\n getRasterY() { return this.scanline; }\n getRasterX() { return this.frameCycles % this.cpuCyclesPerLine; }\n}\n", "\nimport { hex } from \"../util\";\n\nconst Z80_OPS = [\"nop\",\"ld bc,xx\",\"ld (bc),a\",\"inc bc\",\"inc b\",\"dec b\",\"ld b,x\",\"rlca\",\"ex af,af'\",\"add hl,bc\",\"ld a,(bc)\",\"dec bc\",\"inc c\",\"dec c\",\"ld c,x\",\"rrca\",\"djnz x\",\"ld de,xx\",\"ld (de),a\",\"inc de\",\"inc d\",\"dec d\",\"ld d,x\",\"rla\",\"jr x\",\"add hl,de\",\"ld a,(de)\",\"dec de\",\"inc e\",\"dec e\",\"ld e,x\",\"rra\",\"jr nz,x\",\"ld hl,xx\",\"ld (xx),hl\",\"inc hl\",\"inc h\",\"dec h\",\"ld h,x\",\"daa\",\"jr z,x\",\"add hl,hl\",\"ld hl,(xx)\",\"dec hl\",\"inc l\",\"dec l\",\"ld l,x\",\"cpl\",\"jr nc,x\",\"ld sp,xx\",\"ld (xx),a\",\"inc sp\",\"inc (hl)\",\"dec (hl)\",\"ld (hl),x\",\"scf\",\"jr c,x\",\"add hl,sp\",\"ld a,(xx)\",\"dec sp\",\"inc a\",\"dec a\",\"ld a,x\",\"ccf\",\"ld b,b\",\"ld b,c\",\"ld b,d\",\"ld b,e\",\"ld b,h\",\"ld b,l\",\"ld b,(hl)\",\"ld b,a\",\"ld c,b\",\"ld c,c\",\"ld c,d\",\"ld c,e\",\"ld c,h\",\"ld c,l\",\"ld c,(hl)\",\"ld c,a\",\"ld d,b\",\"ld d,c\",\"ld d,d\",\"ld d,e\",\"ld d,h\",\"ld d,l\",\"ld d,(hl)\",\"ld d,a\",\"ld e,b\",\"ld e,c\",\"ld e,d\",\"ld e,e\",\"ld e,h\",\"ld e,l\",\"ld e,(hl)\",\"ld e,a\",\"ld h,b\",\"ld h,c\",\"ld h,d\",\"ld h,e\",\"ld h,h\",\"ld h,l\",\"ld h,(hl)\",\"ld h,a\",\"ld l,b\",\"ld l,c\",\"ld l,d\",\"ld l,e\",\"ld l,h\",\"ld l,l\",\"ld l,(hl)\",\"ld l,a\",\"ld (hl),b\",\"ld (hl),c\",\"ld (hl),d\",\"ld (hl),e\",\"ld (hl),h\",\"ld (hl),l\",\"halt\",\"ld (hl),a\",\"ld a,b\",\"ld a,c\",\"ld a,d\",\"ld a,e\",\"ld a,h\",\"ld a,l\",\"ld a,(hl)\",\"ld a,a\",\"add a,b\",\"add a,c\",\"add a,d\",\"add a,e\",\"add a,h\",\"add a,l\",\"add a,(hl)\",\"add a,a\",\"adc a,b\",\"adc a,c\",\"adc a,d\",\"adc a,e\",\"adc a,h\",\"adc a,l\",\"adc a,(hl)\",\"adc a,a\",\"sub b\",\"sub c\",\"sub d\",\"sub e\",\"sub h\",\"sub l\",\"sub (hl)\",\"sub a\",\"sbc a,b\",\"sbc a,c\",\"sbc a,d\",\"sbc a,e\",\"sbc a,h\",\"sbc a,l\",\"sbc a,(hl)\",\"sbc a,a\",\"and b\",\"and c\",\"and d\",\"and e\",\"and h\",\"and l\",\"and (hl)\",\"and a\",\"xor b\",\"xor c\",\"xor d\",\"xor e\",\"xor h\",\"xor l\",\"xor (hl)\",\"xor a\",\"or b\",\"or c\",\"or d\",\"or e\",\"or h\",\"or l\",\"or (hl)\",\"or a\",\"cp b\",\"cp c\",\"cp d\",\"cp e\",\"cp h\",\"cp l\",\"cp (hl)\",\"cp a\",\"ret nz\",\"pop bc\",\"jp nz,xx\",\"jp xx\",\"call nz,xx\",\"push bc\",\"add a,x\",\"rst 00h\",\"ret z\",\"ret\",\"jp z,xx\",\"xxBITxx\",\"call z,xx\",\"call xx\",\"adc a,x\",\"rst 08h\",\"ret nc\",\"pop de\",\"jp nc,xx\",\"out (x),a\",\"call nc,xx\",\"push de\",\"sub x\",\"rst 10h\",\"ret c\",\"exx\",\"jp c,xx\",\"in a,(x)\",\"call c,xx\",\"xxIXxx\",\"sbc a,x\",\"rst 18h\",\"ret po\",\"pop hl\",\"jp po,xx\",\"ex (sp),hl\",\"call po,xx\",\"push hl\",\"and x\",\"rst 20h\",\"ret pe\",\"jp (hl)\",\"jp pe,xx\",\"ex de,hl\",\"call pe,xx\",\"xx80xx\",\"xor x\",\"rst 28h\",\"ret p\",\"pop af\",\"jp p,xx\",\"di\",\"call p,xx\",\"push af\",\"or x\",\"rst 30h\",\"ret m\",\"ld sp,hl\",\"jp m,xx\",\"ei\",\"call m,xx\",\"xxIYxx\",\"cp x\",\"rst 38h\"];\nconst Z80_OPS_ED = [\"in b,(c)\",\"out (c),b\",\"sbc hl,bc\",\"ld (xx),bc\",\"neg\",\"retn\",\"im 0\",\"ld i,a\",\"in c,(c)\",\"out (c),c\",\"adc hl,bc\",\"ld bc,(xx)\",\"neg\",\"reti\",\"\",\"ld r,a\",\"in d,(c)\",\"out (c),d\",\"sbc hl,de\",\"ld (xx),de\",\"neg\",\"retn\",\"im 1\",\"ld a,i\",\"in e,(c)\",\"out (c),e\",\"adc hl,de\",\"ld de,(xx)\",\"neg\",\"retn\",\"im 2\",\"ld a,r\",\"in h,(c)\",\"out (c),h\",\"sbc hl,hl\",\"ld (xx),hl\",\"neg\",\"retn\",\"\",\"rrd\",\"in l,(c)\",\"out (c),l\",\"adc hl,hl\",\"ld hl,(xx)\",\"neg\",\"retn\",\"\",\"rld\",\"in f,(c)\",\"out (c),f\",\"sbc hl,sp\",\"ld (xx),sp\",\"neg\",\"retn\",\"\",\"\",\"in a,(c)\",\"out (c),a\",\"adc hl,sp\",\"ld sp,(xx)\",\"neg\",\"reti\",\"\",\"\",\"ldi\",\"cpi\",\"ini\",\"outi\",\"\",\"\",\"\",\"\",\"ldd\",\"cpd\",\"ind\",\"outd\",\"\",\"\",\"\",\"\",\"ldir\",\"cpir\",\"inir\",\"otir\",\"\",\"\",\"\",\"\",\"lddr\",\"cpdr\",\"indr\",\"otdr\",\"\",\"\",\"\",\"\"];\nconst Z80_OPS_CB = [\"rlc b\",\"rlc c\",\"rlc d\",\"rlc e\",\"rlc h\",\"rlc l\",\"rlc (hl)\",\"rlc a\",\"rrc b\",\"rrc c\",\"rrc d\",\"rrc e\",\"rrc h\",\"rrc l\",\"rrc (hl)\",\"rrc a\",\"rl b\",\"rl c\",\"rl d\",\"rl e\",\"rl h\",\"rl l\",\"rl (hl)\",\"rl a\",\"rr b\",\"rr c\",\"rr d\",\"rr e\",\"rr h\",\"rr l\",\"rr (hl)\",\"rr a\",\"sla b\",\"sla c\",\"sla d\",\"sla e\",\"sla h\",\"sla l\",\"sla (hl)\",\"sla a\",\"sra b\",\"sra c\",\"sra d\",\"sra e\",\"sra h\",\"sra l\",\"sra (hl)\",\"sra a\",\"sll b\",\"sll c\",\"sll d\",\"sll e\",\"sll h\",\"sll l\",\"sll (hl)\",\"sll a\",\"srl b\",\"srl c\",\"srl d\",\"srl e\",\"srl h\",\"srl l\",\"srl (hl)\",\"srl a\",\"bit 0,b\",\"bit 0,c\",\"bit 0,d\",\"bit 0,e\",\"bit 0,h\",\"bit 0,l\",\"bit 0,(hl)\",\"bit 0,a\",\"bit 1,b\",\"bit 1,c\",\"bit 1,d\",\"bit 1,e\",\"bit 1,h\",\"bit 1,l\",\"bit 1,(hl)\",\"bit 1,a\",\"bit 2,b\",\"bit 2,c\",\"bit 2,d\",\"bit 2,e\",\"bit 2,h\",\"bit 2,l\",\"bit 2,(hl)\",\"bit 2,a\",\"bit 3,b\",\"bit 3,c\",\"bit 3,d\",\"bit 3,e\",\"bit 3,h\",\"bit 3,l\",\"bit 3,(hl)\",\"bit 3,a\",\"bit 4,b\",\"bit 4,c\",\"bit 4,d\",\"bit 4,e\",\"bit 4,h\",\"bit 4,l\",\"bit 4,(hl)\",\"bit 4,a\",\"bit 5,b\",\"bit 5,c\",\"bit 5,d\",\"bit 5,e\",\"bit 5,h\",\"bit 5,l\",\"bit 5,(hl)\",\"bit 5,a\",\"bit 6,b\",\"bit 6,c\",\"bit 6,d\",\"bit 6,e\",\"bit 6,h\",\"bit 6,l\",\"bit 6,(hl)\",\"bit 6,a\",\"bit 7,b\",\"bit 7,c\",\"bit 7,d\",\"bit 7,e\",\"bit 7,h\",\"bit 7,l\",\"bit 7,(hl)\",\"bit 7,a\",\"res 0,b\",\"res 0,c\",\"res 0,d\",\"res 0,e\",\"res 0,h\",\"res 0,l\",\"res 0,(hl)\",\"res 0,a\",\"res 1,b\",\"res 1,c\",\"res 1,d\",\"res 1,e\",\"res 1,h\",\"res 1,l\",\"res 1,(hl)\",\"res 1,a\",\"res 2,b\",\"res 2,c\",\"res 2,d\",\"res 2,e\",\"res 2,h\",\"res 2,l\",\"res 2,(hl)\",\"res 2,a\",\"res 3,b\",\"res 3,c\",\"res 3,d\",\"res 3,e\",\"res 3,h\",\"res 3,l\",\"res 3,(hl)\",\"res 3,a\",\"res 4,b\",\"res 4,c\",\"res 4,d\",\"res 4,e\",\"res 4,h\",\"res 4,l\",\"res 4,(hl)\",\"res 4,a\",\"res 5,b\",\"res 5,c\",\"res 5,d\",\"res 5,e\",\"res 5,h\",\"res 5,l\",\"res 5,(hl)\",\"res 5,a\",\"res 6,b\",\"res 6,c\",\"res 6,d\",\"res 6,e\",\"res 6,h\",\"res 6,l\",\"res 6,(hl)\",\"res 6,a\",\"res 7,b\",\"res 7,c\",\"res 7,d\",\"res 7,e\",\"res 7,h\",\"res 7,l\",\"res 7,(hl)\",\"res 7,a\",\"set 0,b\",\"set 0,c\",\"set 0,d\",\"set 0,e\",\"set 0,h\",\"set 0,l\",\"set 0,(hl)\",\"set 0,a\",\"set 1,b\",\"set 1,c\",\"set 1,d\",\"set 1,e\",\"set 1,h\",\"set 1,l\",\"set 1,(hl)\",\"set 1,a\",\"set 2,b\",\"set 2,c\",\"set 2,d\",\"set 2,e\",\"set 2,h\",\"set 2,l\",\"set 2,(hl)\",\"set 2,a\",\"set 3,b\",\"set 3,c\",\"set 3,d\",\"set 3,e\",\"set 3,h\",\"set 3,l\",\"set 3,(hl)\",\"set 3,a\",\"set 4,b\",\"set 4,c\",\"set 4,d\",\"set 4,e\",\"set 4,h\",\"set 4,l\",\"set 4,(hl)\",\"set 4,a\",\"set 5,b\",\"set 5,c\",\"set 5,d\",\"set 5,e\",\"set 5,h\",\"set 5,l\",\"set 5,(hl)\",\"set 5,a\",\"set 6,b\",\"set 6,c\",\"set 6,d\",\"set 6,e\",\"set 6,h\",\"set 6,l\",\"set 6,(hl)\",\"set 6,a\",\"set 7,b\",\"set 7,c\",\"set 7,d\",\"set 7,e\",\"set 7,h\",\"set 7,l\",\"set 7,(hl)\",\"set 7,a\"];\n\nexport function disassembleZ80(pc:number, b0:number, b1:number, b2:number, b3:number) : {line:string, nbytes:number, isaddr:boolean} {\n\n var op,n,am;\n var bytes = [b0,b1,b2,b3];\n var isaddr = false;\n n=1;\n switch (b0) {\n case 0xcb:\n am = Z80_OPS_CB[b1];\n n++;\n break;\n case 0xed:\n if (b1 >= 0x40 && b1 <= 0x7f) am = Z80_OPS_ED[b1 - 0x40];\n if (b1 >= 0xa0 && b1 <= 0xbf) am = Z80_OPS_ED[b1 - 0xa0 + 0x40];\n n++;\n break;\n case 0xdd:\n case 0xfd:\n var ireg = (b0 == 0xdd) ? 'ix' : 'iy';\n if (b1 == 0xcb) {\n // swap the 3rd and 4th bytes [$dd $cb displacement opcode]\n am = Z80_OPS_CB[b3];\n bytes[2] = b3;\n bytes[3] = b2;\n n++;\n } else {\n am = Z80_OPS[b1];\n }\n am = am.replace(/[(]hl[)]/, '('+ireg+'+x)');\n am = am.replace(/\\bhl\\b/, ireg);\n n++;\n break;\n default:\n am = Z80_OPS[b0];\n break;\n }\n if (!am || !am.length) am = \"??\";\n if (/\\bxx\\b/.test(am)) {\n am = am.replace(/\\bxx\\b/,'$'+hex(bytes[n]+(bytes[n+1]<<8), 4));\n n += 2;\n isaddr = true;\n } else if (/\\bx\\b/.test(am)) {\n if (am.startsWith('j')) {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = am.replace(/\\bx\\b/,'$'+hex(offset, 4));\n isaddr = true;\n } else {\n am = am.replace(/\\bx\\b/,'$'+hex(bytes[n], 2));\n }\n n += 1;\n }\n return {line:am.toUpperCase(), nbytes:n, isaddr:isaddr};\n};\n", "\"use strict\";\n/*\nThe MIT License (MIT)\nCopyright (c) 2014 Martin Maly, http://retrocip.cz, http://www.uelectronics.info,\ntwitter: @uelectronics\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function CPU6809() {\n\nvar ticks;\nvar rA,rB,rX,rY,rU,rS,PC,CC,DP,\nF_CARRY =1,\nF_OVERFLOW =2,\nF_ZERO =4,\nF_NEGATIVE =8,\nF_IRQMASK =16,\nF_HALFCARRY =32,\nF_FIRQMASK =64,\nF_ENTIRE =128,\n\nvecRESET = 0xFFFE,\nvecNMI = 0xFFFC,\nvecSWI = 0xFFFA,\nvecIRQ = 0xFFF8,\nvecFIRQ = 0xFFF6,\nvecSWI2 = 0xFFF4,\nvecSWI3 = 0xFFF2,\n\nT=0;\n\nvar IRQs;\n\nvar byteTo, byteAt;\n\nvar cycles = [\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 00-0F */\n 0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6, /* 10-1F */\n 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* 20-2F */\n 4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19, /* 30-3F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 40-4F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 50-5F */\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 60-6F */\n 7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7, /* 70-7F */\n 2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0, /* 80-8F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* 90-9F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* A0-AF */\n 5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6, /* B0-BF */\n 2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0, /* C0-CF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* D0-DF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* E0-EF */\n 5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6]; /* F0-FF */\n\n/* Instruction timing for the two-byte opcodes */\nvar cycles2 = [\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0, /* 80-8F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* 90-9F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* A0-AF */\n 0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7, /* B0-BF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, /* C0-CF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* D0-DF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* E0-EF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7]; /* F0-FF */\n\n/* Negative and zero flags for quicker flag settings */\nvar flagsNZ = [\n 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 80-8F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 90-9F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* A0-AF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* B0-BF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* C0-CF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* D0-DF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* E0-EF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]; /* F0-FF */\n\nvar setV8 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x80)>>6);};\nvar setV16 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x8000)>>14);};\nvar getD = function() {return (rA<<8)+rB;};\nvar setD = function(v) {rA = (v>>8)& 0xff;rB=v&0xff;};\nvar PUSHB = function(b) {\n byteTo(--rS, b & 0xff);\n};\nvar PUSHW = function(b) {\n byteTo(--rS, b & 0xff);\n byteTo(--rS, (b>>8) & 0xff);\n};\n\nvar PUSHBU = function(b) {\n byteTo(--rU, b & 0xff);\n};\nvar PUSHWU = function(b) {\n byteTo(--rU, b & 0xff);\n byteTo(--rU, (b>>8) & 0xff);\n};\nvar PULLB = function() {\n return byteAt(rS++);\n};\nvar PULLW = function() {\n return byteAt(rS++) * 256 + byteAt(rS++);\n};\n\nvar PULLBU = function() {\n return byteAt(rU++);\n};\nvar PULLWU = function() {\n return byteAt(rU++) * 256 + byteAt(rU++);\n};\n\nvar PSHS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHW(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHW(rU);i += 2;}\n if (ucTemp & 0x20){PUSHW(rY);i += 2;}\n if (ucTemp & 0x10){PUSHW(rX);i += 2;}\n if (ucTemp & 0x8){PUSHB(DP); i++;}\n if (ucTemp & 0x4){PUSHB(rB); i++;}\n if (ucTemp & 0x2){PUSHB(rA); i++;}\n if (ucTemp & 0x1){PUSHB(CC); i++;}\n T+=i; //timing\n};\nvar PSHU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHWU(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHWU(rS);i += 2;}\n if (ucTemp & 0x20){PUSHWU(rY);i += 2;}\n if (ucTemp & 0x10){PUSHWU(rX);i += 2;}\n if (ucTemp & 0x8){PUSHBU(DP); i++;}\n if (ucTemp & 0x4){PUSHBU(rB); i++;}\n if (ucTemp & 0x2){PUSHBU(rA); i++;}\n if (ucTemp & 0x1){PUSHBU(CC); i++;}\n T+=i; //timing\n};\nvar PULS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLB(); i++;}\n if (ucTemp & 0x2){rA = PULLB(); i++;}\n if (ucTemp & 0x4){rB = PULLB(); i++;}\n if (ucTemp & 0x8){DP = PULLB(); i++;}\n if (ucTemp & 0x10){rX = PULLW();i += 2;}\n if (ucTemp & 0x20){rY = PULLW();i += 2;}\n if (ucTemp & 0x40) {rU = PULLW();i += 2;}\n if (ucTemp & 0x80) {PC = PULLW();i += 2;}\n T+=i; //timing\n};\nvar PULU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLBU(); i++;}\n if (ucTemp & 0x2){rA = PULLBU(); i++;}\n if (ucTemp & 0x4){rB = PULLBU(); i++;}\n if (ucTemp & 0x8){DP = PULLBU(); i++;}\n if (ucTemp & 0x10){rX = PULLWU();i += 2;}\n if (ucTemp & 0x20){rY = PULLWU();i += 2;}\n if (ucTemp & 0x40) {rS = PULLWU();i += 2;}\n if (ucTemp & 0x80) {PC = PULLWU();i += 2;}\n T+=i; //timing\n};\n\n\nvar getPBR = function(ucPostByte) {\n switch(ucPostByte & 0xf) {\n case 0x00: /* D */\n return getD();\n case 0x1: /* X */\n return rX;\n case 0x2: /* Y */\n return rY;\n case 0x3: /* U */\n return rU;\n case 0x4: /* S */\n return rS;\n case 0x5: /* PC */\n return PC;\n case 0x8: /* A */\n return rA;\n case 0x9: /* B */\n return rB;\n case 0xA: /* CC */\n return CC;\n case 0xB: /* DP */\n return DP;\n default: /* illegal */\n return null;\n }\n};\nvar setPBR = function(ucPostByte, v) {\n switch(ucPostByte & 0xf) /* Get destination register */\n {\n case 0x00: /* D */\n setD(v);return;\n case 0x1: /* X */\n rX = v; return;\n case 0x2: /* Y */\n rY = v; return;\n case 0x3: /* U */\n rU = v; return;\n case 0x4: /* S */\n rS = v; return;\n case 0x5: /* PC */\n PC = v; return;\n case 0x8: /* A */\n rA = v; return;\n case 0x9: /* B */\n rB = v; return;\n case 0xA: /* CC */\n CC = v; return;\n case 0xB: /* DP */\n DP = v; return;\n default: /* illegal */\n return;\n }\n};\n\nvar TFREXG = function(ucPostByte, bExchange)\n{\n\n var ucTemp = ucPostByte & 0x88;\n if (ucTemp == 0x80 || ucTemp == 0x08)\n ucTemp = 0; /* PROBLEM! */\n\n if (bExchange)\n {\n ucTemp = getPBR(ucPostByte>>4);\n setPBR(ucPostByte>>4, getPBR(ucPostByte));\n setPBR(ucPostByte, ucTemp);\n }\n else /* Transfer */ {\n setPBR(ucPostByte, getPBR(ucPostByte>>4));\n }\n} ;\n\nvar signed = function(x) {\n return (x>127)?(x-256):x;\n};\nvar signed16 = function(x) {\n return (x>32767)?(x-65536):x;\n};\n\nvar fetch = function() {\n var v = byteAt(PC++);\n PC &= 0xffff;\n return v;\n};\nvar fetch16 = function() {\n var v1 = byteAt(PC++);\n PC &= 0xffff;\n var v2 = byteAt(PC++);\n PC &= 0xffff;\n return v1*256+v2;\n};\n\nvar ReadWord = function(addr) {\n var v1 = byteAt(addr++);\n addr &= 0xffff;\n var v2 = byteAt(addr++);\n addr &= 0xffff;\n return v1*256+v2;\n};\nvar WriteWord = function(addr,v) {\n byteTo(addr++,(v>>8)&0xff);\n addr &= 0xffff;\n byteTo(addr,v&0xff);\n};\n\nvar PostByte = function() {\n var pb = fetch();\n var preg;\n switch (pb & 0x60) {\n case 0:\n preg = rX; break;\n case 0x20:\n preg = rY; break;\n case 0x40:\n preg = rU; break;\n case 0x60:\n preg = rS; break;\n }\n\n var xchg = null;\n var addr = null;\n var sTemp;\n\n if (pb & 0x80) /* Complex stuff */\n {\n switch (pb & 0x0f)\n {\n case 0: /* EA = ,reg+ */\n addr = preg;\n xchg = preg + 1;\n T += 2;\n break;\n case 1: /* EA = ,reg++ */\n addr = preg;\n xchg = preg + 2;\n T += 3;\n break;\n case 2: /* EA = ,-reg */\n xchg = preg - 1;\n addr = xchg;\n T += 2;\n break;\n case 3: /* EA = ,--reg */\n xchg = preg - 2;\n addr = xchg;\n T += 3;\n break;\n case 4: /* EA = ,reg */\n addr = preg;\n break;\n case 5: /* EA = ,reg + B */\n //usAddr = *pReg + (signed short)(signed char)regs->ucRegB;\n addr = preg + signed(rB);\n T += 1;\n break;\n case 6: /* EA = ,reg + A */\n addr = preg + signed(rA);\n T += 1;\n break;\n case 7: /* illegal */\n addr = 0;\n break;\n case 8: /* EA = ,reg + 8-bit offset */\n addr = preg + signed(fetch());\n T += 1;\n break;\n case 9: /* EA = ,reg + 16-bit offset */\n addr = preg + signed16(fetch16());\n T += 4;\n break;\n case 0xA: /* illegal */\n addr = 0;\n break;\n case 0xB: /* EA = ,reg + D */\n T += 4;\n addr = preg + getD();\n break;\n case 0xC: /* EA = PC + 8-bit offset */\n sTemp = signed(fetch());\n addr = PC + sTemp;\n T += 1;\n break;\n case 0xD: /* EA = PC + 16-bit offset */\n sTemp = signed16(fetch16());\n addr = PC + sTemp;\n T += 5;\n break;\n case 0xe: /* Illegal */\n addr = 0;\n break;\n case 0xF: /* EA = [,address] */\n T += 5;\n addr = fetch16();\n break;\n } /* switch */\n\n addr &= 0xffff;\n\n if (pb & 0x10) /* Indirect addressing */\n {\n addr = byteAt(addr)*256+byteAt((addr+1) & 0xffff);\n T += 3;\n }\n }\n else /* Just a 5 bit signed offset + register */\n {\n var sByte = pb & 0x1f;\n if (sByte > 15) /* Two's complement 5-bit value */\n sByte -= 32;\n addr = preg + sByte;\n T += 1;\n }\n\n if (xchg!==null) {\n switch (pb & 0x60) {\n case 0:\n rX = xchg; break;\n case 0x20:\n rY = xchg; break;\n case 0x40:\n rU = xchg; break;\n case 0x60:\n rS = xchg; break;\n }\n\n }\n\n return addr & 0xffff; /* Return the effective address */\n};\n\nvar flagsNZ16 = function(word) {\n CC &= ~(F_ZERO | F_NEGATIVE);\n if (word===0) CC |= F_ZERO;\n if (word & 0x8000) CC |= F_NEGATIVE;\n};\n\n// ============= Operations\n\nvar oINC = function(b) {\n b++;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0 || b == 0x80) CC |= F_OVERFLOW;\n return b;\n};\nvar oDEC = function(b) {\n b--;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0x7f || b == 0xff) CC |= F_OVERFLOW;\n return b;\n};\nvar oSUB = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oSUB16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADD = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oADD16 = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADC = function(b,v) {\n var temp = b+v+(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oSBC = function(b,v) {\n var temp = b-v-(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oCMP = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return;\n};\nvar oCMP16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return;\n};\n\nvar oNEG = function(b) {\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if (b == 0x80)\n CC |= F_OVERFLOW;\n b = ((~b)&0xff) + 1;\n if (b === 0) CC |= F_ZERO;\n if (b & 0x80) CC |= F_NEGATIVE | F_CARRY;\n return b;\n};\n\nvar oLSR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b >>= 1;\n if (b === 0) CC |= F_ZERO;\n return b & 0xff;\n};\nvar oASR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = (b & 0x80) | (b>>1);\n CC |= flagsNZ[b];\n return b;\n};\nvar oASL = function(b) {\n var temp = b;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b <<= 1;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROL = function(b) {\n var temp = b;\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b = b<<1 | oldc;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROR = function(b) {\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = b>>1 | oldc<<7;\n CC |= flagsNZ[b];\n// if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\n\nvar oEOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b |= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oAND = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b &= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oCOM = function(b) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= 0xff;\n CC |= flagsNZ[b];\n CC |= F_CARRY;\n return b;\n};\n\n//----common\nvar dpadd = function() {\n //direct page + 8bit index\n return DP*256 + fetch();\n};\n\nvar step = function() {\n var oldT = T;\n\n var addr = null;\n var pb = null;\n\n var oldPC = PC;\n var opcode = fetch();\n T+=cycles[opcode];\n switch (opcode) {\n case 0x00: //NEG DP\n addr = dpadd();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x03: //COM DP\n addr = dpadd();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x04: //LSR DP\n addr = dpadd();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x06: //ROR DP\n addr = dpadd();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x07: //ASR DP\n addr = dpadd();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x08: //ASL DP\n addr = dpadd();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x09: //ROL DP\n addr = dpadd();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x0A: //DEC DP\n addr = dpadd();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x0C: //INC DP\n addr = dpadd();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x0D: //TST DP\n addr = dpadd();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x0E: //JMP DP\n addr = dpadd();\n PC = addr;\n break;\n case 0x0F: //CLR DP\n addr = dpadd();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n case 0x12: //NOP\n break;\n case 0x13: //SYNC\n break;\n case 0x16: //LBRA relative\n addr = signed16(fetch16());\n PC += addr;\n break;\n case 0x17: //LBSR relative\n addr = signed16(fetch16());\n PUSHW(PC);\n PC += addr;\n break;\n case 0x19: //DAA\n var cf = 0;\n var nhi = rA & 0xf0, nlo = rA & 0x0f;\n if( nlo>0x09 || CC & 0x20 ) cf |= 0x06;\n if( nhi>0x80 && nlo>0x09 ) cf |= 0x60;\n if( nhi>0x90 || CC & 0x01 ) cf |= 0x60;\n addr = cf + rA;\n CC &= ~(F_CARRY | F_NEGATIVE | F_ZERO | F_OVERFLOW);\n if (addr & 0x100)\n CC |= F_CARRY;\n rA = addr & 0xff;\n CC |= flagsNZ[rA];\n break;\n case 0x1A: //ORCC\n CC |= fetch();\n break;\n case 0x1C: //ANDCC\n CC &= fetch();\n break;\n case 0x1D: //SEX\n rA = (rB & 0x80)?0xff:0;\n flagsNZ16(getD());\n CC &= ~F_OVERFLOW;\n break;\n case 0x1E: //EXG\n pb = fetch();\n TFREXG(pb,true);\n break;\n case 0x1F: //EXG\n pb = fetch();\n TFREXG(pb,false);\n break;\n\n case 0x20: //BRA\n addr = signed(fetch());\n PC += addr;\n break;\n case 0x21: //BRN\n addr = signed(fetch());\n break;\n case 0x22: //BHI\n addr = signed(fetch());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed(fetch());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed(fetch());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed(fetch());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed(fetch());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed(fetch());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed(fetch());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed(fetch());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed(fetch());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed(fetch());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n\n case 0x30: //LEAX\n rX = PostByte();\n if (rX===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x31: //LEAY\n rY = PostByte();\n if (rY===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x32: //LEAS\n rS = PostByte();\n break;\n case 0x33: //LEAU\n rU = PostByte();\n break;\n\n case 0x34: //PSHS\n PSHS(fetch());\n break;\n case 0x35: //PULS\n PULS(fetch());\n break;\n case 0x36: //PSHU\n PSHU(fetch());\n break;\n case 0x37: //PULU\n PULU(fetch());\n break;\n case 0x39: //RTS\n PC = PULLW();\n break;\n case 0x3A: //ABX\n rX += rB;\n break;\n case 0x3B: //RTI\n CC = PULLB();\n if (CC & F_ENTIRE) {\n T+=9;\n rA = PULLB();\n rB = PULLB();\n DP = PULLB();\n rX = PULLW();\n rY = PULLW();\n rU = PULLW();\n }\n PC = PULLW();\n break;\n case 0x3C: //CWAI **todo\n CC &= fetch();\n break;\n case 0x3D: //MUL\n addr = rA * rB;\n if (addr===0) CC|=F_ZERO; else CC&=~F_ZERO;\n if (addr&0x80) CC|=F_CARRY; else CC&=~F_CARRY;\n setD(addr);\n break;\n case 0x3F: //SWI\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI);\n break;\n\n case 0x40:\n rA = oNEG(rA);\n break;\n case 0x43:\n rA = oCOM(rA);\n break;\n case 0x44:\n rA = oLSR(rA);\n break;\n case 0x46:\n rA = oROR(rA);\n break;\n case 0x47:\n rA = oASR(rA);\n break;\n case 0x48:\n rA = oASL(rA);\n break;\n case 0x49:\n rA = oROL(rA);\n break;\n case 0x4A:\n rA = oDEC(rA);\n break;\n case 0x4C:\n rA = oINC(rA);\n break;\n case 0x4D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x4F:\n rA = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x50:\n rB = oNEG(rB);\n break;\n case 0x53:\n rB = oCOM(rB);\n break;\n case 0x54:\n rB = oLSR(rB);\n break;\n case 0x56:\n rB = oROR(rB);\n break;\n case 0x57:\n rB = oASR(rB);\n break;\n case 0x58:\n rB = oASL(rB);\n break;\n case 0x59:\n rB = oROL(rB);\n break;\n case 0x5A:\n rB = oDEC(rB);\n break;\n case 0x5C:\n rB = oINC(rB);\n break;\n case 0x5D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0x5F:\n rB = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x60: //NEG indexed\n addr = PostByte();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x63: //COM indexed\n addr = PostByte();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x64: //LSR indexed\n addr = PostByte();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x66: //ROR indexed\n addr = PostByte();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x67: //ASR indexed\n addr = PostByte();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x68: //ASL indexed\n addr = PostByte();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x69: //ROL indexed\n addr = PostByte();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x6A: //DEC indexed\n addr = PostByte();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x6C: //INC indexed\n addr = PostByte();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x6D: //TST indexed\n addr = PostByte();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x6E: //JMP indexed\n addr = PostByte();\n PC = addr;\n break;\n case 0x6F: //CLR indexed\n addr = PostByte();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n\n case 0x70: //NEG extended\n addr = fetch16();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x73: //COM extended\n addr = fetch16();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x74: //LSR extended\n addr = fetch16();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x76: //ROR extended\n addr = fetch16();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x77: //ASR extended\n addr = fetch16();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x78: //ASL extended\n addr = fetch16();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x79: //ROL extended\n addr = fetch16();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x7A: //DEC extended\n addr = fetch16();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x7C: //INC extended\n addr = fetch16();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x7D: //TST extended\n addr = fetch16();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x7E: //JMP extended\n addr = fetch16();\n PC = addr;\n break;\n case 0x7F: //CLR extended\n addr = fetch16();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n // regs A,X\n\n case 0x80: //SUBA imm\n rA = oSUB(rA, fetch());\n break;\n case 0x81: //CMPA imm\n oCMP(rA, fetch());\n break;\n case 0x82: //SBCA imm\n rA = oSBC(rA, fetch());\n break;\n case 0x83: //SUBD imm\n setD(oSUB16(getD(),fetch16()));\n break;\n case 0x84: //ANDA imm\n rA = oAND(rA, fetch());\n break;\n case 0x85: //BITA imm\n oAND(rA, fetch());\n break;\n case 0x86: //LDA imm\n rA = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x88: //EORA imm\n rA = oEOR(rA, fetch());\n break;\n case 0x89: //ADCA imm\n rA = oADC(rA, fetch());\n break;\n case 0x8A: //ORA imm\n rA = oOR(rA, fetch());\n break;\n case 0x8B: //ADDA imm\n rA = oADD(rA, fetch());\n break;\n case 0x8C: //CMPX imm\n oCMP16(rX, fetch16());\n break;\n\n case 0x8D: //JSR imm\n addr = signed(fetch());\n PUSHW(PC);\n PC+=addr;\n break;\n case 0x8E: //LDX imm\n rX = fetch16();\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0x90: //SUBA direct\n addr = dpadd();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0x91: //CMPA direct\n addr = dpadd();\n oCMP(rA, byteAt(addr));\n break;\n case 0x92: //SBCA direct\n addr = dpadd();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0x93: //SUBD direct\n addr = dpadd();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0x94: //ANDA direct\n addr = dpadd();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0x95: //BITA direct\n addr = dpadd();\n oAND(rA, byteAt(addr));\n break;\n case 0x96: //LDA direct\n addr = dpadd();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x97: //STA direct\n addr = dpadd();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x98: //EORA direct\n addr = dpadd();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0x99: //ADCA direct\n addr = dpadd();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0x9A: //ORA direct\n addr = dpadd();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0x9B: //ADDA direct\n addr = dpadd();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0x9C: //CMPX direct\n addr = dpadd();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0x9D: //JSR direct\n addr = dpadd();\n PUSHW(PC);\n PC=addr;\n break;\n case 0x9E: //LDX direct\n addr = dpadd();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STX direct\n addr = dpadd();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xA0: //SUBA indexed\n addr = PostByte();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xA1: //CMPA indexed\n addr = PostByte();\n oCMP(rA, byteAt(addr));\n break;\n case 0xA2: //SBCA indexed\n addr = PostByte();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xA3: //SUBD indexed\n addr = PostByte();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xA4: //ANDA indexed\n addr = PostByte();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xA5: //BITA indexed\n addr = PostByte();\n oAND(rA, byteAt(addr));\n break;\n case 0xA6: //LDA indexed\n addr = PostByte();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA7: //STA indexed\n addr = PostByte();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA8: //EORA indexed\n addr = PostByte();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xA9: //ADCA indexed\n addr = PostByte();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xAA: //ORA indexed\n addr = PostByte();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xAB: //ADDA indexed\n addr = PostByte();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xAC: //CMPX indexed\n addr = PostByte();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xAD: //JSR indexed\n addr = PostByte();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xAE: //LDX indexed\n addr = PostByte();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STX indexed\n addr = PostByte();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xB0: //SUBA extended\n addr = fetch16();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xB1: //CMPA extended\n addr = fetch16();\n oCMP(rA, byteAt(addr));\n break;\n case 0xB2: //SBCA extended\n addr = fetch16();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xB3: //SUBD extended\n addr = fetch16();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xB4: //ANDA extended\n addr = fetch16();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xB5: //BITA extended\n addr = fetch16();\n oAND(rA, byteAt(addr));\n break;\n case 0xB6: //LDA extended\n addr = fetch16();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB7: //STA extended\n addr = fetch16();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB8: //EORA extended\n addr = fetch16();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xB9: //ADCA extended\n addr = fetch16();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xBA: //ORA extended\n addr = fetch16();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xBB: //ADDA extended\n addr = fetch16();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xBC: //CMPX extended\n addr = fetch16();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xBD: //JSR extended\n addr = fetch16();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xBE: //LDX extended\n addr = fetch16();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STX extended\n addr = fetch16();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n //Regs B, Y\n\n case 0xC0: //SUBB imm\n rB = oSUB(rB, fetch());\n break;\n case 0xC1: //CMPB imm\n oCMP(rB, fetch());\n break;\n case 0xC2: //SBCB imm\n rB = oSBC(rB, fetch());\n break;\n case 0xC3: //ADDD imm\n setD(oADD16(getD(),fetch16()));\n break;\n case 0xC4: //ANDB imm\n rB = oAND(rB, fetch());\n break;\n case 0xC5: //BITB imm\n oAND(rB, fetch());\n break;\n case 0xC6: //LDB imm\n rB = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xC8: //EORB imm\n rB = oEOR(rB, fetch());\n break;\n case 0xC9: //ADCB imm\n rB = oADC(rB, fetch());\n break;\n case 0xCA: //ORB imm\n rB = oOR(rB, fetch());\n break;\n case 0xCB: //ADDB imm\n rB = oADD(rB, fetch());\n break;\n case 0xCC: //LDD imm\n addr = fetch16();\n setD(addr);\n flagsNZ16(addr);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xCE: //LDU imm\n rU = fetch16();\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xD0: //SUBB direct\n addr = dpadd();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xD1: //CMPB direct\n addr = dpadd();\n oCMP(rB, byteAt(addr));\n break;\n case 0xD2: //SBCB direct\n addr = dpadd();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xD3: //ADDD direct\n addr = dpadd();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xD4: //ANDB direct\n addr = dpadd();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xD5: //BITB direct\n addr = dpadd();\n oAND(rB, byteAt(addr));\n break;\n case 0xD6: //LDB direct\n addr = dpadd();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD7: //STB direct\n addr = dpadd();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD8: //EORB direct\n addr = dpadd();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xD9: //ADCB direct\n addr = dpadd();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xDA: //ORB direct\n addr = dpadd();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xDB: //ADDB direct\n addr = dpadd();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xDC: //LDD direct\n addr = dpadd();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xDD: //STD direct\n addr = dpadd();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDU direct\n addr = dpadd();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STU direct\n addr = dpadd();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xE0: //SUBB indexed\n addr = PostByte();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xE1: //CMPB indexed\n addr = PostByte();\n oCMP(rB, byteAt(addr));\n break;\n case 0xE2: //SBCB indexed\n addr = PostByte();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xE3: //ADDD indexed\n addr = PostByte();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xE4: //ANDB indexed\n addr = PostByte();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xE5: //BITB indexed\n addr = PostByte();\n oAND(rB, byteAt(addr));\n break;\n case 0xE6: //LDB indexed\n addr = PostByte();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE7: //STB indexed\n addr = PostByte();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE8: //EORB indexed\n addr = PostByte();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xE9: //ADCB indexed\n addr = PostByte();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xEA: //ORB indexed\n addr = PostByte();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xEB: //ADDB indexed\n addr = PostByte();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xEC: //LDD indexed\n addr = PostByte();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xED: //STD indexed\n addr = PostByte();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDU indexed\n addr = PostByte();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STU indexed\n addr = PostByte();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xF0: //SUBB extended\n addr = fetch16();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xF1: //CMPB extended\n addr = fetch16();\n oCMP(rB, byteAt(addr));\n break;\n case 0xF2: //SBCB extended\n addr = fetch16();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xF3: //ADDD extended\n addr = fetch16();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xF4: //ANDB extended\n addr = fetch16();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xF5: //BITB extended\n addr = fetch16();\n oAND(rB, byteAt(addr));\n break;\n case 0xF6: //LDB extended\n addr = fetch16();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF7: //STB extended\n addr = fetch16();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF8: //EORB extended\n addr = fetch16();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xF9: //ADCB extended\n addr = fetch16();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xFA: //ORB extended\n addr = fetch16();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xFB: //ADDB extended\n addr = fetch16();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xFC: //LDD extended\n addr = fetch16();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xFD: //STD extended\n addr = fetch16();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDU extended\n addr = fetch16();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STU extended\n addr = fetch16();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n // page 1\n case 0x10: //page 1\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x21: //BRN\n addr = signed16(fetch16());\n break;\n case 0x22: //BHI\n addr = signed16(fetch16());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed16(fetch16());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed16(fetch16());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed16(fetch16());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed16(fetch16());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed16(fetch16());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed16(fetch16());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed16(fetch16());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed16(fetch16());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed16(fetch16());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n case 0x3f: //SWI2\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI2);\n break;\n case 0x83: //CMPD imm\n oCMP16(getD(),fetch16());\n break;\n case 0x8C: //CMPY imm\n oCMP16(rY,fetch16());\n break;\n case 0x8E: //LDY imm\n rY = fetch16();\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x93: //CMPD direct\n addr = dpadd();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0x9C: //CMPY direct\n addr = dpadd();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0x9E: //LDY direct\n addr = dpadd();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STY direct\n addr = dpadd();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xA3: //CMPD indexed\n addr = PostByte();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xAC: //CMPY indexed\n addr = PostByte();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xAE: //LDY indexed\n addr = PostByte();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STY indexed\n addr = PostByte();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xB3: //CMPD extended\n addr = fetch16();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xBC: //CMPY extended\n addr = fetch16();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xBE: //LDY extended\n addr = fetch16();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STY extended\n addr = fetch16();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xCE: //LDS imm\n rS = fetch16();\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDS direct\n addr = dpadd();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STS direct\n addr = dpadd();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDS indexed\n addr = PostByte();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STS indexed\n addr = PostByte();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDS extended\n addr = fetch16();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STS extended\n addr = fetch16();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n }\n }\n break;\n // page 2\n case 0x11: //page 2\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x3f: //SWI3\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI3);\n break;\n case 0x83: //CMPU imm\n oCMP16(rU, fetch16());\n break;\n case 0x8C: //CMPS imm\n oCMP16(rS, fetch16());\n break;\n case 0x93: //CMPU imm\n addr = dpadd();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0x9C: //CMPS imm\n addr = dpadd();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xA3: //CMPU imm\n addr = PostByte();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xAC: //CMPS imm\n addr = PostByte();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xB3: //CMPU imm\n addr = fetch16();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xBC: //CMPS imm\n addr = fetch16();\n oCMP16(rS, ReadWord(addr));\n break;\n\n }\n }\n break;\n\n\n }\n\n rA &= 0xff;\n rB &= 0xff;\n CC &= 0xff;\n DP &= 0xff;\n rX &= 0xffff;\n rY &= 0xffff;\n rU &= 0xffff;\n rS &= 0xffff;\n PC &= 0xffff;\n return T-oldT;\n\n};\n\nvar reset = function(){\n PC = ReadWord(vecRESET);\n DP = 0;\n CC |= F_FIRQMASK | F_IRQMASK;\n T=0;\n rA=rB=DP=rX=rY=rU=rS=0;\n};\n\n//---------- Disassembler\n\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n\nPSHS 10\nPSHU 11\n\nEXG, TFR 20\n*/\nvar ds = [\n[2, 1,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 1,\"COM\"],\n[2, 1,\"LSR\"],\n[1, 0,\"???\"],\n[2, 1,\"ROR\"],\n[2, 1,\"ASR\"],\n[2, 1,\"LSL\"],\n[2, 1,\"ROL\"],\n[2, 1,\"DEC\"],\n[1, 0,\"???\"],\n[2, 1,\"INC\"],\n[2, 1,\"TST\"],\n[2, 1,\"JMP\"],\n[2, 1,\"CLR\"],\n[1, 0,\"Prefix\"],\n[1, 0,\"Prefix\"],\n[1, 2,\"NOP\"],\n[1, 2,\"SYNC\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 3,\"LBRA\"],\n[3, 3,\"LBSR\"],\n[1, 0,\"???\"],\n[1, 2,\"DAA\"],\n[2, 4,\"ORCC\"],\n[1, 0,\"???\"],\n[2, 4,\"ANDCC\"],\n[1, 2,\"SEX\"],\n[2, 20,\"EXG\"],\n[2, 20,\"TFR\"],\n[2, 5,\"BRA\"],\n[2, 5,\"BRN\"],\n[2, 5,\"BHI\"],\n[2, 5,\"BLS\"],\n[2, 5,\"BCC\"],\n[2, 5,\"BCS\"],\n[2, 5,\"BNE\"],\n[2, 5,\"BEQ\"],\n[2, 5,\"BVC\"],\n[2, 5,\"BVS\"],\n[2, 5,\"BPL\"],\n[2, 5,\"BMI\"],\n[2, 5,\"BGE\"],\n[2, 5,\"BLT\"],\n[2, 5,\"BGT\"],\n[2, 5,\"BLE\"],\n[2, 6,\"LEAX\"],\n[2, 6,\"LEAY\"],\n[2, 6,\"LEAS\"],\n[2, 6,\"LEAU\"],\n[2, 10,\"PSHS\"],\n[2, 10,\"PULS\"],\n[2, 11,\"PSHU\"],\n[2, 11,\"PULU\"],\n[1, 0,\"???\"],\n[1, 2,\"RTS\"],\n[1, 2,\"ABX\"],\n[1, 2,\"RTI\"],\n[2, 2,\"CWAI\"],\n[1, 2,\"MUL\"],\n[1, 2,\"RESET\"],\n[1, 2,\"SWI1\"],\n[1, 2,\"NEGA\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMA\"],\n[1, 2,\"LSRA\"],\n[1, 0,\"???\"],\n[1, 2,\"RORA\"],\n[1, 2,\"ASRA\"],\n[1, 2,\"ASLA\"],\n[1, 2,\"ROLA\"],\n[1, 2,\"DECA\"],\n[1, 0,\"???\"],\n[1, 2,\"INCA\"],\n[1, 2,\"TSTA\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRA\"],\n[1, 2,\"NEGB\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMB\"],\n[1, 2,\"LSRB\"],\n[1, 0,\"???\"],\n[1, 2,\"RORB\"],\n[1, 2,\"ASRB\"],\n[1, 2,\"ASLB\"],\n[1, 2,\"ROLB\"],\n[1, 2,\"DECB\"],\n[1, 0,\"???\"],\n[1, 2,\"INCB\"],\n[1, 2,\"TSTB\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRB\"],\n[2, 6,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 6,\"COM\"],\n[2, 6,\"LSR\"],\n[1, 0,\"???\"],\n[2, 6,\"ROR\"],\n[2, 6,\"ASR\"],\n[2, 6,\"LSL\"],\n[2, 6,\"ROL\"],\n[2, 6,\"DEC\"],\n[1, 0,\"???\"],\n[2, 6,\"INC\"],\n[2, 6,\"TST\"],\n[2, 6,\"JMP\"],\n[2, 6,\"CLR\"],\n[3, 7,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 7,\"COM\"],\n[3, 7,\"LSR\"],\n[1, 0,\"???\"],\n[3, 7,\"ROR\"],\n[3, 7,\"ASR\"],\n[3, 7,\"LSL\"],\n[3, 7,\"ROL\"],\n[3, 7,\"DEC\"],\n[1, 0,\"???\"],\n[3, 7,\"INC\"],\n[3, 7,\"TST\"],\n[3, 7,\"JMP\"],\n[3, 7,\"CLR\"],\n[2, 4,\"SUBA\"],\n[2, 4,\"CMPA\"],\n[2, 4,\"SBCA\"],\n[3, 8,\"SUBD\"],\n[2, 4,\"ANDA\"],\n[2, 4,\"BITA\"],\n[2, 4,\"LDA\"],\n[1, 0,\"???\"],\n[2, 4,\"EORA\"],\n[2, 4,\"ADCA\"],\n[2, 4,\"ORA\"],\n[2, 4,\"ADDA\"],\n[3, 8,\"CMPX\"],\n[2, 5,\"BSR\"],\n[3, 8,\"LDX\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBA\"],\n[2, 1,\"CMPA\"],\n[2, 1,\"SBCA\"],\n[2, 1,\"SUBd\"],\n[2, 1,\"ANDA\"],\n[2, 1,\"BITA\"],\n[2, 1,\"LDA\"],\n[2, 1,\"STA\"],\n[2, 1,\"EORA\"],\n[2, 1,\"ADCA\"],\n[2, 1,\"ORA\"],\n[2, 1,\"ADDA\"],\n[2, 1,\"CMPX\"],\n[2, 1,\"JSR\"],\n[2, 1,\"LDX\"],\n[2, 1,\"STX\"],\n[2, 6,\"SUBA\"],\n[2, 6,\"CMPA\"],\n[2, 6,\"SBCA\"],\n[2, 6,\"SUBD\"],\n[2, 6,\"ANDA\"],\n[2, 6,\"BITA\"],\n[2, 6,\"LDA\"],\n[2, 6,\"STA\"],\n[2, 6,\"EORA\"],\n[2, 6,\"ADCA\"],\n[2, 6,\"ORA\"],\n[2, 6,\"ADDA\"],\n[2, 6,\"CMPX\"],\n[2, 6,\"JSR\"],\n[2, 6,\"LDX\"],\n[2, 6,\"STX\"],\n[3, 7,\"SUBA\"],\n[3, 7,\"CMPA\"],\n[3, 7,\"SBCA\"],\n[3, 7,\"SUBD\"],\n[3, 7,\"ANDA\"],\n[3, 7,\"BITA\"],\n[3, 7,\"LDA\"],\n[3, 7,\"STA\"],\n[3, 7,\"EORA\"],\n[3, 7,\"ADCA\"],\n[3, 7,\"ORA\"],\n[3, 7,\"ADDA\"],\n[3, 7,\"CMPX\"],\n[3, 7,\"JSR\"],\n[3, 7,\"LDX\"],\n[3, 7,\"STX\"],\n[2, 4,\"SUBB\"],\n[2, 4,\"CMPB\"],\n[2, 4,\"SBCB\"],\n[3, 8,\"ADDD\"],\n[2, 4,\"ANDB\"],\n[2, 4,\"BITB\"],\n[2, 4,\"LDB\"],\n[1, 0,\"???\"],\n[2, 4,\"EORB\"],\n[2, 4,\"ADCB\"],\n[2, 4,\"ORB\"],\n[2, 4,\"ADDB\"],\n[3, 8,\"LDD\"],\n[1, 0,\"???\"],\n[3, 8,\"LDU\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBB\"],\n[2, 1,\"CMPB\"],\n[2, 1,\"SBCB\"],\n[2, 1,\"ADDD\"],\n[2, 1,\"ANDB\"],\n[2, 1,\"BITB\"],\n[2, 1,\"LDB\"],\n[2, 1,\"STB\"],\n[2, 1,\"EORB\"],\n[2, 1,\"ADCB\"],\n[2, 1,\"ORB \"],\n[2, 1,\"ADDB\"],\n[2, 1,\"LDD \"],\n[2, 1,\"STD \"],\n[2, 1,\"LDU \"],\n[2, 1,\"STU \"],\n[2, 6,\"SUBB\"],\n[2, 6,\"CMPB\"],\n[2, 6,\"SBCB\"],\n[2, 6,\"ADDD\"],\n[2, 6,\"ANDB\"],\n[2, 6,\"BITB\"],\n[2, 6,\"LDB\"],\n[2, 6,\"STB\"],\n[2, 6,\"EORB\"],\n[2, 6,\"ADCB\"],\n[2, 6,\"ORB\"],\n[2, 6,\"ADDB\"],\n[2, 6,\"LDD\"],\n[2, 6,\"STD\"],\n[2, 6,\"LDU\"],\n[2, 6,\"STU\"],\n[3, 7,\"SUBB\"],\n[3, 7,\"CMPB\"],\n[3, 7,\"SBCB\"],\n[3, 7,\"ADDD\"],\n[3, 7,\"ANDB\"],\n[3, 7,\"BITB\"],\n[3, 7,\"LDB\"],\n[3, 7,\"STB\"],\n[3, 7,\"EORB\"],\n[3, 7,\"ADCB\"],\n[3, 7,\"ORB\"],\n[3, 7,\"ADDB\"],\n[3, 7,\"LDD\"],\n[3, 7,\"STD\"],\n[3, 7,\"LDU\"],\n[3, 7,\"STU\"]\n];\n\nvar ds11 = {\n0x3F: [2,2,\"SWI3\"],\n0x83: [4,8,\"CMPU\"],\n0x8C: [4,8,\"CMPS\"],\n0x93: [3,1,\"CMPU\"],\n0x9C: [3,1,\"CMPS\"],\n0xA3: [3,6,\"CMPU\"],\n0xAC: [3,6,\"CMPS\"],\n0xB3: [4,7,\"CMPU\"],\n0xBC: [4,7,\"CMPS\"]\n};\n\nvar ds10 = {\n0x21:[5,3,\"LBRN\"],\n0x22:[5,3,\"LBHI\"],\n0x23:[5,3,\"LBLS\"],\n0x24:[5,3,\"LBCC\"],\n0x25:[5,3,\"LBCS\"],\n0x26:[5,3,\"LBNE\"],\n0x27:[5,3,\"LBEQ\"],\n0x28:[5,3,\"LBVC\"],\n0x29:[5,3,\"LBVS\"],\n0x2a:[5,3,\"LBPL\"],\n0x2b:[5,3,\"LBMI\"],\n0x2c:[5,3,\"LBGE\"],\n0x2d:[5,3,\"LBLT\"],\n0x2e:[5,3,\"LBGT\"],\n0x2f:[5,3,\"LBLE\"],\n0x3F:[2,2,\"SWI2\"],\n0x83:[4,8,\"CMPD\"],\n0x8C:[4,8,\"CMPY\"],\n0x8E:[4,8,\"LDY\"],\n0x93:[3,1,\"CMPD\"],\n0x9C:[3,1,\"CMPY\"],\n0x9E:[3,1,\"LDY\"],\n0x9F:[3,1,\"STY\"],\n0xA3:[3,6,\"CMPD\"],\n0xAC:[3,6,\"CMPY\"],\n0xAE:[3,6,\"LDY\"],\n0xAF:[3,6,\"STY\"],\n0xB3:[4,7,\"CMPD\"],\n0xBC:[4,7,\"CMPY\"],\n0xBE:[4,7,\"LDY\"],\n0xBF:[4,7,\"STY\"],\n0xCE:[4,8,\"LDS\"],\n0xDE:[3,1,\"LDS\"],\n0xDF:[3,1,\"STS\"],\n0xEE:[3,6,\"LDS\"],\n0xEF:[3,6,\"STS\"],\n0xFE:[4,7,\"LDS\"],\n0xFF:[4,7,\"STS\"]\n};\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n*/\n\nvar disasm = function(i,a,b,c,d,pc) {\n var toHexN = function(n,d) {\n var s = n.toString(16);\n while (s.length >5];\n if (!(pb & 0x80)) {\n //direct5\n var disp = pb & 0x1f;\n if (disp>15) disp = disp-32;\n mnemo+=disp+','+ixr;\n break;\n }\n var ind = pb & 0x10;\n var mod = pb & 0x0f;\n var ofs8 = (b>127)?(b-256):b;\n var ofs16 = ((b*256+c)>32767)?((b*256+c)-65536):(b*256+c);\n if (!ind) {\n switch (mod) {\n case 0: mnemo += \",\"+ixr+'+'; break;\n case 1: mnemo += \",\"+ixr+'++'; break;\n case 2: mnemo += \",-\"+ixr; break;\n case 3: mnemo += \",--\"+ixr; break;\n case 4: mnemo += \",\"+ixr; break;\n case 5: mnemo += \"B,\"+ixr; break;\n case 6: mnemo += \"A,\"+ixr; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += ofs8+\",\"+ixr; bytes++; break;\n case 9: mnemo += ofs16+\",\"+ixr; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"D,\"+ixr; break;\n case 12: mnemo += ofs8+\",PC\"; bytes++; break;\n case 13: mnemo += ofs16+\",PC\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"$\"+toHex4((b*256+c)); bytes+=2; break;\n }\n } else {\n switch (mod) {\n case 0: mnemo += \"???\"; break;\n case 1: mnemo += \"[,\"+ixr+'++]'; break;\n case 2: mnemo += \"???\"; break;\n case 3: mnemo += \"[,--\"+ixr+']'; break;\n case 4: mnemo += \"[,\"+ixr+']'; break;\n case 5: mnemo += \"[B,\"+ixr+']'; break;\n case 6: mnemo += \"[A,\"+ixr+']'; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += \"[\"+ofs8+\",\"+ixr+']'; bytes++; break;\n case 9: mnemo += \"[\"+ofs16+\",\"+ixr+']'; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"[D,\"+ixr+']'; break;\n case 12: mnemo += \"[\"+ofs8+\",PC]\"; bytes++; break;\n case 13: mnemo += \"[\"+ofs16+\",PC]\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"[$\"+toHex4((b*256+c))+']'; bytes+=2; break;\n }\n }\n\n break;\n case 7: //extended\n mnemo+=\"\\t$\"+toHex4(a*256+b); break;\n case 8: //imm16\n mnemo+=\"\\t#$\"+toHex4(a*256+b); break;\n\n case 10: //pshs, puls\n rx = ['PC','U','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 11: //pshs, puls\n rx = ['PC','S','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 20: //TFR etc\n rx = ['D','X','Y','U','S','PC','?','?','A','B','CC','DP','?','?','?','?'];\n mnemo += '\\t'+rx[a>>4]+','+rx[a&0x0f];\n break;\n }\n\n return {line:mnemo,nbytes:bytes};\n };\n\n\n//---------- Exports\n\nreturn {\n steps: function(Ts){\n //T=0;\n while (Ts>0){\n Ts-=step();\n }\n },\n runFrame: function(Tt){\n while (T>i);\n if (n===0) {f+=fx[i].toLowerCase();} else {f+=fx[i];}\n }\n return f;\n },\n disasm: disasm,\n isStable: function() { return true; }\n};\n\n};\n", "\nimport { CPU, Bus, ClockBased, SavesState, Interruptable } from \"../devices\";\n\n// Copyright 2015 by Paulo Augusto Peccin. See license.txt distributed with this file.\n\nexport var _MOS6502 = function() {\n var self = this;\n\n this.powerOn = function() {\n this.reset();\n };\n\n this.powerOff = function() {\n };\n\n this.clockPulse = function() {\n if (!RDY) return; // TODO Should be ignored in the last cycle of the instruction\n T++;\n instruction[T]();\n };\n\n this.connectBus = function(aBus) {\n bus = aBus;\n };\n\n this.setRDY = function(boo) {\n RDY = boo;\n };\n\n this.isRDY = function() {\n return RDY;\n }\n\n this.reset = function() {\n I = 1;\n T = -1;\n instruction = [ fetchOpcodeAndDecodeInstruction ]; // Bootstrap instruction\n PC = bus.read(RESET_VECTOR) | (bus.read(RESET_VECTOR + 1) << 8);\n this.setRDY(true);\n };\n\n // Interfaces\n var bus : Bus;\n var RDY : boolean = false;\n\n // Registers\n var PC : number = 0;\n var SP : number = 0;\n var A : number = 0;\n var X : number = 0;\n var Y : number = 0;\n\n // Status Bits\n var N : number = 0;\n var V : number = 0;\n var D : number = 0;\n var I : number = 0;\n var Z : number = 0;\n var C : number = 0;\n\n // Internal decoding registers\n var T : number = -1;\n var opcode : number = -1;\n var instruction : (() => void)[];\n var data : number = 0;\n var AD : number = 0;\n var BA : number = 0;\n var BALCrossed : boolean = false;\n var IA : number = 0;\n var branchOffset : number = 0;\n var branchOffsetCrossAdjust : number = 0;\n\n // Vectors\n const NMI_VECTOR = 0xfffa;\n const RESET_VECTOR = 0xfffc;\n const IRQ_VECTOR = 0xfffe;\n\n // Index registers names\n const rX = 0;\n const rY = 1;\n\n // Status bits names\n const bN = 7;\n const bV = 6;\n // const bE = 5;\t// Not used\n // const bB = 4;\t// Not used\n // const bD = 3; // Not used\n // const bI = 2; // Not used\n const bZ = 1;\n const bC = 0;\n\n // Auxiliary variables\n // TODO\n //noinspection JSUnusedGlobalSymbols\n this.debug = false;\n //noinspection JSUnusedGlobalSymbols\n this.trace = false;\n\n\n // Internal operations\n\n var fetchOpcodeAndDecodeInstruction = function() {\n opcode = bus.read(PC);\n instruction = instructions[opcode];\n T = 0;\n\n // if (self.trace) self.breakpoint(\"TRACE\");\n // console.log(\"PC: \" + PC + \", op: \" + opcode + \": \" + opcodes[opcode]);\n\n PC++;\n };\n\n var fetchNextOpcode = fetchOpcodeAndDecodeInstruction;\n\n var fetchOpcodeAndDiscard = function() {\n bus.read(PC);\n };\n\n var fetchBranchOffset = function() {\n branchOffset = bus.read(PC);\n PC++;\n };\n\n var fetchADL = function() {\n AD = bus.read(PC);\n PC++;\n };\n\n var fetchADH = function() {\n AD |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchADLFromBA = function() {\n AD = bus.read(BA);\n };\n\n var fetchADHFromBA = function() {\n AD |= bus.read(BA) << 8;\n };\n\n var fetchBAL = function() {\n BA = bus.read(PC);\n PC++;\n };\n\n var fetchBAH = function() {\n BA |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchBALFromIA = function() {\n BA = bus.read(IA);\n };\n\n var fetchBAHFromIA = function() {\n BA |= bus.read(IA) << 8;\n };\n\n var addXtoBAL = function() {\n var low = (BA & 255) + X;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var addYtoBAL = function() {\n var low = (BA & 255) + Y;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAL = function() {\n var low = (BA & 255) + 1;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAHifBALCrossed = function() {\n if (BALCrossed)\n BA = (BA + 0x0100) & 0xffff;\n };\n\n var fetchIAL = function() {\n IA = bus.read(PC);\n PC++;\n };\n\n var fetchIAH = function() {\n IA |= bus.read(PC) << 8;\n PC++;\n };\n\n var add1toIAL = function() {\n var low = (IA & 255) + 1;\n IA = (IA & 0xff00) | (low & 255);\n };\n\n var fetchDataFromImmediate = function() {\n data = bus.read(PC);\n PC++;\n };\n\n var fetchDataFromAD = function() {\n data = bus.read(AD);\n };\n\n var fetchDataFromBA = function() {\n data = bus.read(BA);\n };\n\n var writeDataToAD = function() {\n bus.write(AD, data);\n };\n\n var writeDataToBA = function() {\n bus.write(BA, data);\n };\n\n var addBranchOffsetToPCL = function() {\n var oldLow = (PC & 0x00ff);\n var newLow = (oldLow + branchOffset) & 255;\n // Negative offset?\n if (branchOffset > 127)\n branchOffsetCrossAdjust = (newLow > oldLow) ? -0x0100 : 0;\n else\n branchOffsetCrossAdjust = (newLow < oldLow) ? 0x0100 : 0;\n PC = (PC & 0xff00) | newLow;\n };\n\n var adjustPCHForBranchOffsetCross = function() {\n PC = (PC + branchOffsetCrossAdjust) & 0xffff;\n };\n\n var setZ = function(val) {\n Z = (val === 0) ? 1 : 0;\n };\n\n var setN = function(val) {\n N = (val & 0x080) ? 1 : 0;\n };\n\n var setV = function(boo) {\n V = boo ? 1 : 0;\n };\n\n var setC = function(boo) {\n C = boo ? 1 : 0;\n };\n\n var popFromStack = function() {\n SP = (SP + 1) & 255;\n return bus.read(0x0100 + SP);\n };\n\n var peekFromStack = function() {\n return bus.read(0x0100 + SP);\n };\n\n var pushToStack = function(val) {\n bus.write(0x0100 + SP, val);\n SP = (SP - 1) & 255;\n };\n\n var getStatusBits = function() {\n return N << 7 | V << 6 | 0x30 // Always push with E (bit 5) and B (bit 4) ON\n | D << 3 | I << 2 | Z << 1 | C;\n };\n\n var setStatusBits = function(val) {\n N = val >>> 7; V = val >>> 6 & 1; // E and B flags actually do not exist as real flags, so ignore\n D = val >>> 3 & 1; I = val >>> 2 & 1; Z = val >>> 1 & 1; C = val & 1;\n };\n\n var illegalOpcode = function(op) {\n if (self.debug) self.breakpoint(\"Illegal Opcode: \" + op);\n };\n\n\n // Addressing routines\n\n var implied = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var immediateRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var indirectXRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if (BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var zeroPageIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n fetchDataFromBA();\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var indirectYRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if(BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectXWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var zeroPageIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectYWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n var zeroPageReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var zeroPageIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function () {\n addIndex();\n fetchDataFromBA();\n },\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var absoluteIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function () {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectXReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectYReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n // Instructions ========================================================================================\n\n // Complete instruction set\n var opcodes = new Array(256);\n var instructions = new Array(256);\n\n opcodes[0x00] = \"BRK\"; instructions[0x00] = BRK();\n opcodes[0x01] = \"ORA\"; instructions[0x01] = ORA(indirectXRead);\n opcodes[0x02] = \"uKIL\"; instructions[0x02] = uKIL();\n opcodes[0x03] = \"uSLO\"; instructions[0x03] = uSLO(indirectXReadModifyWrite);\n opcodes[0x04] = \"uNOP\"; instructions[0x04] = uNOP(zeroPageRead);\n opcodes[0x05] = \"ORA\"; instructions[0x05] = ORA(zeroPageRead);\n opcodes[0x06] = \"ASL\"; instructions[0x06] = ASL(zeroPageReadModifyWrite);\n opcodes[0x07] = \"uSLO\"; instructions[0x07] = uSLO(zeroPageReadModifyWrite);\n opcodes[0x08] = \"PHP\"; instructions[0x08] = PHP();\n opcodes[0x09] = \"ORA\"; instructions[0x09] = ORA(immediateRead);\n opcodes[0x0a] = \"ASL\"; instructions[0x0a] = ASL_ACC();\n opcodes[0x0b] = \"uANC\"; instructions[0x0b] = uANC(immediateRead);\n opcodes[0x0c] = \"uNOP\"; instructions[0x0c] = uNOP(absoluteRead);\n opcodes[0x0d] = \"ORA\"; instructions[0x0d] = ORA(absoluteRead);\n opcodes[0x0e] = \"ASL\"; instructions[0x0e] = ASL(absoluteReadModifyWrite);\n opcodes[0x0f] = \"uSLO\"; instructions[0x0f] = uSLO(absoluteReadModifyWrite);\n opcodes[0x10] = \"BPL\"; instructions[0x10] = Bxx(bN, 0); // BPL\n opcodes[0x11] = \"ORA\"; instructions[0x11] = ORA(indirectYRead);\n opcodes[0x12] = \"uKIL\"; instructions[0x12] = uKIL();\n opcodes[0x13] = \"uSLO\"; instructions[0x13] = uSLO(indirectYReadModifyWrite);\n opcodes[0x14] = \"uNOP\"; instructions[0x14] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x15] = \"ORA\"; instructions[0x15] = ORA(zeroPageIndexedRead(rX));\n opcodes[0x16] = \"ASL\"; instructions[0x16] = ASL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x17] = \"uSLO\"; instructions[0x17] = uSLO(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x18] = \"CLC\"; instructions[0x18] = CLC();\n opcodes[0x19] = \"ORA\"; instructions[0x19] = ORA(absoluteIndexedRead(rY));\n opcodes[0x1a] = \"uNOP\"; instructions[0x1a] = uNOP(implied);\n opcodes[0x1b] = \"uSLO\"; instructions[0x1b] = uSLO(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x1c] = \"uNOP\"; instructions[0x1c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x1d] = \"ORA\"; instructions[0x1d] = ORA(absoluteIndexedRead(rX));\n opcodes[0x1e] = \"ASL\"; instructions[0x1e] = ASL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x1f] = \"uSLO\"; instructions[0x1f] = uSLO(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x20] = \"JSR\"; instructions[0x20] = JSR();\n opcodes[0x21] = \"AND\"; instructions[0x21] = AND(indirectXRead);\n opcodes[0x22] = \"uKIL\"; instructions[0x22] = uKIL();\n opcodes[0x23] = \"uRLA\"; instructions[0x23] = uRLA(indirectXReadModifyWrite);\n opcodes[0x24] = \"BIT\"; instructions[0x24] = BIT(zeroPageRead);\n opcodes[0x25] = \"AND\"; instructions[0x25] = AND(zeroPageRead);\n opcodes[0x26] = \"ROL\"; instructions[0x26] = ROL(zeroPageReadModifyWrite);\n opcodes[0x27] = \"uRLA\"; instructions[0x27] = uRLA(zeroPageReadModifyWrite);\n opcodes[0x28] = \"PLP\"; instructions[0x28] = PLP();\n opcodes[0x29] = \"AND\"; instructions[0x29] = AND(immediateRead);\n opcodes[0x2a] = \"ROL\"; instructions[0x2a] = ROL_ACC();\n opcodes[0x2b] = \"uANC\"; instructions[0x2b] = uANC(immediateRead);\n opcodes[0x2c] = \"BIT\"; instructions[0x2c] = BIT(absoluteRead);\n opcodes[0x2d] = \"AND\"; instructions[0x2d] = AND(absoluteRead);\n opcodes[0x2e] = \"ROL\"; instructions[0x2e] = ROL(absoluteReadModifyWrite);\n opcodes[0x2f] = \"uRLA\"; instructions[0x2f] = uRLA(absoluteReadModifyWrite);\n opcodes[0x30] = \"BMI\"; instructions[0x30] = Bxx(bN, 1); // BMI\n opcodes[0x31] = \"AND\"; instructions[0x31] = AND(indirectYRead);\n opcodes[0x32] = \"uKIL\"; instructions[0x32] = uKIL();\n opcodes[0x33] = \"uRLA\"; instructions[0x33] = uRLA(indirectYReadModifyWrite);\n opcodes[0x34] = \"uNOP\"; instructions[0x34] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x35] = \"AND\"; instructions[0x35] = AND(zeroPageIndexedRead(rX));\n opcodes[0x36] = \"ROL\"; instructions[0x36] = ROL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x37] = \"uRLA\"; instructions[0x37] = uRLA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x38] = \"SEC\"; instructions[0x38] = SEC();\n opcodes[0x39] = \"AND\"; instructions[0x39] = AND(absoluteIndexedRead(rY));\n opcodes[0x3a] = \"uNOP\"; instructions[0x3a] = uNOP(implied);\n opcodes[0x3b] = \"uRLA\"; instructions[0x3b] = uRLA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x3c] = \"uNOP\"; instructions[0x3c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x3d] = \"AND\"; instructions[0x3d] = AND(absoluteIndexedRead(rX));\n opcodes[0x3e] = \"ROL\"; instructions[0x3e] = ROL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x3f] = \"uRLA\"; instructions[0x3f] = uRLA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x40] = \"RTI\"; instructions[0x40] = RTI();\n opcodes[0x41] = \"EOR\"; instructions[0x41] = EOR(indirectXRead);\n opcodes[0x42] = \"uKIL\"; instructions[0x42] = uKIL();\n opcodes[0x43] = \"uSRE\"; instructions[0x43] = uSRE(indirectXReadModifyWrite);\n opcodes[0x44] = \"uNOP\"; instructions[0x44] = uNOP(zeroPageRead);\n opcodes[0x45] = \"EOR\"; instructions[0x45] = EOR(zeroPageRead);\n opcodes[0x46] = \"LSR\"; instructions[0x46] = LSR(zeroPageReadModifyWrite);\n opcodes[0x47] = \"uSRE\"; instructions[0x47] = uSRE(zeroPageReadModifyWrite);\n opcodes[0x48] = \"PHA\"; instructions[0x48] = PHA();\n opcodes[0x49] = \"EOR\"; instructions[0x49] = EOR(immediateRead);\n opcodes[0x4a] = \"LSR\"; instructions[0x4a] = LSR_ACC();\n opcodes[0x4b] = \"uASR\"; instructions[0x4b] = uASR(immediateRead);\n opcodes[0x4c] = \"JMP\"; instructions[0x4c] = JMP_ABS();\n opcodes[0x4d] = \"EOR\"; instructions[0x4d] = EOR(absoluteRead);\n opcodes[0x4e] = \"LSR\"; instructions[0x4e] = LSR(absoluteReadModifyWrite);\n opcodes[0x4f] = \"uSRE\"; instructions[0x4f] = uSRE(absoluteReadModifyWrite);\n opcodes[0x50] = \"BVC\"; instructions[0x50] = Bxx(bV, 0); // BVC\n opcodes[0x51] = \"EOR\"; instructions[0x51] = EOR(indirectYRead);\n opcodes[0x52] = \"uKIL\"; instructions[0x52] = uKIL();\n opcodes[0x53] = \"uSRE\"; instructions[0x53] = uSRE(indirectYReadModifyWrite);\n opcodes[0x54] = \"uNOP\"; instructions[0x54] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x55] = \"EOR\"; instructions[0x55] = EOR(zeroPageIndexedRead(rX));\n opcodes[0x56] = \"LSR\"; instructions[0x56] = LSR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x57] = \"uSRE\"; instructions[0x57] = uSRE(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x58] = \"CLI\"; instructions[0x58] = CLI();\n opcodes[0x59] = \"EOR\"; instructions[0x59] = EOR(absoluteIndexedRead(rY));\n opcodes[0x5a] = \"uNOP\"; instructions[0x5a] = uNOP(implied);\n opcodes[0x5b] = \"uSRE\"; instructions[0x5b] = uSRE(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x5c] = \"uNOP\"; instructions[0x5c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x5d] = \"EOR\"; instructions[0x5d] = EOR(absoluteIndexedRead(rX));\n opcodes[0x5e] = \"LSR\"; instructions[0x5e] = LSR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x5f] = \"uSRE\"; instructions[0x5f] = uSRE(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x60] = \"RTS\"; instructions[0x60] = RTS();\n opcodes[0x61] = \"ADC\"; instructions[0x61] = ADC(indirectXRead);\n opcodes[0x62] = \"uKIL\"; instructions[0x62] = uKIL();\n opcodes[0x63] = \"uRRA\"; instructions[0x63] = uRRA(indirectXReadModifyWrite);\n opcodes[0x64] = \"uNOP\"; instructions[0x64] = uNOP(zeroPageRead);\n opcodes[0x65] = \"ADC\"; instructions[0x65] = ADC(zeroPageRead);\n opcodes[0x66] = \"ROR\"; instructions[0x66] = ROR(zeroPageReadModifyWrite);\n opcodes[0x67] = \"uRRA\"; instructions[0x67] = uRRA(zeroPageReadModifyWrite);\n opcodes[0x68] = \"PLA\"; instructions[0x68] = PLA();\n opcodes[0x69] = \"ADC\"; instructions[0x69] = ADC(immediateRead);\n opcodes[0x6a] = \"ROR\"; instructions[0x6a] = ROR_ACC();\n opcodes[0x6b] = \"uARR\"; instructions[0x6b] = uARR(immediateRead);\n opcodes[0x6c] = \"JMP\"; instructions[0x6c] = JMP_IND();\n opcodes[0x6d] = \"ADC\"; instructions[0x6d] = ADC(absoluteRead);\n opcodes[0x6e] = \"ROR\"; instructions[0x6e] = ROR(absoluteReadModifyWrite);\n opcodes[0x6f] = \"uRRA\"; instructions[0x6f] = uRRA(absoluteReadModifyWrite);\n opcodes[0x70] = \"BVS\"; instructions[0x70] = Bxx(bV, 1); // BVS\n opcodes[0x71] = \"ADC\"; instructions[0x71] = ADC(indirectYRead);\n opcodes[0x72] = \"uKIL\"; instructions[0x72] = uKIL();\n opcodes[0x73] = \"uRRA\"; instructions[0x73] = uRRA(indirectYReadModifyWrite);\n opcodes[0x74] = \"uNOP\"; instructions[0x74] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x75] = \"ADC\"; instructions[0x75] = ADC(zeroPageIndexedRead(rX));\n opcodes[0x76] = \"ROR\"; instructions[0x76] = ROR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x77] = \"uRRA\"; instructions[0x77] = uRRA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x78] = \"SEI\"; instructions[0x78] = SEI();\n opcodes[0x79] = \"ADC\"; instructions[0x79] = ADC(absoluteIndexedRead(rY));\n opcodes[0x7a] = \"uNOP\"; instructions[0x7a] = uNOP(implied);\n opcodes[0x7b] = \"uRRA\"; instructions[0x7b] = uRRA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x7c] = \"uNOP\"; instructions[0x7c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x7d] = \"ADC\"; instructions[0x7d] = ADC(absoluteIndexedRead(rX));\n opcodes[0x7e] = \"ROR\"; instructions[0x7e] = ROR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x7f] = \"uRRA\"; instructions[0x7f] = uRRA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x80] = \"uNOP\"; instructions[0x80] = uNOP(immediateRead);\n opcodes[0x81] = \"STA\"; instructions[0x81] = STA(indirectXWrite);\n opcodes[0x82] = \"uNOP\"; instructions[0x82] = uNOP(immediateRead);\n opcodes[0x83] = \"uSAX\"; instructions[0x83] = uSAX(indirectXWrite);\n opcodes[0x84] = \"STY\"; instructions[0x84] = STY(zeroPageWrite);\n opcodes[0x85] = \"STA\"; instructions[0x85] = STA(zeroPageWrite);\n opcodes[0x86] = \"STX\"; instructions[0x86] = STX(zeroPageWrite);\n opcodes[0x87] = \"uSAX\"; instructions[0x87] = uSAX(zeroPageWrite);\n opcodes[0x88] = \"DEY\"; instructions[0x88] = DEY();\n opcodes[0x89] = \"uNOP\"; instructions[0x89] = uNOP(immediateRead);\n opcodes[0x8a] = \"TXA\"; instructions[0x8a] = TXA();\n opcodes[0x8b] = \"uANE\"; instructions[0x8b] = uANE(immediateRead);\n opcodes[0x8c] = \"STY\"; instructions[0x8c] = STY(absoluteWrite);\n opcodes[0x8d] = \"STA\"; instructions[0x8d] = STA(absoluteWrite);\n opcodes[0x8e] = \"STX\"; instructions[0x8e] = STX(absoluteWrite);\n opcodes[0x8f] = \"uSAX\"; instructions[0x8f] = uSAX(absoluteWrite);\n opcodes[0x90] = \"BCC\"; instructions[0x90] = Bxx(bC, 0); // BCC\n opcodes[0x91] = \"STA\"; instructions[0x91] = STA(indirectYWrite);\n opcodes[0x92] = \"uKIL\"; instructions[0x92] = uKIL();\n opcodes[0x93] = \"uSHA\"; instructions[0x93] = uSHA(indirectYWrite);\n opcodes[0x94] = \"STY\"; instructions[0x94] = STY(zeroPageIndexedWrite(rX));\n opcodes[0x95] = \"STA\"; instructions[0x95] = STA(zeroPageIndexedWrite(rX));\n opcodes[0x96] = \"STX\"; instructions[0x96] = STX(zeroPageIndexedWrite(rY));\n opcodes[0x97] = \"uSAX\"; instructions[0x97] = uSAX(zeroPageIndexedWrite(rY));\n opcodes[0x98] = \"TYA\"; instructions[0x98] = TYA();\n opcodes[0x99] = \"STA\"; instructions[0x99] = STA(absoluteIndexedWrite(rY));\n opcodes[0x9a] = \"TXS\"; instructions[0x9a] = TXS();\n opcodes[0x9b] = \"uSHS\"; instructions[0x9b] = uSHS(absoluteIndexedWrite(rY));\n opcodes[0x9c] = \"uSHY\"; instructions[0x9c] = uSHY(absoluteIndexedWrite(rX));\n opcodes[0x9d] = \"STA\"; instructions[0x9d] = STA(absoluteIndexedWrite(rX));\n opcodes[0x9e] = \"uSHX\"; instructions[0x9e] = uSHX(absoluteIndexedWrite(rY));\n opcodes[0x9f] = \"uSHA\"; instructions[0x9f] = uSHA(absoluteIndexedWrite(rY));\n opcodes[0xa0] = \"LDY\"; instructions[0xa0] = LDY(immediateRead);\n opcodes[0xa1] = \"LDA\"; instructions[0xa1] = LDA(indirectXRead);\n opcodes[0xa2] = \"LDX\"; instructions[0xa2] = LDX(immediateRead);\n opcodes[0xa3] = \"uLAX\"; instructions[0xa3] = uLAX(indirectXRead);\n opcodes[0xa4] = \"LDY\"; instructions[0xa4] = LDY(zeroPageRead);\n opcodes[0xa5] = \"LDA\"; instructions[0xa5] = LDA(zeroPageRead);\n opcodes[0xa6] = \"LDX\"; instructions[0xa6] = LDX(zeroPageRead);\n opcodes[0xa7] = \"uLAX\"; instructions[0xa7] = uLAX(zeroPageRead);\n opcodes[0xa8] = \"TAY\"; instructions[0xa8] = TAY();\n opcodes[0xa9] = \"LDA\"; instructions[0xa9] = LDA(immediateRead);\n opcodes[0xaa] = \"TAX\"; instructions[0xaa] = TAX();\n opcodes[0xab] = \"uLXA\"; instructions[0xab] = uLXA(immediateRead);\n opcodes[0xac] = \"LDY\"; instructions[0xac] = LDY(absoluteRead);\n opcodes[0xad] = \"LDA\"; instructions[0xad] = LDA(absoluteRead);\n opcodes[0xae] = \"LDX\"; instructions[0xae] = LDX(absoluteRead);\n opcodes[0xaf] = \"uLAX\"; instructions[0xaf] = uLAX(absoluteRead);\n opcodes[0xb0] = \"BCS\"; instructions[0xb0] = Bxx(bC, 1); // BCS\n opcodes[0xb1] = \"LDA\"; instructions[0xb1] = LDA(indirectYRead);\n opcodes[0xb2] = \"uKIL\"; instructions[0xb2] = uKIL();\n opcodes[0xb3] = \"uLAX\"; instructions[0xb3] = uLAX(indirectYRead);\n opcodes[0xb4] = \"LDY\"; instructions[0xb4] = LDY(zeroPageIndexedRead(rX));\n opcodes[0xb5] = \"LDA\"; instructions[0xb5] = LDA(zeroPageIndexedRead(rX));\n opcodes[0xb6] = \"LDX\"; instructions[0xb6] = LDX(zeroPageIndexedRead(rY));\n opcodes[0xb7] = \"uLAX\"; instructions[0xb7] = uLAX(zeroPageIndexedRead(rY));\n opcodes[0xb8] = \"CLV\"; instructions[0xb8] = CLV();\n opcodes[0xb9] = \"LDA\"; instructions[0xb9] = LDA(absoluteIndexedRead(rY));\n opcodes[0xba] = \"TSX\"; instructions[0xba] = TSX();\n opcodes[0xbb] = \"uLAS\"; instructions[0xbb] = uLAS(absoluteIndexedRead(rY));\n opcodes[0xbc] = \"LDY\"; instructions[0xbc] = LDY(absoluteIndexedRead(rX));\n opcodes[0xbd] = \"LDA\"; instructions[0xbd] = LDA(absoluteIndexedRead(rX));\n opcodes[0xbe] = \"LDX\"; instructions[0xbe] = LDX(absoluteIndexedRead(rY));\n opcodes[0xbf] = \"uLAX\"; instructions[0xbf] = uLAX(absoluteIndexedRead(rY));\n opcodes[0xc0] = \"CPY\"; instructions[0xc0] = CPY(immediateRead);\n opcodes[0xc1] = \"CMP\"; instructions[0xc1] = CMP(indirectXRead);\n opcodes[0xc2] = \"uNOP\"; instructions[0xc2] = uNOP(immediateRead);\n opcodes[0xc3] = \"uDCP\"; instructions[0xc3] = uDCP(indirectXReadModifyWrite);\n opcodes[0xc4] = \"CPY\"; instructions[0xc4] = CPY(zeroPageRead);\n opcodes[0xc5] = \"CMP\"; instructions[0xc5] = CMP(zeroPageRead);\n opcodes[0xc6] = \"DEC\"; instructions[0xc6] = DEC(zeroPageReadModifyWrite);\n opcodes[0xc7] = \"uDCP\"; instructions[0xc7] = uDCP(zeroPageReadModifyWrite);\n opcodes[0xc8] = \"INY\"; instructions[0xc8] = INY();\n opcodes[0xc9] = \"CMP\"; instructions[0xc9] = CMP(immediateRead);\n opcodes[0xca] = \"DEX\"; instructions[0xca] = DEX();\n opcodes[0xcb] = \"uSBX\"; instructions[0xcb] = uSBX(immediateRead);\n opcodes[0xcc] = \"CPY\"; instructions[0xcc] = CPY(absoluteRead);\n opcodes[0xcd] = \"CMP\"; instructions[0xcd] = CMP(absoluteRead);\n opcodes[0xce] = \"DEC\"; instructions[0xce] = DEC(absoluteReadModifyWrite);\n opcodes[0xcf] = \"uDCP\"; instructions[0xcf] = uDCP(absoluteReadModifyWrite);\n opcodes[0xd0] = \"BNE\"; instructions[0xd0] = Bxx(bZ, 0); // BNE\n opcodes[0xd1] = \"CMP\"; instructions[0xd1] = CMP(indirectYRead);\n opcodes[0xd2] = \"uKIL\"; instructions[0xd2] = uKIL();\n opcodes[0xd3] = \"uDCP\"; instructions[0xd3] = uDCP(indirectYReadModifyWrite);\n opcodes[0xd4] = \"uNOP\"; instructions[0xd4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xd5] = \"CMP\"; instructions[0xd5] = CMP(zeroPageIndexedRead(rX));\n opcodes[0xd6] = \"DEC\"; instructions[0xd6] = DEC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd7] = \"uDCP\"; instructions[0xd7] = uDCP(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd8] = \"CLD\"; instructions[0xd8] = CLD();\n opcodes[0xd9] = \"CMP\"; instructions[0xd9] = CMP(absoluteIndexedRead(rY));\n opcodes[0xda] = \"uNOP\"; instructions[0xda] = uNOP(implied);\n opcodes[0xdb] = \"uDCP\"; instructions[0xdb] = uDCP(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xdc] = \"uNOP\"; instructions[0xdc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xdd] = \"CMP\"; instructions[0xdd] = CMP(absoluteIndexedRead(rX));\n opcodes[0xde] = \"DEC\"; instructions[0xde] = DEC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xdf] = \"uDCP\"; instructions[0xdf] = uDCP(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xe0] = \"CPX\"; instructions[0xe0] = CPX(immediateRead);\n opcodes[0xe1] = \"SBC\"; instructions[0xe1] = SBC(indirectXRead);\n opcodes[0xe2] = \"uNOP\"; instructions[0xe2] = uNOP(immediateRead);\n opcodes[0xe3] = \"uISB\"; instructions[0xe3] = uISB(indirectXReadModifyWrite);\n opcodes[0xe4] = \"CPX\"; instructions[0xe4] = CPX(zeroPageRead);\n opcodes[0xe5] = \"SBC\"; instructions[0xe5] = SBC(zeroPageRead);\n opcodes[0xe6] = \"INC\"; instructions[0xe6] = INC(zeroPageReadModifyWrite);\n opcodes[0xe7] = \"uISB\"; instructions[0xe7] = uISB(zeroPageReadModifyWrite);\n opcodes[0xe8] = \"INX\"; instructions[0xe8] = INX();\n opcodes[0xe9] = \"SBC\"; instructions[0xe9] = SBC(immediateRead);\n opcodes[0xea] = \"NOP\"; instructions[0xea] = NOP();\n opcodes[0xeb] = \"SBC\"; instructions[0xeb] = SBC(immediateRead);\n opcodes[0xec] = \"CPX\"; instructions[0xec] = CPX(absoluteRead);\n opcodes[0xed] = \"SBC\"; instructions[0xed] = SBC(absoluteRead);\n opcodes[0xee] = \"INC\"; instructions[0xee] = INC(absoluteReadModifyWrite);\n opcodes[0xef] = \"uISB\"; instructions[0xef] = uISB(absoluteReadModifyWrite);\n opcodes[0xf0] = \"BEQ\"; instructions[0xf0] = Bxx(bZ, 1); // BEQ\n opcodes[0xf1] = \"SBC\"; instructions[0xf1] = SBC(indirectYRead);\n opcodes[0xf2] = \"uKIL\"; instructions[0xf2] = uKIL();\n opcodes[0xf3] = \"uISB\"; instructions[0xf3] = uISB(indirectYReadModifyWrite);\n opcodes[0xf4] = \"uNOP\"; instructions[0xf4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xf5] = \"SBC\"; instructions[0xf5] = SBC(zeroPageIndexedRead(rX));\n opcodes[0xf6] = \"INC\"; instructions[0xf6] = INC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf7] = \"uISB\"; instructions[0xf7] = uISB(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf8] = \"SED\"; instructions[0xf8] = SED();\n opcodes[0xf9] = \"SBC\"; instructions[0xf9] = SBC(absoluteIndexedRead(rY));\n opcodes[0xfa] = \"uNOP\"; instructions[0xfa] = uNOP(implied);\n opcodes[0xfb] = \"uISB\"; instructions[0xfb] = uISB(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xfc] = \"uNOP\"; instructions[0xfc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xfd] = \"SBC\"; instructions[0xfd] = SBC(absoluteIndexedRead(rX));\n opcodes[0xfe] = \"INC\"; instructions[0xfe] = INC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xff] = \"uISB\"; instructions[0xff] = uISB(absoluteIndexedReadModifyWrite(rX));\n\n\n // Single Byte instructions\n\n function ASL_ACC() {\n return implied(function() {\n setC(A > 127);\n A = (A << 1) & 255;\n setZ(A);\n setN(A);\n });\n }\n\n function CLC() {\n return implied(function() {\n C = 0;\n });\n }\n\n function CLD() {\n return implied(function() {\n D = 0;\n });\n }\n\n function CLI() {\n return implied(function() {\n I = 0;\n });\n }\n\n function CLV() {\n return implied(function() {\n V = 0;\n });\n }\n\n function DEX() {\n return implied(function() {\n X = (X - 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function DEY() {\n return implied(function() {\n Y = (Y - 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function INX() {\n return implied(function() {\n X = (X + 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function INY() {\n return implied(function() {\n Y = (Y + 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function LSR_ACC() {\n return implied(function() {\n C = A & 0x01;\n A >>>= 1;\n setZ(A);\n N = 0;\n });\n }\n\n function NOP() {\n return implied(function() {\n // nothing\n });\n }\n\n function ROL_ACC() {\n return implied(function() {\n var newC = A > 127;\n A = ((A << 1) | C) & 255;\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function ROR_ACC() {\n return implied(function() {\n var newC = A & 0x01;\n A = (A >>> 1) | (C << 7);\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function SEC() {\n return implied(function() {\n C = 1;\n });\n }\n\n function SED() {\n return implied(function() {\n D = 1;\n });\n }\n\n function SEI() {\n return implied(function() {\n I = 1;\n });\n }\n\n function TAX() {\n return implied(function() {\n X = A;\n setZ(X);\n setN(X);\n });\n }\n\n function TAY() {\n return implied(function() {\n Y = A;\n setZ(Y);\n setN(Y);\n });\n }\n\n function TSX() {\n return implied(function() {\n X = SP;\n setZ(X);\n setN(X);\n });\n }\n\n function TXA() {\n return implied(function() {\n A = X;\n setZ(A);\n setN(A);\n });\n }\n\n function TXS() {\n return implied(function() {\n SP = X;\n });\n }\n\n function TYA() {\n return implied(function() {\n A = Y;\n setZ(A);\n setN(A);\n });\n }\n\n function uKIL() {\n return [\n fetchOpcodeAndDecodeInstruction,\n function() {\n illegalOpcode(\"KIL/HLT/JAM\");\n },\n function() {\n T--; // Causes the processor to be stuck in this instruction forever\n }\n ];\n }\n\n function uNOP(addressing) {\n return addressing(function() {\n illegalOpcode(\"NOP/DOP\");\n // nothing\n });\n }\n\n\n // Internal Execution on Memory Data\n\n function ADC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function AND(addressing) {\n return addressing(function() {\n A &= data;\n setZ(A);\n setN(A);\n });\n }\n\n function BIT(addressing) {\n return addressing(function() {\n var par = data;\n setZ(A & par);\n setV(par & 0x40);\n setN(par);\n });\n }\n\n function CMP(addressing) {\n return addressing(function() {\n var val = (A - data) & 255;\n setC(A >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPX(addressing) {\n return addressing(function() {\n var val = (X - data) & 255;\n setC(X >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPY(addressing) {\n return addressing(function() {\n var val = (Y - data) & 255;\n setC(Y >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function EOR(addressing) {\n return addressing(function() {\n A ^= data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDA(addressing) {\n return addressing(function() {\n A = data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDX(addressing) {\n return addressing(function() {\n X = data;\n setZ(X);\n setN(X);\n });\n }\n\n function LDY(addressing) {\n return addressing(function() {\n Y = data;\n setZ(Y);\n setN(Y);\n });\n }\n\n function ORA(addressing) {\n return addressing(function() {\n A |= data;\n setZ(A);\n setN(A);\n });\n }\n\n function SBC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uANC(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANC\");\n A &= data;\n setZ(A);\n N = C = (A & 0x080) ? 1 : 0;\n });\n }\n\n function uANE(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANE\");\n // Exact operation unknown. Do nothing\n });\n }\n\n function uARR(addressing) {\n // Some sources say flags are affected per ROR, others say its more complex. The complex one is chosen\n return addressing(function() {\n illegalOpcode(\"ARR\");\n var val = A & data;\n var oldC = C ? 0x80 : 0;\n val = (val >>> 1) | oldC;\n A = val;\n setZ(val);\n setN(val);\n var comp = A & 0x60;\n if (comp == 0x60) \t\t{ C = 1; V = 0; }\n else if (comp == 0x00) \t{ C = 0; V = 0; }\n else if (comp == 0x20) \t{ C = 0; V = 1; }\n else if (comp == 0x40) \t{ C = 1; V = 1; }\n });\n }\n\n function uASR(addressing) {\n return addressing(function() {\n illegalOpcode(\"ASR\");\n var val = A & data;\n C = (val & 0x01);\t\t// bit 0\n val = val >>> 1;\n A = val;\n setZ(val);\n N = 0;\n });\n }\n\n function uLAS(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAS\");\n var val = SP & data;\n A = val;\n X = val;\n SP = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLAX(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAX\");\n var val = data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLXA(addressing) {\n return addressing(function() {\n // Some sources say its an OR with $EE then AND with IMM, others exclude the OR,\n // others exclude both the OR and the AND. Excluding just the OR...\n illegalOpcode(\"LXA\");\n var val = A /* | 0xEE) */ & data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSBX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SBX\");\n var par = A & X;\n var val = data;\n var newX = (par - val) & 255;\n X = newX;\n setC(par >= val);\n setZ(newX);\n setN(newX);\n });\n }\n\n\n // Store operations\n\n function STA(addressing) {\n return addressing(function() {\n data = A;\n });\n }\n\n function STX(addressing) {\n return addressing(function() {\n data = X;\n });\n }\n\n function STY(addressing) {\n return addressing(function() {\n data = Y;\n });\n }\n\n function uSAX(addressing) {\n return addressing(function() {\n // Some sources say it would affect N and Z flags, some say it wouldn't. Chose not to affect\n illegalOpcode(\"SAX\");\n data = A & X;\n });\n }\n\n function uSHA(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHA\");\n data = A & X & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHS(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHS\");\n var val = A & X;\n SP = val;\n data = val & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHX\");\n data = X & ((BA >>> 8) + 1) & 255; // X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHY(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHY\");\n data = Y & ((BA >>> 8) + 1) & 255; // Y & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n\n // Read-Modify-Write operations\n\n function ASL(addressing) {\n return addressing(function() {\n setC(data > 127);\n var par = (data << 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function DEC(addressing) {\n return addressing(function() {\n var par = (data - 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function INC(addressing) {\n return addressing(function() {\n var par = (data + 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function LSR(addressing) {\n return addressing(function() {\n C = data & 0x01;\n data >>>= 1;\n setZ(data);\n N = 0;\n });\n }\n\n function ROL(addressing) {\n return addressing(function() {\n var newC = data > 127;\n var par = ((data << 1) | C) & 255;\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function ROR(addressing) {\n return addressing(function() {\n var newC = data & 0x01;\n var par = (data >>> 1) | (C << 7);\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function uDCP(addressing) {\n return addressing(function() {\n illegalOpcode(\"DCP\");\n var par = (data - 1) & 255;\n data = par;\n par = A - par;\n setC(par >= 0);\n setZ(par);\n setN(par);\n });\n }\n\n function uISB(addressing) {\n return addressing(function() {\n illegalOpcode(\"ISB\");\n data = (data + 1) & 255; // ISB is the same as SBC but incs the operand first\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uRLA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RLA\");\n var val = data;\n var oldC = C;\n setC(val & 0x80);\t\t// bit 7 was set\n val = ((val << 1) | oldC) & 255;\n data = val;\n A &= val;\n setZ(val); // TODO Verify. May be A instead of val in the flags setting\n setN(val);\n });\n }\n\n function uRRA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RRA\");\n var val = data;\n var oldC = C ? 0x80 : 0;\n setC(val & 0x01);\t\t// bit 0 was set\n val = (val >>> 1) | oldC;\n data = val;\n // RRA is the same as ADC from here\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uSLO(addressing) {\n return addressing(function() {\n illegalOpcode(\"SLO\");\n var val = data;\n setC(val & 0x80);\t\t// bit 7 was set\n val = (val << 1) & 255;\n data = val;\n val = A | val;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSRE(addressing) {\n return addressing(function() {\n illegalOpcode(\"SRE\");\n var val = data;\n setC(val & 0x01);\t\t// bit 0 was set\n val = val >>> 1;\n data = val;\n val = (A ^ val) & 255;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n\n // Miscellaneous operations\n\n function PHA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(A); },\n fetchNextOpcode\n ];\n }\n\n function PHP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(getStatusBits()); },\n fetchNextOpcode\n ];\n }\n\n function PLA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() {\n A = popFromStack();\n setZ(A);\n setN(A);\n },\n fetchNextOpcode\n ];\n }\n\n function PLP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n fetchNextOpcode\n ];\n }\n\n function JSR() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n peekFromStack,\n function() { pushToStack((PC >>> 8) & 0xff); },\n function() { pushToStack(PC & 0xff); },\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function BRK() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"BRK \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits()); }, // set B flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; I = 1; fetchNextOpcode(); }\n ];\n }\n\n function IRQ() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"IRQ \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function NMI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n if (self.debug) self.breakpoint(\"NMI \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(NMI_VECTOR); },\n function() { AD |= bus.read(NMI_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchDataFromImmediate(); },\n fetchNextOpcode\n ];\n }\n\n function JMP_ABS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function JMP_IND() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchIAH,\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() { PC = BA; fetchNextOpcode(); }\n ];\n }\n\n function Bxx(reg, cond) {\n var branchTaken;\n if (reg === bZ) branchTaken = function() { return Z === cond; };\n else if (reg === bN) branchTaken = function() { return N === cond; };\n else if (reg === bC) branchTaken = function() { return C === cond; };\n else branchTaken = function() { return V === cond; };\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBranchOffset,\n function() {\n if (branchTaken()) {\n fetchOpcodeAndDiscard();\n addBranchOffsetToPCL();\n } else {\n fetchNextOpcode();\n }\n },\n function() {\n if(branchOffsetCrossAdjust) {\n fetchOpcodeAndDiscard();\n adjustPCHForBranchOffsetCross();\n } else {\n fetchNextOpcode();\n }\n },\n fetchNextOpcode\n ];\n }\n\n\n // Savestate -------------------------------------------\n\n this.saveState = function():MOS6502State {\n return {\n PC: (PC-1) & 0xffff,\n A: A, X: X, Y: Y, SP: SP,\n N: N, V: V, D: D, I: I, Z: Z, C: C,\n T: T, o: opcode, R: RDY?1:0,\n d: data, AD: AD, BA: BA, BC: BALCrossed?1:0, IA: IA,\n bo: branchOffset, boa: branchOffsetCrossAdjust\n };\n };\n\n this.loadState = function(state:MOS6502State) {\n PC = (state.PC+1) & 0xffff;\n A = state.A; X = state.X; Y = state.Y; SP = state.SP;\n N = state.N; V = state.V; D = state.D; I = state.I; Z = state.Z; C = state.C;\n T = state.T; opcode = state.o; RDY = !!state.R;\n data = state.d; AD = state.AD; BA = state.BA; BALCrossed = !!state.BC; IA = state.IA;\n branchOffset = state.bo; branchOffsetCrossAdjust = state.boa;\n instruction = opcode < 0 ? [ fetchOpcodeAndDecodeInstruction ] : instructions[opcode];\n };\n\n\n // Accessory methods\n\n this.toString = function() {\n return \"CPU \" +\n \" PC: \" + PC.toString(16) + \" op: \" + opcode.toString() + \" T: \" + T + \" data: \" + data + \"\\n\" +\n \" A: \" + A.toString(16) + \" X: \" + X.toString(16) + \" Y: \" + Y.toString(16) + \" SP: \" + SP.toString(16) + \" \" +\n \"N\" + N + \" \" + \"V\" + V + \" \" + \"D\" + D + \" \" + \"I\" + I + \" \" + \"Z\" + Z + \" \" + \"C\" + C + \" \";\n };\n\n this.breakpoint = function(mes) {\n //jt.Util.log(mes);\n if (this.trace) {\n var text = \"CPU Breakpoint! \" + (mes ? \"(\" + mes + \")\" : \"\") + \"\\n\\n\" + this.toString();\n //jt.Util.message(text);\n }\n };\n\n var cycletime = [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0,\n 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4,\n 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ];\n\n var extracycles = [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ];\n\n var insnlengths = [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ];\n\n var validinsns = [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ];\n\n this.getOpcodeMetadata = function(opcode, address) {\n // TODO: more intelligent maximum cycles\n //var i = instructions[opcode];\n return {\n opcode:opcode,\n mnenomic:opcodes[opcode],\n minCycles:cycletime[opcode],\n maxCycles:cycletime[opcode] + extracycles[opcode],\n insnlength:insnlengths[opcode]\n };\n }\n\n // only call when isPCStable() is true\n this.setNMI = function() {\n instruction = NMI();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n this.setIRQ = function() {\n if (!I) { // only if not disabled\n instruction = IRQ();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n }\n\n this.getSP = function() { return SP; }\n this.getPC = function() { return (PC-1) & 0xffff; }\n this.getT = function() { return T; }\n this.isHalted = function() { return opcodes[opcode] == \"uKIL\"; }\n \n this.isPCStable = function() {\n return T == 0;\n }\n};\n\nexport interface MOS6502State {\nPC : number;\nSP : number;\nA : number;\nX : number;\nY : number;\nN : number;\nV : number;\nD : number;\nI : number;\nZ : number;\nC : number;\nT : number;\no : number;\nR : number;\nd : number;\nAD : number;\nBA : number;\nBC : number;\nIA : number;\nbo : number;\nboa : number;\n}\n\nexport enum MOS6502Interrupts { None=0, NMI=1, IRQ=2 };\n\nexport class MOS6502 implements CPU, ClockBased, SavesState, Interruptable {\n\n cpu = new _MOS6502();\n interruptType : MOS6502Interrupts = MOS6502Interrupts.None;\n \n connectMemoryBus(bus:Bus) {\n this.cpu.connectBus(bus);\n }\n advanceClock() {\n if (this.interruptType && this.isStable()) {\n switch (this.interruptType) {\n case MOS6502Interrupts.NMI: this.cpu.setNMI(); break;\n case MOS6502Interrupts.IRQ: this.cpu.setIRQ(); break;\n }\n this.interruptType = 0;\n }\n this.cpu.clockPulse();\n }\n advanceInsn() {\n do {\n this.advanceClock();\n } while (!this.isStable());\n }\n reset() {\n this.cpu.reset();\n this.interruptType = 0;\n }\n interrupt(itype:number) {\n if (this.interruptType != MOS6502Interrupts.NMI) {\n this.interruptType = itype;\n }\n }\n NMI() {\n this.interrupt(MOS6502Interrupts.NMI);\n }\n IRQ() {\n this.interrupt(MOS6502Interrupts.IRQ);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.isHalted();\n }\n saveState() {\n var s = this.cpu.saveState();\n s.it = this.interruptType;\n return s;\n }\n loadState(s) {\n this.cpu.loadState(s);\n this.interruptType = s.it;\n }\n isStable() : boolean {\n return this.cpu.isPCStable();\n }\n getOpcodeMetadata(op: number) {\n return this.cpu.getOpcodeMetadata(op);\n }\n}\n", "\nimport { CpuState, EmuState } from \"./baseplatform\";\nimport { CPU, SampledAudioSink, ProbeAll, NullProbe } from \"./devices\";\nimport { EmuHalt } from \"./emu\";\n\n// WASM Support\n// TODO: detangle from c64\n\nexport abstract class BaseWASMMachine {\n prefix : string;\n instance : WebAssembly.Instance;\n exports : any;\n sys : number;\n pixel_dest : Uint32Array;\n pixel_src : Uint32Array;\n stateptr : number;\n statearr : Uint8Array;\n cpustateptr : number;\n cpustatearr : Uint8Array;\n ctrlstateptr : number;\n ctrlstatearr : Uint8Array;\n cpu : CPU;\n romptr : number;\n romlen : number;\n romarr : Uint8Array;\n biosptr : number;\n biosarr : Uint8Array;\n audio : SampledAudioSink;\n audioarr : Float32Array;\n probe : ProbeAll;\n maxROMSize : number = 0x40000;\n\n abstract getCPUState() : CpuState;\n abstract saveState() : EmuState;\n abstract loadState(state: EmuState);\n\n constructor(prefix: string) {\n this.prefix = prefix;\n var self = this;\n this.cpu = {\n getPC: self.getPC.bind(self),\n getSP: self.getSP.bind(self),\n isStable: self.isStable.bind(self),\n reset: self.reset.bind(self),\n saveState: () => {\n return self.getCPUState();\n },\n loadState: () => {\n console.log(\"loadState not implemented\")\n },\n connectMemoryBus() {\n console.log(\"connectMemoryBus not implemented\")\n },\n }\n }\n getImports(wmod: WebAssembly.Module) {\n return {};\n }\n async fetchWASM() {\n var wasmResponse = await fetch('res/'+this.prefix+'.wasm');\n if (wasmResponse.status == 200 || (wasmResponse as any as Blob).size) {\n var wasmBinary = await wasmResponse.arrayBuffer();\n var wasmCompiled = await WebAssembly.compile(wasmBinary);\n var wasmResult = await WebAssembly.instantiate(wasmCompiled, this.getImports(wasmCompiled));\n this.instance = wasmResult;\n this.exports = wasmResult.exports;\n } else throw new Error('could not load WASM file');\n }\n allocateBIOS(biosBinary: Uint8Array) {\n this.biosptr = this.exports.malloc(biosBinary.byteLength);\n this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);\n}\n async fetchBIOS() {\n var biosResponse = await fetch('res/'+this.prefix+'.bios');\n if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {\n var biosBinary = new Uint8Array(await biosResponse.arrayBuffer());\n this.allocateBIOS(biosBinary);\n this.loadBIOS(biosBinary);\n } else throw new Error('could not load BIOS file');\n }\n async initWASM() {\n // init machine instance\n this.sys = this.exports.machine_init(this.biosptr);\n let statesize = this.exports.machine_get_state_size();\n this.stateptr = this.exports.malloc(statesize);\n let ctrlstatesize = this.exports.machine_get_controls_state_size();\n this.ctrlstateptr = this.exports.malloc(ctrlstatesize);\n let cpustatesize = this.exports.machine_get_cpu_state_size();\n this.cpustateptr = this.exports.malloc(cpustatesize);\n this.romptr = this.exports.malloc(this.maxROMSize);\n // create state buffers\n // must do this after allocating memory (and everytime we grow memory?)\n this.statearr = new Uint8Array(this.exports.memory.buffer, this.stateptr, statesize);\n this.ctrlstatearr = new Uint8Array(this.exports.memory.buffer, this.ctrlstateptr, ctrlstatesize);\n this.cpustatearr = new Uint8Array(this.exports.memory.buffer, this.cpustateptr, cpustatesize);\n // create audio buffer\n let sampbufsize = 4096*4;\n this.audioarr = new Float32Array(this.exports.memory.buffer, this.exports.machine_get_sample_buffer(), sampbufsize);\n // create ROM buffer\n this.romarr = new Uint8Array(this.exports.memory.buffer, this.romptr, this.maxROMSize);\n // enable c64 joystick map to arrow keys (TODO)\n //this.exports.c64_set_joystick_type(this.sys, 1);\n console.log('machine_init', this.sys, statesize, ctrlstatesize, cpustatesize, sampbufsize);\n }\n async loadWASM() {\n await this.fetchWASM();\n this.exports.memory.grow(96); // TODO: need more when probing?\n await this.fetchBIOS();\n await this.initWASM();\n }\n getPC() : number {\n return this.exports.machine_cpu_get_pc(this.sys);\n }\n getSP() : number {\n return this.exports.machine_cpu_get_sp(this.sys);\n }\n isStable() : boolean {\n return this.exports.machine_cpu_is_stable(this.sys);\n }\n loadROM(rom: Uint8Array) {\n if (rom.length > this.maxROMSize) throw new EmuHalt(`Rom size too big: ${rom.length} bytes`);\n this.romarr.set(rom);\n this.romlen = rom.length;\n console.log('load rom', rom.length, 'bytes');\n this.reset(); // TODO?\n }\n // TODO: can't load after machine_init\n loadBIOS(srcArray: Uint8Array) {\n this.biosarr.set(srcArray);\n }\n reset() {\n this.exports.machine_reset(this.sys);\n }\n /* TODO: we don't need this because c64_exec does this?\n pollControls() {\n this.exports.machine_start_frame(this.sys);\n }\n */\n read(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n readConst(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n write(address: number, value: number) : void {\n this.exports.machine_mem_write(this.sys, address & 0xffff, value & 0xff);\n }\n getAudioParams() {\n return {sampleRate:44100, stereo:false};\n }\n videoOffsetBytes = 0;\n connectVideo(pixels:Uint32Array) : void {\n this.pixel_dest = pixels;\n var pixbuf = this.exports.machine_get_pixel_buffer(this.sys); // save video pointer\n console.log('connectVideo', pixbuf, pixels.length);\n this.pixel_src = new Uint32Array(this.exports.memory.buffer, pixbuf+this.videoOffsetBytes, pixels.length);\n }\n syncVideo() {\n if (this.exports.machine_update_video) {\n this.exports.machine_update_video(this.sys);\n }\n if (this.pixel_dest != null) {\n this.pixel_dest.set(this.pixel_src);\n }\n }\n // assume controls buffer is smaller than cpu buffer\n saveControlsState() : any {\n //console.log(1, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n this.exports.machine_save_controls_state(this.sys, this.ctrlstateptr);\n //console.log(2, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n return { controls:this.ctrlstatearr.slice(0) }\n }\n loadControlsState(state) : void {\n this.ctrlstatearr.set(state.controls);\n this.exports.machine_load_controls_state(this.sys, this.ctrlstateptr);\n }\n connectAudio(audio : SampledAudioSink) : void {\n this.audio = audio;\n }\n syncAudio() {\n if (this.audio != null) {\n var n = this.exports.machine_get_sample_count();\n for (var i=0; i address\n addr2symbol: AddrSymbolMap;\t// address -> symbol\n debuginfo: {}; // extra platform-specific debug info\n\n constructor(symbolmap: SymbolMap, debuginfo: {}) {\n this.symbolmap = symbolmap;\n this.debuginfo = debuginfo;\n this.addr2symbol = invertMap(symbolmap);\n //// TODO: shouldn't be necc.\n if (!this.addr2symbol[0x0]) this.addr2symbol[0x0] = '$00'; // needed for ...\n this.addr2symbol[0x10000] = '__END__'; // ... dump memory to work\n }\n}\n\ntype MemoryMapType = \"main\" | \"vram\";\ntype MemoryMap = { [type: string]: Segment[] };\n\nexport function isDebuggable(arg: any): arg is Debuggable {\n return arg && typeof arg.getDebugCategories === 'function';\n}\n\nexport interface Debuggable {\n getDebugCategories?(): string[];\n getDebugInfo?(category: string, state: EmuState): string;\n}\n\nexport interface Platform {\n start(): void | Promise;\n reset(): void;\n isRunning(): boolean;\n getToolForFilename(s: string): string;\n getDefaultExtensions(): string[];\n getPresets?(): Preset[];\n pause(): void;\n resume(): void;\n loadROM(title: string, rom: any, origin?: number); // TODO: Uint8Array\n loadBIOS?(title: string, rom: Uint8Array);\n getROMExtension?(rom: FileData): string;\n\n loadState?(state: EmuState): void;\n saveState?(): EmuState;\n loadControlsState?(state: EmuControlsState): void;\n saveControlsState?(): EmuControlsState;\n\n inspect?(ident: string): string;\n disassemble?(addr: number, readfn: (addr: number) => number): DisasmLine;\n readAddress?(addr: number): number;\n readVRAMAddress?(addr: number): number;\n\n setFrameRate?(fps: number): void;\n getFrameRate?(): number;\n\n setupDebug?(callback: BreakpointCallback): void;\n clearDebug?(): void;\n step?(): void;\n runToVsync?(): void;\n runToPC?(pc: number[]): void;\n runUntilReturn?(): void;\n stepBack?(): void;\n runEval?(evalfunc: DebugEvalCondition): void;\n runToFrameClock?(clock: number): void;\n stepOver?(): void;\n restartAtPC?(pc: number): boolean;\n\n getOpcodeMetadata?(opcode: number, offset: number): OpcodeMetadata; //TODO\n getSP?(): number;\n getPC?(): number;\n getOriginPC?(): number;\n newCodeAnalyzer?(): CodeAnalyzer;\n\n getPlatformName?(): string;\n getMemoryMap?(): MemoryMap;\n\n setRecorder?(recorder: EmuRecorder): void;\n advance?(novideo?: boolean): number;\n advanceFrameClock?(trap: DebugCondition, step: number): number;\n showHelp?(): string;\n resize?(): void;\n\n getRasterScanline?(): number;\n getRasterLineClock?(): number;\n setBreakpoint?(id: string, cond: DebugCondition);\n clearBreakpoint?(id: string);\n hasBreakpoint?(id: string): boolean;\n getCPUState?(): CpuState;\n\n debugSymbols?: DebugSymbols;\n getDebugTree?(): {};\n\n startProbing?(): ProbeRecorder;\n stopProbing?(): void;\n\n isBlocked?(): boolean; // is blocked, halted, or waiting for input?\n\n readFile?(path: string): FileData;\n writeFile?(path: string, data: FileData): boolean;\n sourceFileFetch?: (path: string) => FileData;\n\n getDownloadFile?(): { extension: string, blob: Blob };\n getDebugSymbolFile?(): { extension: string, blob: Blob };\n}\n\nexport interface Preset {\n id: string;\n name: string;\n chapter?: number;\n title?: string;\n category?: string;\n}\n\nexport interface MemoryBus {\n read: (address: number) => number;\n write: (address: number, value: number) => void;\n contend?: (address: number, cycles: number) => number;\n isContended?: (address: number) => boolean;\n}\n\nexport type DebugCondition = () => boolean;\nexport type DebugEvalCondition = (c: CpuState) => boolean;\nexport type BreakpointCallback = (s: EmuState, msg?: string) => void;\n// for composite breakpoints w/ single debug function\nexport class BreakpointList {\n id2bp: { [id: string]: Breakpoint } = {};\n getDebugCondition(): DebugCondition {\n if (Object.keys(this.id2bp).length == 0) {\n return null; // no breakpoints\n } else {\n // evaluate all breakpoints\n return () => {\n var result = false;\n for (var id in this.id2bp)\n if (this.id2bp[id].cond())\n result = true;\n return result;\n };\n }\n }\n}\nexport interface Breakpoint {\n cond: DebugCondition;\n};\n\nexport interface EmuRecorder {\n frameRequested(): boolean;\n recordFrame(state: EmuState);\n}\n\n/////\n\nexport abstract class BasePlatform {\n recorder: EmuRecorder = null;\n debugSymbols: DebugSymbols;\n internalFiles: { [path: string]: FileData } = {};\n\n abstract loadState(state: EmuState): void;\n abstract saveState(): EmuState;\n abstract pause(): void;\n abstract resume(): void;\n abstract advance(novideo?: boolean): number;\n\n setRecorder(recorder: EmuRecorder): void {\n this.recorder = recorder;\n }\n updateRecorder() {\n // are we recording and do we need to save a frame?\n if (this.recorder && (this).isRunning() && this.recorder.frameRequested()) {\n this.recorder.recordFrame(this.saveState());\n }\n }\n inspect(sym: string): string {\n return inspectSymbol((this as any) as Platform, sym);\n }\n getDebugTree(): {} {\n var o: any = {};\n o.state = this.saveState();\n if (this.debugSymbols?.debuginfo) o.debuginfo = this.debugSymbols.debuginfo;\n return o;\n }\n readFile(path: string): FileData {\n return this.internalFiles[path];\n }\n writeFile(path: string, data: FileData): boolean {\n this.internalFiles[path] = data;\n return true;\n }\n}\n\nexport abstract class BaseDebugPlatform extends BasePlatform {\n onBreakpointHit: BreakpointCallback;\n debugCallback: DebugCondition;\n debugSavedState: EmuState = null;\n debugBreakState: EmuState = null;\n debugTargetClock: number = 0;\n debugClock: number = 0;\n breakpoints: BreakpointList = new BreakpointList();\n frameCount: number = 0;\n\n abstract getCPUState(): CpuState;\n\n setBreakpoint(id: string, cond: DebugCondition) {\n if (cond) {\n this.breakpoints.id2bp[id] = { cond: cond };\n this.restartDebugging();\n } else {\n this.clearBreakpoint(id);\n }\n }\n clearBreakpoint(id: string) {\n delete this.breakpoints.id2bp[id];\n }\n hasBreakpoint(id: string) {\n return this.breakpoints.id2bp[id] != null;\n }\n getDebugCallback(): DebugCondition {\n return this.breakpoints.getDebugCondition();\n }\n setupDebug(callback: BreakpointCallback): void {\n this.onBreakpointHit = callback;\n }\n clearDebug() {\n if (this.debugBreakState != null && this.debugSavedState != null) {\n this.loadState(this.debugSavedState);\n }\n this.debugSavedState = null;\n this.debugBreakState = null;\n this.debugTargetClock = -1;\n this.debugClock = 0;\n this.onBreakpointHit = null;\n this.clearBreakpoint('debug');\n this.frameCount = 0;\n }\n setDebugCondition(debugCond: DebugCondition) {\n this.setBreakpoint('debug', debugCond);\n }\n resetDebugging() {\n if (this.debugSavedState) {\n this.loadState(this.debugSavedState);\n } else {\n this.debugSavedState = this.saveState();\n }\n this.debugClock = 0;\n this.debugCallback = this.getDebugCallback();\n this.debugBreakState = null;\n }\n restartDebugging() {\n this.resetDebugging();\n this.resume();\n }\n preFrame() {\n // save state before frame, to record any inputs that happened pre-frame\n if (this.debugCallback && !this.debugBreakState) {\n // save state every frame and rewind debug clocks\n this.debugSavedState = this.saveState();\n this.debugTargetClock -= this.debugClock;\n this.debugClock = 0;\n }\n }\n postFrame() {\n // reload debug state at end of frame after breakpoint\n if (this.debugCallback && this.debugBreakState) {\n this.loadState(this.debugBreakState);\n }\n this.frameCount++;\n }\n pollControls() {\n }\n nextFrame(novideo: boolean): number {\n this.pollControls();\n this.updateRecorder();\n this.preFrame();\n var steps = this.advance(novideo);\n this.postFrame();\n return steps;\n }\n // default debugging\n abstract getSP(): number;\n abstract getPC(): number;\n abstract isStable(): boolean;\n\n evalDebugCondition() {\n if (this.debugCallback && !this.debugBreakState) {\n this.debugCallback();\n }\n }\n wasBreakpointHit(): boolean {\n return this.debugBreakState != null;\n }\n breakpointHit(targetClock: number, reason?: string) {\n console.log(this.debugTargetClock, targetClock, this.debugClock, this.isStable());\n this.debugTargetClock = targetClock;\n this.debugBreakState = this.saveState();\n console.log(\"Breakpoint at clk\", this.debugClock, \"PC\", this.debugBreakState.c.PC.toString(16));\n this.pause();\n if (this.onBreakpointHit) {\n this.onBreakpointHit(this.debugBreakState, reason);\n }\n }\n haltAndCatchFire(reason: string) {\n this.breakpointHit(this.debugClock, reason);\n }\n runEval(evalfunc: DebugEvalCondition) {\n this.setDebugCondition(() => {\n if (++this.debugClock >= this.debugTargetClock && this.isStable()) {\n var cpuState = this.getCPUState();\n if (evalfunc(cpuState)) {\n this.breakpointHit(this.debugClock);\n return true;\n } else {\n return false;\n }\n }\n });\n }\n runToPC(pc: number[]) {\n this.debugTargetClock++;\n const pcs = new Set(pc);\n this.runEval((c) => {\n return pcs.has(c.PC);\n });\n }\n runUntilReturn() {\n var SP0 = this.getSP();\n this.runEval((c: CpuState): boolean => {\n return c.SP > SP0; // TODO: check for RTS/RET opcode\n });\n }\n runToFrameClock(clock: number): void {\n this.restartDebugging();\n this.debugTargetClock = clock;\n this.runEval((): boolean => { return true; });\n }\n step() {\n this.runToFrameClock(this.debugClock + 1);\n }\n stepBack() {\n var prevState;\n var prevClock;\n var clock0 = this.debugTargetClock;\n this.restartDebugging();\n this.debugTargetClock = clock0 - 25; // TODO: depends on CPU\n this.runEval((c: CpuState): boolean => {\n if (this.debugClock < clock0) {\n prevState = this.saveState();\n prevClock = this.debugClock;\n return false;\n } else {\n if (prevState) {\n this.loadState(prevState);\n this.debugClock = prevClock;\n }\n return true;\n }\n });\n }\n runToVsync() {\n this.restartDebugging();\n var frame0 = this.frameCount;\n this.runEval((): boolean => {\n return this.frameCount > frame0;\n });\n }\n}\n\nexport function inspectSymbol(platform: Platform, sym: string): string {\n if (!platform.debugSymbols) return;\n var symmap = platform.debugSymbols.symbolmap;\n var addr2sym = platform.debugSymbols.addr2symbol;\n if (!symmap || !platform.readAddress) return null;\n var addr = symmap[\"_\" + sym] || symmap[sym]; // look for C or asm symbol\n if (!(typeof addr == 'number')) return null;\n var b = platform.readAddress(addr);\n // don't show 2 bytes if there's a symbol at the next address\n if (addr2sym && addr2sym[addr + 1] != null) {\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" (\" + b + \" decimal)\"; // unsigned\n } else {\n let b2 = platform.readAddress(addr + 1);\n let w = b | (b2 << 8);\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" $\" + hex(b2, 2) + \" (\" + ((w << 16) >> 16) + \" decimal)\"; // signed\n }\n}\n\n////// 6502\n\nexport function getToolForFilename_6502(fn: string): string {\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".s\")) return \"ca65\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".dasm\")) return \"dasm\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n if (fn.endsWith(\".xa\")) return \"xa\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n if (fn.endsWith(\".cpp\")) return \"oscar64\";\n if (fn.endsWith(\".cc\")) return \"oscar64\";\n if (fn.endsWith(\".o64\")) return \"oscar64\";\n return \"dasm\"; // .a\n}\n\n// TODO: can merge w/ Z80?\nexport abstract class Base6502Platform extends BaseDebugPlatform {\n\n // some platforms store their PC one byte before or after the first opcode\n // so we correct when saving and loading from state\n debugPCDelta = -1;\n fixPC(c) { c.PC = (c.PC + this.debugPCDelta) & 0xffff; return c; }\n unfixPC(c) { c.PC = (c.PC - this.debugPCDelta) & 0xffff; return c; }\n getSP() { return this.getCPUState().SP };\n getPC() { return this.getCPUState().PC };\n isStable() { return !this.getCPUState()['T']; }\n abstract readAddress(addr: number): number;\n\n newCPU(membus: MemoryBus) {\n var cpu = new _MOS6502();\n cpu.connectBus(membus);\n return cpu;\n }\n\n getOpcodeMetadata(opcode, offset) {\n return getOpcodeMetadata_6502(opcode, offset);\n }\n\n getOriginPC(): number {\n return (this.readAddress(0xfffc) | (this.readAddress(0xfffd) << 8)) & 0xffff;\n }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getToolForFilename = getToolForFilename_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; };\n\n getDebugCategories() {\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n }\n }\n}\n\nexport function cpuStateToLongString_6502(c): string {\n function decodeFlags(c) {\n var s = \"\";\n s += c.N ? \" N\" : \" -\";\n s += c.V ? \" V\" : \" -\";\n s += c.D ? \" D\" : \" -\";\n s += c.Z ? \" Z\" : \" -\";\n s += c.C ? \" C\" : \" -\";\n s += c.I ? \" I\" : \" -\";\n return s;\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c) + \"\\n\"\n + \" A \" + hex(c.A) + \" \" + (c.R ? \"\" : \"BUSY\") + \"\\n\"\n + \" X \" + hex(c.X) + \"\\n\"\n + \" Y \" + hex(c.Y) + \" \" + \"SP \" + hex(c.SP) + \"\\n\";\n}\n\nvar OPMETA_6502 = {\n cycletime: [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4, 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0, 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4, 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 3, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ],\n extracycles: [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ],\n insnlengths: [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ],\n validinsns: [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ],\n}\n\nexport function getOpcodeMetadata_6502(opcode, address) {\n // TODO: more intelligent maximum cycles\n // TODO: must always be new object, b/c we might modify it\n return {\n opcode: opcode,\n minCycles: OPMETA_6502.cycletime[opcode],\n maxCycles: OPMETA_6502.cycletime[opcode] + OPMETA_6502.extracycles[opcode],\n insnlength: OPMETA_6502.insnlengths[opcode]\n };\n}\n\n////// Z80\n\nexport function cpuStateToLongString_Z80(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"S\", \"Z\", , \"H\", , \"V\", \"N\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF) + \" \" + (c.iff1 ? \"I\" : \"-\") + (c.iff2 ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \" IR \" + hex(c.IR, 4) + \"\\n\"\n + \"IX \" + hex(c.IX, 4) + \" IY \" + hex(c.IY, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport function cpuStateToLongString_SM83(c) {\n function decodeFlags(af) {\n return printFlags(af, [\"Z\", \"N\", \"H\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF >> 4) + \" \" + (c.ime ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport abstract class BaseZ80Platform extends BaseDebugPlatform {\n\n _cpu;\n waitCycles: number = 0;\n\n newCPU(membus: MemoryBus, iobus: MemoryBus) {\n this._cpu = new Z80();\n this._cpu.connectMemoryBus(membus);\n this._cpu.connectIOBus(iobus);\n return this._cpu;\n }\n\n getPC() { return this._cpu.getPC(); }\n getSP() { return this._cpu.getSP(); }\n isStable() { return true; }\n\n // TODO: refactor other parts into here\n runCPU(cpu, cycles: number): number {\n this._cpu = cpu; // TODO?\n this.waitCycles = 0; // TODO: needs to spill over betwenn calls\n if (this.wasBreakpointHit())\n return 0;\n var debugCond = this.getDebugCallback();\n var n = 0;\n this.waitCycles += cycles;\n while (this.waitCycles > 0) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n var cyc = cpu.advanceInsn();\n n += cyc;\n this.waitCycles -= cyc;\n }\n return n;\n }\n\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; };\n // TODO: Z80 opcode metadata\n //this.getOpcodeMetadata = function() { }\n\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n console.log(sp, start, end);\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n}\n\nexport function getToolForFilename_z80(fn: string): string {\n if (fn.endsWith(\".c\")) return \"sdcc\";\n if (fn.endsWith(\".h\")) return \"sdcc\";\n if (fn.endsWith(\".s\")) return \"sdasz80\";\n if (fn.endsWith(\".sgb\")) return \"sdasgb\";\n if (fn.endsWith(\".ns\")) return \"naken\";\n if (fn.endsWith(\".scc\")) return \"sccz80\";\n if (fn.endsWith(\".z\")) return \"zmac\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n return \"zmac\";\n}\n\n////// 6809\n\nexport function cpuStateToLongString_6809(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"E\", \"F\", \"H\", \"I\", \"N\", \"Z\", \"V\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.CC) + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"DP \" + hex(c.DP, 2) + \"\\n\"\n + \" A \" + hex(c.A, 2) + \"\\n\"\n + \" B \" + hex(c.B, 2) + \"\\n\"\n + \" X \" + hex(c.X, 4) + \"\\n\"\n + \" Y \" + hex(c.Y, 4) + \"\\n\"\n + \" U \" + hex(c.U, 4) + \"\\n\"\n ;\n}\n\nexport function getToolForFilename_6809(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cmoc\";\n if (fn.endsWith(\".h\")) return \"cmoc\";\n if (fn.endsWith(\".xasm\")) return \"xasm6809\";\n if (fn.endsWith(\".lwasm\")) return \"lwasm\";\n return \"cmoc\";\n}\n\nexport abstract class Base6809Platform extends BaseZ80Platform {\n\n newCPU(membus: MemoryBus) {\n var cpu = Object.create(CPU6809());\n cpu.init(membus.write, membus.read, 0);\n return cpu;\n }\n\n cpuStateToLongString(c: CpuState) {\n return cpuStateToLongString_6809(c);\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; };\n //this.getOpcodeMetadata = function() { }\n getToolForFilename = getToolForFilename_6809;\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n default: return super.getDebugInfo(category, state);\n }\n }\n}\n\n\n//TODO: how to get stack_end?\nexport function dumpStackToString(platform: Platform, mem: Uint8Array | number[], start: number, end: number, sp: number, jsrop: number, bigendian?: boolean): string {\n var s = \"\";\n var nraw = 0;\n //s = dumpRAM(mem.slice(start,start+end+1), start, end-start+1);\n function read(addr) {\n if (addr < mem.length) return mem[addr];\n else return platform.readAddress(addr);\n }\n while (sp < end) {\n sp++;\n // see if there's a JSR on the stack here\n // TODO: make work with roms and memory maps\n var addr = read(sp) + read(sp + 1) * 256;\n if (bigendian) { addr = ((addr & 0xff) << 8) | ((addr & 0xff00) >> 8) }\n var jsrofs = jsrop == 0x20 ? -2 : -3; // 6502 vs Z80\n var opcode = read(addr + jsrofs); // might be out of bounds\n if (opcode == jsrop) { // JSR\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(addr, 4) + \" \" + lookupSymbol(platform, addr, true);\n sp++;\n nraw = 0;\n } else {\n if (nraw == 0)\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(read(sp)) + \" \";\n if (++nraw == 8) nraw = 0;\n }\n }\n return s + \"\\n\";\n}\n\n// TODO: slow, funky, uses global\nexport function lookupSymbol(platform: Platform, addr: number, extra: boolean) {\n var start = addr;\n var addr2symbol = platform.debugSymbols && platform.debugSymbols.addr2symbol;\n while (addr2symbol && addr >= 0) {\n var sym = addr2symbol[addr];\n if (sym) { // return first symbol we find\n var sym = addr2symbol[addr];\n return extra ? (sym + \" + $\" + hex(start - addr)) : sym;\n }\n if (!extra) break;\n addr--;\n }\n return \"\";\n}\n\n/// new Machine platform adapters\n\nexport interface Machine extends Bus, Resettable, FrameBased, AcceptsROM, HasCPU, SavesState, SavesInputState {\n}\n\nexport function hasVideo(arg: any): arg is VideoSource {\n return typeof arg.connectVideo === 'function';\n}\nexport function hasAudio(arg: any): arg is SampledAudioSource {\n return typeof arg.connectAudio === 'function';\n}\nexport function hasKeyInput(arg: any): arg is AcceptsKeyInput {\n return typeof arg.setKeyInput === 'function';\n}\nexport function hasJoyInput(arg: any): arg is AcceptsJoyInput {\n return typeof arg.setJoyInput === 'function';\n}\nexport function hasPaddleInput(arg: any): arg is AcceptsPaddleInput {\n return typeof arg.setPaddleInput === 'function';\n}\nexport function isRaster(arg: any): arg is RasterFrameBased {\n return typeof arg.getRasterY === 'function';\n}\nexport function hasProbe(arg: any): arg is Probeable {\n return typeof arg.connectProbe == 'function';\n}\nexport function hasBIOS(arg: any): arg is AcceptsBIOS {\n return typeof arg.loadBIOS == 'function';\n}\nexport function hasSerialIO(arg: any): arg is HasSerialIO {\n return typeof arg.connectSerialIO === 'function';\n}\n\nexport abstract class BaseMachinePlatform extends BaseDebugPlatform implements Platform {\n machine: T;\n mainElement: HTMLElement;\n timer: AnimationTimer;\n video: RasterVideo;\n audio: SampledAudio;\n poller: ControllerPoller;\n serialIOInterface: SerialIOInterface;\n serialVisualizer: SerialIOVisualizer;\n\n probeRecorder: ProbeRecorder;\n startProbing;\n stopProbing;\n\n abstract newMachine(): T;\n abstract getToolForFilename(s: string): string;\n abstract getDefaultExtensions(): string[];\n abstract getPresets(): Preset[];\n\n constructor(mainElement: HTMLElement) {\n super();\n this.mainElement = mainElement;\n }\n\n reset() {\n this.machine.reset();\n if (this.serialVisualizer != null) this.serialVisualizer.reset();\n }\n loadState(s) { this.machine.loadState(s); }\n saveState() { return this.machine.saveState(); }\n getSP() { return this.machine.cpu.getSP(); }\n getPC() { return this.machine.cpu.getPC(); }\n isStable() { return this.machine.cpu.isStable(); }\n getCPUState() { return this.machine.cpu.saveState(); }\n loadControlsState(s) { this.machine.loadControlsState(s); }\n saveControlsState() { return this.machine.saveControlsState(); }\n\n async start() {\n this.machine = this.newMachine();\n const m = this.machine;\n // block on WASM loading\n if (m instanceof BaseWASMMachine) {\n await m.loadWASM();\n }\n var videoFrequency;\n if (hasVideo(m)) {\n var vp = m.getVideoParams();\n this.video = new RasterVideo(this.mainElement, vp.width, vp.height,\n {\n overscan: !!vp.overscan,\n rotate: vp.rotate | 0,\n aspect: vp.aspect\n });\n this.video.create();\n m.connectVideo(this.video.getFrameData());\n // TODO: support keyboard w/o video?\n if (hasKeyInput(m)) {\n this.video.setKeyboardEvents(m.setKeyInput.bind(m));\n this.poller = new ControllerPoller(m.setKeyInput.bind(m));\n }\n videoFrequency = vp.videoFrequency;\n }\n this.timer = new AnimationTimer(videoFrequency || 60, this.nextFrame.bind(this));\n if (hasAudio(m)) {\n var ap = m.getAudioParams();\n this.audio = new SampledAudio(ap.sampleRate);\n this.audio.start();\n m.connectAudio(this.audio);\n }\n if (hasPaddleInput(m)) {\n this.video.setupMouseEvents();\n }\n if (hasProbe(m)) {\n this.probeRecorder = new ProbeRecorder(m);\n this.startProbing = () => {\n m.connectProbe(this.probeRecorder);\n return this.probeRecorder;\n };\n this.stopProbing = () => {\n m.connectProbe(null);\n };\n }\n if (hasBIOS(m)) {\n this.loadBIOS = (title, data) => {\n m.loadBIOS(data, title);\n };\n }\n if (hasSerialIO(m)) {\n if (this.serialIOInterface == null) {\n this.serialVisualizer = new SerialIOVisualizer(this.mainElement, m);\n } else {\n m.connectSerialIO(this.serialIOInterface);\n }\n }\n }\n\n loadROM(title, data, origin?: number) {\n this.machine.loadROM(data, title, origin);\n this.reset();\n }\n\n loadBIOS: (title, data) => void; // only set if hasBIOS() is true\n\n pollControls() {\n this.poller && this.poller.poll();\n if (hasPaddleInput(this.machine)) {\n this.machine.setPaddleInput(0, this.video.paddle_x);\n this.machine.setPaddleInput(1, this.video.paddle_y);\n if (this.machine.setPaddleButton && this.video.paddle_buttons != null) {\n this.machine.setPaddleButton(0, this.video.paddle_buttons[0]);\n this.machine.setPaddleButton(1, this.video.paddle_buttons[1]);\n this.machine.setPaddleButton(2, this.video.paddle_buttons[2]);\n }\n }\n // TODO: put into interface\n if (this.machine['pollControls']) {\n this.machine['pollControls']();\n }\n }\n\n advance(novideo: boolean) {\n let trap = this.getDebugCallback();\n try {\n var steps = this.machine.advanceFrame(trap);\n return steps;\n } finally {\n // in case EmuHalt is thrown...\n if (!novideo && this.video) {\n this.video.updateFrame();\n this.updateVideoDebugger();\n }\n if (!novideo && this.serialVisualizer) {\n this.serialVisualizer.refresh();\n }\n }\n }\n\n updateVideoDebugger() {\n if (!this.isRunning() && isRaster(this.machine) && this.machine.getRasterCanvasPosition) {\n const { x, y } = this.machine.getRasterCanvasPosition();\n if (x >= 0 || y >= 0) {\n const ctx = this.video?.getContext();\n if (ctx) {\n drawCrosshair(ctx, x, y, 1);\n }\n }\n }\n }\n\n advanceFrameClock(trap, step) {\n if (!(step > 0)) return;\n if (this.machine instanceof BaseWASMMachine) {\n return this.machine.advanceFrameClock(trap, step);\n } else {\n return this.machine.advanceFrame(() => {\n return --step <= 0;\n });\n }\n }\n\n isRunning() {\n return this.timer && this.timer.isRunning();\n }\n\n resume() {\n this.timer.start();\n this.audio && this.audio.start();\n }\n\n pause() {\n this.timer.stop();\n this.audio && this.audio.stop();\n }\n\n // so probe views stick around TODO: must be a better way?\n runToVsync() {\n this.restartDebugging();\n var flag = false;\n this.runEval((): boolean => {\n if (this.getRasterScanline() > 0) flag = true;\n else return flag;\n });\n }\n\n // TODO: reset target clock counter\n getRasterScanline() {\n return isRaster(this.machine) && this.machine.getRasterY ? this.machine.getRasterY() : -1;\n }\n getRasterLineClock() {\n return isRaster(this.machine) && this.machine.getRasterX ? this.machine.getRasterX() : -1;\n }\n\n readAddress(addr: number): number {\n return this.machine.read(addr);\n }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n }\n getDebugInfo(category: string, state: EmuState): string {\n return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n}\n\n// TODO: move debug info into CPU?\n\nexport abstract class Base6502MachinePlatform extends BaseMachinePlatform {\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getToolForFilename(fn) { return getToolForFilename_6502(fn); }\n getDefaultExtensions() { return [\".c\", \".cpp\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n}\n\nexport abstract class BaseZ80MachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n\n}\n\nexport abstract class Base6809MachinePlatform extends BaseMachinePlatform {\n\n getToolForFilename = getToolForFilename_6809;\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0x17, true);\n }\n default: return super.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n}\n\n///\n\nclass SerialIOVisualizer {\n\n textarea: HTMLTextAreaElement;\n //vlist: VirtualTextScroller;\n device: HasSerialIO;\n lastOutCount = -1;\n lastInCount = -1;\n\n constructor(parentElement: HTMLElement, device: HasSerialIO) {\n this.device = device;\n this.textarea = document.createElement(\"textarea\");\n this.textarea.classList.add('transcript');\n this.textarea.classList.add('transcript-style-2');\n this.textarea.style.display = 'none';\n parentElement.appendChild(this.textarea);\n /*\n this.vlist = new VirtualTextScroller(parentElement);\n this.vlist.create(parentElement, 1024, this.getMemoryLineAt.bind(this));\n this.vlist.maindiv.style.height = '8em';\n this.vlist.maindiv.style.overflow = 'clip';\n */\n }\n reset() {\n this.lastOutCount = 0;\n this.lastInCount = 0;\n this.textarea.style.display = 'none';\n }\n refresh() {\n var lastop = '';\n if (this.device.serialOut.length != this.lastOutCount) {\n var s = '';\n for (var ev of this.device.serialOut) {\n if (lastop != ev.op) {\n if (s != '') s += '\\n';\n if (ev.op === 'read') s += '<< ';\n else if (ev.op === 'write') s += '>> ';\n lastop = ev.op;\n }\n if (ev.value == 10) { s += '\\u21b5'; lastop = ''; }\n else { s += byteToASCII(ev.value); }\n }\n this.textarea.value = s;\n this.lastOutCount = this.device.serialOut.length;\n this.textarea.style.display = 'block';\n }\n }\n}\n"], - "mappings": "gHAGO,IAAIA,GAAW,CACpB,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EACtD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EACxD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACzD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,SAAS,EAC3D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EACxD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,SAAS,EAC3D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EACxD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC3D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC3D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EACxD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC5D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EACxD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACvD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACvD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACtD,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACvD,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EAC3D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC5D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC9D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACvD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EACxD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC7D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACvD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACzD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC3D,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EACxD,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC3D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EACvD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC5D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC5D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAC3D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACxD,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAC1D,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC7D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EACrD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACpD,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAC/D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAC5D,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,CACjE,EAEO,SAASC,GAAgBC,EAAWC,EAAWC,EAAWC,EAA0D,CAEzH,IAAIC,EAAKN,GAASG,CAAE,EACpB,GAAIG,GAAM,KAAM,MAAO,CAAC,KAAK,MAAO,OAAO,EAAG,OAAO,EAAK,EAC1D,IAAIC,EAAID,EAAG,GACPE,EAAKF,EAAG,GACRG,EAAS,GACb,GAAID,GAAM,SAAU,CAClB,IAAIE,EAAUN,EAAK,IAASF,EAAG,EAAEE,EAAOF,EAAG,GAAG,IAAIE,GAClDM,GAAU,MACVF,EAAK,IAAIG,EAAID,EAAQ,CAAC,EACtBD,EAAS,EACX,MACED,EAAKA,EAAG,QAAQ,KAAK,IAAIG,EAAIP,EAAI,CAAC,CAAC,EACnCI,EAAKA,EAAG,QAAQ,OAAO,IAAIG,EAAIP,GAAIC,GAAI,GAAI,CAAC,CAAC,EACzCG,EAAG,QAAQ,GAAG,EAAI,GAAKA,EAAG,QAAQ,GAAG,GAAK,IAC5CC,EAAS,IAEb,MAAO,CAAC,KAAKH,EAAG,GAAK,IAAME,EAAI,OAAOF,EAAG,GAAI,OAAOG,CAAM,CAC5D,CCzPA,SAASG,GAAQC,EACjB,CAEG,IAAMC,EAAOD,EAQb,GAAI,CAACC,GAAS,OAAOA,EAAK,UAAa,YAAgB,OAAOA,EAAK,WAAc,YACnE,OAAOA,EAAK,SAAY,YAAiB,OAAOA,EAAK,UAAa,WAC7E,KAAM,kDAIT,IAAIC,EAAI,EACJC,EAAI,EACJC,EAAI,EACJC,EAAI,EACJC,EAAI,EACJC,EAAI,EACJC,EAAI,EAGJC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,GAAU,EAEVC,EAAK,EACLC,EAAK,EAGLC,GAAI,EACJC,EAAI,EACJC,EAAK,MACLC,EAAK,EAKLC,EAAQ,CAAC,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,CAAC,EAC/CC,GAAc,CAAC,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,CAAC,EAErDC,GAAQ,EACRC,EAAO,EACPC,GAAO,EAIPC,EAAS,GAGTC,EAAgB,GAChBC,GAAgB,GAGhBC,GAAgB,EAEpB,SAASC,GAAoB,CAC1B,MAAO,CACJ,GAAGV,EACH,GAAGD,EACH,GAAGJ,EACH,GAAGC,EACH,IAAIf,GAAG,GAAG8B,GAAmB,EAC7B,IAAI7B,GAAG,GAAGC,EACV,IAAIC,GAAG,GAAGC,EACV,IAAIC,GAAG,GAAGC,EACV,KAAKC,GAAS,GAAGwB,GAAgB,EACjC,KAAKvB,GAAS,GAAGC,EACjB,KAAKC,GAAS,GAAGC,EACjB,KAAKC,GAAS,GAAGC,GACjB,IAAIG,IAAG,GAAGC,EACV,GAAgBK,GAChB,KAAgBC,EAChB,KAAgBC,GAChB,OAAgBC,EAChB,cAAgBC,EAChB,cAAgBC,GAChB,cAAgBC,EACnB,CACH,CAEA,SAASI,GAASC,EAAgB,CACjCd,EAAKc,EAAM,GACXf,EAAKe,EAAM,GACXnB,EAAKmB,EAAM,GACXlB,EAAKkB,EAAM,GACXjC,EAAKiC,EAAM,IAAM,EAAK,IACtBC,GAAmBD,EAAM,EAAE,EAC3BhC,EAAKgC,EAAM,IAAM,EAAK,IACtB/B,EAAI+B,EAAM,GAAK,IACf9B,EAAK8B,EAAM,IAAM,EAAK,IACtB7B,EAAI6B,EAAM,GAAK,IACf5B,EAAK4B,EAAM,IAAM,EAAK,IACtB3B,EAAI2B,EAAM,GAAK,IACf1B,EAAW0B,EAAM,KAAO,EAAK,IAC7BE,GAAgBF,EAAM,GAAG,EACzBzB,EAAWyB,EAAM,KAAO,EAAK,IAC7BxB,EAAUwB,EAAM,IAAM,IACtBvB,EAAWuB,EAAM,KAAO,EAAK,IAC7BtB,EAAUsB,EAAM,IAAM,IACtBrB,EAAWqB,EAAM,KAAO,EAAK,IAC7BpB,GAAUoB,EAAM,IAAM,IACtBjB,GAAKiB,EAAM,IAAM,EAAK,IACtBhB,EAAIgB,EAAM,GAAK,IACfX,GAAQW,EAAM,GACdV,EAAOU,EAAM,KACbT,GAAOS,EAAM,KACbR,EAASQ,EAAM,OACfP,EAAgBO,EAAM,cACtBN,GAAgBM,EAAM,cACtBL,GAAgBK,EAAM,aACvB,CAOH,IAAIG,EAAQ,UACZ,CAIGlB,EAAK,MACLC,EAAK,EACLnB,EAAI,EACJiB,EAAI,EACJiB,GAAmB,CAAC,EAEpBZ,GAAQ,EACRC,EAAO,EACPC,GAAO,EAEPC,EAAS,GACTC,EAAgB,GAChBC,GAAgB,GAEhBC,GAAgB,CACnB,EAWIS,EAAkB,UACtB,CACG,GAAKZ,EAoDF,MAAO,GA/CP,IAAIa,EAAmB,GAAOC,EAAmB,GAC7Cb,GAEDA,EAAgB,GAChBY,EAAmB,IAEbX,KAENA,GAAgB,GAChBY,EAAmB,IAOtBtB,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAGrC,IAAIuB,EAASzC,EAAK,SAASoB,CAAE,EAC7BsB,GAAmBD,CAAM,EACzBrB,EAAMA,EAAK,EAAK,MAGZmB,GAEDf,EAAO,EACPC,GAAO,GAGDe,IAENhB,EAAO,EACPC,GAAO,GAMV,IAAIkB,GAASd,GACb,OAAAA,GAAgB,EACTc,EAQb,EAUIC,GAAY,SAASC,EAAsBC,EAC/C,CAEG,GAAID,EAID,OAAA3B,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAIrCQ,EAAS,GACTD,GAAOD,EACPA,EAAO,EACPuB,GAAU3B,CAAE,EACZA,EAAK,IACLS,IAAiB,GACV,GAEL,GAAIL,EACT,CASG,GANAN,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAErCQ,EAAS,GACTF,EAAO,EACPC,GAAO,EAEHF,KAAU,EAIXH,EAAMA,EAAK,EAAK,MAChBsB,GAAmBI,CAAI,EACvB1B,EAAMA,EAAK,EAAK,MAChBS,IAAiB,UAEXN,KAAU,EAGhBwB,GAAU3B,CAAE,EACZA,EAAK,GACLS,IAAiB,WAEXN,KAAU,EACnB,CAGGwB,GAAU3B,CAAE,EAIZ,IAAI4B,EAAmB/B,IAAK,EAAK6B,EACjC1B,EAAKpB,EAAK,SAASgD,CAAc,EACtBhD,EAAK,SAAUgD,EAAiB,EAAK,KAAM,GAAK,EAE3DnB,IAAiB,EACpB,CAEA,MAAO,EACV,CACH,EAOIa,GAAqB,SAASD,EAClC,CAKG,IAAIQ,EAAc,SAASR,GAC3B,CACG,OAASA,GAAS,KAAU,EAAKvC,GACxBuC,GAAS,KAAU,EAAKtC,GACxBsC,GAAS,KAAU,EAAKrC,GACxBqC,GAAS,KAAU,EAAKpC,GACxBoC,GAAS,KAAU,EAAKnC,GACxBmC,GAAS,KAAU,EAAKlC,GACxBkC,GAAS,KAAU,EAAKzC,EAAK,SAASO,EAAKD,GAAK,CAAE,EAAIL,CAClE,EAIA,GAAIwC,IAAW,IAEZf,EAAS,WAEFe,GAAU,IAAUA,EAAS,IACvC,CAGG,IAAIS,EAAUD,EAAYR,CAAM,GAE1BA,EAAS,MAAU,GAEdA,EAAS,MAAU,IAAO,EAClCtC,EAAI+C,GACIT,EAAS,MAAU,IAAO,EAClCrC,EAAI8C,GACIT,EAAS,MAAU,IAAO,EAClCpC,EAAI6C,GACIT,EAAS,MAAU,IAAO,EAClCnC,EAAI4C,GACIT,EAAS,MAAU,IAAO,EAClClC,EAAI2C,GACIT,EAAS,MAAU,IAAO,EAClCzC,EAAK,UAAUO,EAAKD,GAAK,EAAI4C,CAAO,GAC5BT,EAAS,MAAU,IAAO,IAClCxC,EAAIiD,GAdJhD,EAAIgD,CAeV,SACUT,GAAU,KAAUA,EAAS,IACvC,CAIG,IAAIS,EAAUD,EAAYR,CAAM,EAC5BU,GAAW,CAACC,GAAQC,GAAQC,EAAQC,EACxBC,GAAQC,GAAQC,EAAOC,CAAK,EAE5CR,IAAUV,EAAS,MAAU,CAAC,EAAGS,CAAO,CAC3C,KAEA,CAGG,IAAIU,GAAOC,EAAapB,CAAM,EAC9BmB,GAAK,CACR,CAMA/B,IAAiBiC,EAAarB,CAAM,CACvC,EAEIsB,EAAyB,SAASC,EACtC,CAUG,OAAAA,GAAS,IAELA,EAAQ,MAQTA,EAAQ,GAAG,IAAO,CAACA,GAAS,IAExBA,CACV,EAEIjC,GAAqB,UACzB,CAIG,OAAQV,EAAM,GAAK,EACXA,EAAM,GAAK,EACXA,EAAM,GAAK,EACXA,EAAM,GAAK,EACXA,EAAM,GAAK,EACXA,EAAM,GAAK,EACXA,EAAM,GAAK,EACXA,EAAM,CACjB,EAEIW,GAAkB,UACtB,CAEG,OAAQV,GAAY,GAAK,EACjBA,GAAY,GAAK,EACjBA,GAAY,GAAK,EACjBA,GAAY,GAAK,EACjBA,GAAY,GAAK,EACjBA,GAAY,GAAK,EACjBA,GAAY,GAAK,EACjBA,GAAY,CACvB,EAEIa,GAAqB,SAASe,EAClC,CAGG7B,EAAM,GAAK6B,EAAU,OAAU,EAC/B7B,EAAM,GAAK6B,EAAU,MAAU,EAC/B7B,EAAM,GAAK6B,EAAU,MAAU,EAC/B7B,EAAM,GAAK6B,EAAU,MAAU,EAC/B7B,EAAM,GAAK6B,EAAU,KAAU,EAC/B7B,EAAM,GAAK6B,EAAU,KAAU,EAC/B7B,EAAM,GAAK6B,EAAU,KAAU,EAC/B7B,EAAM,EAAK6B,EAAU,CACxB,EAEId,GAAkB,SAASc,EAC/B,CAEG5B,GAAY,GAAK4B,EAAU,OAAU,EACrC5B,GAAY,GAAK4B,EAAU,MAAU,EACrC5B,GAAY,GAAK4B,EAAU,MAAU,EACrC5B,GAAY,GAAK4B,EAAU,MAAU,EACrC5B,GAAY,GAAK4B,EAAU,KAAU,EACrC5B,GAAY,GAAK4B,EAAU,KAAU,EACrC5B,GAAY,GAAK4B,EAAU,KAAU,EACrC5B,GAAY,EAAK4B,EAAU,CAC9B,EAEIe,EAAkB,SAASC,EAC/B,CAOG7C,EAAM,GAAK6C,EAAS,MAAU,EAC9B7C,EAAM,GAAK6C,EAAS,KAAU,CACjC,EAEIC,GAAa,SAASH,EAC1B,CAGG,IAAII,EAAc,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAChD,EACA,OAAOA,EAAYJ,CAAK,CAC3B,EAEIjB,GAAY,SAASG,EACzB,CAIG/B,EAAMA,EAAK,EAAK,MAChBnB,EAAK,UAAUmB,GAAK+B,EAAU,SAAY,CAAC,EAC3C/B,EAAMA,EAAK,EAAK,MAChBnB,EAAK,UAAUmB,EAAI+B,EAAU,GAAM,CACtC,EAEImB,GAAW,UACf,CAGG,IAAI1B,EAAS3C,EAAK,SAASmB,CAAE,EAAI,IACjC,OAAAA,EAAMA,EAAK,EAAK,MAChBwB,GAAU3C,EAAK,SAASmB,CAAE,GAAK,EAC/BA,EAAMA,EAAK,EAAK,MACTwB,CACV,EAQI2B,GAA+B,SAASC,EAC5C,CAEOA,GAODnD,EAAMpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,EAC1BpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,GAAK,EAC/CA,EAAMA,EAAK,EAAK,OAKhBA,EAAMA,EAAK,EAAK,KAEtB,EAEIoD,GAA+B,SAASD,EAC5C,CAEG,GAAIA,EACJ,CAEG1C,IAAiB,EAEjB,IAAI4C,EAASV,EAAuB/D,EAAK,SAAUoB,EAAK,EAAK,KAAM,CAAC,EAEpEA,EAAMA,EAAKqD,EAAS,EAAK,KAC5B,MAIGrD,EAAMA,EAAK,EAAK,KAEtB,EAEIsD,GAAsB,SAASH,EACnC,CAGOA,GAED1C,IAAiB,EACjBkB,GAAW3B,EAAK,EAAK,KAAM,EAC3BA,EAAMpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,EAC1BpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,GAAK,EAC/CA,EAAMA,EAAK,EAAK,OAIhBA,EAAMA,EAAK,EAAK,KAEtB,EAEIuD,GAAwB,SAASJ,EACrC,CACOA,IAED1C,IAAiB,EACjBT,EAAMiD,GAAS,EAAI,EAAK,MAE9B,EAEIO,GAAW,SAASC,EACxB,CAEG9B,GAAW3B,EAAK,EAAK,KAAM,EAC3BA,EAAMyD,EAAU,EAAK,KACxB,EAEIzB,GAAS,SAASF,EACtB,CAKG,IAAIgB,EAASjE,EAAIiD,EAIjB7B,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAM6C,EAAS,IAAY,EAAJ,EAC7B7C,EAAM,GAAO6B,EAAU,KAASjD,EAAI,IAAS,GAAQ,EAAI,EAGzDoB,EAAM,GAAMpB,EAAI,QAAWiD,EAAU,OAAYjD,EAAI,QAAWiE,EAAS,KAAS,EAAI,EACtF7C,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,IAAS,EAAI,EAEjCjE,EAAIiE,EAAS,IACbD,EAAgBhE,CAAC,CACpB,EAEIoD,GAAS,SAASH,EACtB,CACG,IAAIgB,EAASjE,EAAIiD,EAAU7B,EAAM,EAEjCA,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAM6C,EAAS,IAAY,EAAJ,EAC7B7C,EAAM,GAAO6B,EAAU,KAASjD,EAAI,IAAQoB,EAAM,EAAK,GAAQ,EAAI,EACnEA,EAAM,GAAMpB,EAAI,QAAWiD,EAAU,OAAYjD,EAAI,QAAWiE,EAAS,KAAS,EAAI,EACtF7C,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,IAAS,EAAI,EAEjCjE,EAAIiE,EAAS,IACbD,EAAgBhE,CAAC,CACpB,EAEIqD,EAAS,SAASJ,EACtB,CACG,IAAIgB,EAASjE,EAAIiD,EAEjB7B,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAM6C,EAAS,IAAY,EAAJ,EAC7B7C,EAAM,GAAOpB,EAAI,KAASiD,EAAU,IAAS,GAAQ,EAAI,EACzD7B,EAAM,GAAMpB,EAAI,QAAWiD,EAAU,OAAYjD,EAAI,QAAWiE,EAAS,KAAS,EAAI,EACtF7C,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,IAAS,EAAI,EAEjCjE,EAAIiE,EAAS,IACbD,EAAgBhE,CAAC,CACpB,EAEIsD,EAAS,SAASL,EACtB,CACG,IAAIgB,EAASjE,EAAIiD,EAAU7B,EAAM,EAEjCA,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAM6C,EAAS,IAAY,EAAJ,EAC7B7C,EAAM,GAAOpB,EAAI,KAASiD,EAAU,IAAQ7B,EAAM,EAAK,GAAQ,EAAI,EACnEA,EAAM,GAAMpB,EAAI,QAAWiD,EAAU,OAAYjD,EAAI,QAAWiE,EAAS,KAAS,EAAI,EACtF7C,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,IAAS,EAAI,EAEjCjE,EAAIiE,EAAS,IACbD,EAAgBhE,CAAC,CACpB,EAEI0D,EAAQ,SAAST,EACrB,CAGG,IAAI4B,EAAO7E,EACXqD,EAAOJ,CAAO,EACdjD,EAAI6E,EAGJb,EAAgBf,CAAO,CAC1B,EAEIM,GAAS,SAASN,EACtB,CAEGjD,GAAKiD,EAAU,IACf7B,EAAM,EAAKpB,EAAI,IAAQ,EAAI,EAC3BoB,EAAM,EAAKpB,EAAQ,EAAJ,EACfoB,EAAM,EAAI,EACVA,EAAM,EAAI8C,GAAWlE,CAAC,EACtBoB,EAAM,EAAI,EACVA,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEIyD,EAAQ,SAASR,EACrB,CACGjD,GAAKiD,EAAUjD,GAAK,IACpBoB,EAAM,EAAKpB,EAAI,IAAQ,EAAI,EAC3BoB,EAAM,EAAKpB,EAAQ,EAAJ,EACfoB,EAAM,EAAI,EACVA,EAAM,EAAI8C,GAAWlE,CAAC,EACtBoB,EAAM,EAAI,EACVA,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEIwD,GAAS,SAASP,EACtB,CACGjD,GAAKiD,EAAUjD,GAAK,IACpBoB,EAAM,EAAKpB,EAAI,IAAQ,EAAI,EAC3BoB,EAAM,EAAKpB,EAAQ,EAAJ,EACfoB,EAAM,EAAI,EACVA,EAAM,EAAI8C,GAAWlE,CAAC,EACtBoB,EAAM,EAAI,EACVA,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEI8E,EAAS,SAAS7B,EACtB,CACG,IAAIgB,EAAShB,EAAU,EAEvB,OAAA7B,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAM6C,EAAS,IAAY,EAAJ,EAC7B7C,EAAM,GAAM6B,EAAU,MAAU,GAAQ,EAAI,EAE5C7B,EAAM,EAAK6B,IAAY,IAAQ,EAAI,EACnC7B,EAAM,EAAI,EAEV6C,GAAU,IACVD,EAAgBC,CAAM,EAEfA,CACV,EAEIc,EAAS,SAAS9B,EACtB,CACG,IAAIgB,EAAShB,EAAU,EAEvB,OAAA7B,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAM6C,EAAS,IAAY,EAAJ,EAC7B7C,EAAM,GAAM6B,EAAU,MAAU,EAAQ,EAAI,EAC5C7B,EAAM,EAAK6B,IAAY,IAAQ,EAAI,EACnC7B,EAAM,EAAI,EAEV6C,GAAU,IACVD,EAAgBC,CAAM,EAEfA,CACV,EAEIe,GAAY,SAAS/B,EACzB,CAGG,IAAIgC,EAAK3E,EAAKD,GAAK,EAAI4D,EAASgB,EAAKhC,EAErC7B,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,MAAW,EAAI,EACnC7C,EAAM,GAAO6D,EAAK,OAAWhC,EAAU,MAAW,KAAU,EAAI,EAEhE3C,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAE1BD,EAAgB3D,CAAC,CACpB,EAEI6E,EAAY,SAASjC,EACzB,CACGA,GAAW7B,EAAM,EACjB,IAAI6D,EAAK3E,EAAKD,GAAK,EAAI4D,EAASgB,EAAKhC,EAErC7B,EAAM,EAAK6C,EAAS,MAAU,EAAI,EAClC7C,EAAM,EAAM6C,EAAS,MAAc,EAAJ,EAC/B7C,EAAM,GAAO6D,EAAK,OAAWhC,EAAU,MAAW,KAAU,EAAI,EAChE7B,EAAM,GAAM6D,EAAK,UAAahC,EAAU,SAAcgB,EAAS,UAAagB,EAAK,OAAW,EAAI,EAChG7D,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,MAAW,EAAI,EAEnC3D,EAAI2D,EAAS,IACb5D,EAAK4D,IAAW,EAAK,IAErBD,EAAgB3D,CAAC,CACpB,EAEI8E,GAAY,SAASlC,EACzB,CACGA,GAAW7B,EAAM,EACjB,IAAI6D,EAAK3E,EAAKD,GAAK,EAAI4D,EAASgB,EAAKhC,EAErC7B,EAAM,EAAK6C,EAAS,MAAU,EAAI,EAClC7C,EAAM,EAAM6C,EAAS,MAAc,EAAJ,EAC/B7C,EAAM,GAAO6D,EAAK,OAAWhC,EAAU,MAAW,KAAU,EAAI,EAChE7B,EAAM,GAAM6D,EAAK,UAAahC,EAAU,SAAcgB,EAAS,UAAagB,EAAK,OAAW,EAAI,EAChG7D,EAAM,EAAI,EACVA,EAAM,EAAK6C,EAAS,MAAW,EAAI,EAEnC3D,EAAI2D,EAAS,IACb5D,EAAK4D,IAAW,EAAK,IAErBD,EAAgB3D,CAAC,CACpB,EAEI+E,GAAQ,SAASC,EACrB,CACG,IAAIpB,EAASlE,EAAK,QAAQsF,CAAI,EAE9B,OAAAjE,EAAM,EAAK6C,EAAS,IAAQ,EAAI,EAChC7C,EAAM,EAAI6C,EAAS,EAAI,EACvB7C,EAAM,EAAI,EACVA,EAAM,EAAI8C,GAAWD,CAAM,EAAI,EAAI,EACnC7C,EAAM,EAAI,EACV4C,EAAgBC,CAAM,EAEfA,CACV,EAEIqB,EAAS,UACb,CAEOtF,IAAM,MAGPA,EAAI8D,EAAuB9D,CAAC,EAE5BA,EAAK,CAACA,EAAK,KAGdoB,EAAM,EAAKpB,EAAI,IAAQ,EAAI,EAC3BoB,EAAM,EAAKpB,EAAQ,EAAJ,EACfoB,EAAM,GAAO,CAACpB,EAAK,IAAQ,EAAK,EAAI,EACpCoB,EAAM,EAAKpB,IAAM,IAAQ,EAAI,EAC7BoB,EAAM,EAAI,EACVA,EAAM,EAAIpB,EAAI,EAAI,EAClBgE,EAAgBhE,CAAC,CACpB,EAEIuF,GAAS,UACb,CAEG,IAAIC,EAAazF,EAAK,SAASO,EAAKD,GAAK,CAAE,EAC3CN,EAAK,UAAUK,EAAKD,GAAK,EAAIqF,CAAU,EAGvC,IAAIvB,GAAU7D,EAAKD,GAAK,GAAM,EAC9BC,EAAI6D,EAAS,IACb9D,GAAK8D,EAAS,SAAY,EAC1BA,GAAU3D,EAAKD,GAAK,GAAM,EAC1BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAC1BA,GAAU/D,EAAKD,GAAK,GAAM,EAC1BC,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,EAE1B7C,EAAM,EAAI,EACVA,EAAM,EAAKlB,GAAKD,EAAK,EAAI,EACzBmB,EAAM,EAAI,EACVA,EAAM,GAAMpB,EAAIwF,EAAc,KAAU,EACxCpE,EAAM,GAAMpB,EAAIwF,EAAc,KAAU,CAC3C,EAEIC,GAAS,UACb,CACG,IAAIC,EAAatE,EAAM,EACnBoE,EAAazF,EAAK,SAASO,EAAKD,GAAK,CAAE,EAC3CqD,EAAM8B,CAAU,EAChBpE,EAAM,EAAIsE,EACVtE,EAAM,GAAMpB,EAAIwF,EAAapE,EAAM,EAAK,KAAU,EAClDA,EAAM,GAAMpB,EAAIwF,EAAapE,EAAM,EAAK,KAAU,EAElD,IAAI6C,GAAU3D,EAAKD,GAAK,GAAM,EAC9BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAC1BA,GAAU/D,EAAKD,GAAK,GAAM,EAC1BC,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,EAE1B7C,EAAM,EAAI6C,EAAS,EAAI,CAC1B,EAEI0B,EAAS,UACb,CACG1F,EAAI8E,EAAO9E,CAAC,EAEZF,EAAK,UAAUO,EAAKD,GAAK,EAAIN,EAAK,QAASE,GAAK,EAAKC,CAAC,CAAC,EAEvD,IAAI+D,GAAU3D,EAAKD,GAAK,GAAM,EAC9BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAE1B7C,EAAM,EAAI,CACb,EAEIwE,GAAU,UACd,CACG7F,EAAK,SAAUE,GAAK,EAAKC,EAAGH,EAAK,SAASO,EAAKD,GAAK,CAAE,CAAC,EAEvD,IAAI4D,GAAU3D,EAAKD,GAAK,GAAM,EAC9BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAE1BhE,EAAI8E,EAAO9E,CAAC,EACZmB,EAAM,EAAI,CACb,EAEIyE,GAAS,UACb,CACGzE,EAAM,EAAI,EACVA,EAAM,EAAI,EAEV,IAAIoE,EAAazF,EAAK,SAASO,EAAKD,GAAK,CAAE,EAC3CN,EAAK,UAAUK,EAAKD,GAAK,EAAIqF,CAAU,EAEvC,IAAIvB,GAAU7D,EAAKD,GAAK,GAAM,EAC9BC,EAAI6D,EAAS,IACb9D,GAAK8D,EAAS,SAAY,EAC1BA,GAAU3D,EAAKD,GAAK,GAAM,EAC1BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAC1BA,GAAU/D,EAAKD,GAAK,GAAM,EAC1BC,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,EAE1B7C,EAAM,EAAKlB,GAAKD,EAAK,EAAI,EACzBmB,EAAM,GAAMpB,EAAIwF,EAAc,KAAU,EACxCpE,EAAM,GAAMpB,EAAIwF,EAAc,KAAU,CAC3C,EAEIM,GAAS,UACb,CACG,IAAIJ,EAAatE,EAAM,EACnBoE,EAAazF,EAAK,SAASO,EAAKD,GAAK,CAAE,EAC3CqD,EAAM8B,CAAU,EAChBpE,EAAM,EAAIsE,EACVtE,EAAM,GAAMpB,EAAIwF,EAAapE,EAAM,EAAK,KAAU,EAClDA,EAAM,GAAMpB,EAAIwF,EAAapE,EAAM,EAAK,KAAU,EAElD,IAAI6C,GAAU3D,EAAKD,GAAK,GAAM,EAC9BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAC1BA,GAAU/D,EAAKD,GAAK,GAAM,EAC1BC,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,EAE1B7C,EAAM,EAAI6C,EAAS,EAAI,CAC1B,EAEI8B,GAAS,UACb,CACG9F,EAAI8E,EAAO9E,CAAC,EAEZF,EAAK,UAAUO,EAAKD,GAAK,EAAIN,EAAK,QAASE,GAAK,EAAKC,CAAC,CAAC,EAEvD,IAAI+D,GAAU3D,EAAKD,GAAK,GAAM,EAC9BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAE1B7C,EAAM,EAAI,CACb,EAEI4E,GAAU,UACd,CACGjG,EAAK,SAAUE,GAAK,EAAKC,EAAGH,EAAK,SAASO,EAAKD,GAAK,CAAE,CAAC,EAEvD,IAAI4D,GAAU3D,EAAKD,GAAK,GAAM,EAC9BC,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,EAE1BhE,EAAI8E,EAAO9E,CAAC,EACZmB,EAAM,EAAI,CACb,EAEI6E,GAAS,SAAShD,EACtB,CACG,OAAA7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEVA,EAAM,GAAK6B,EAAU,OAAU,EAC/BA,GAAYA,GAAW,EAAK7B,EAAM,GAAK,IAEvCA,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,CACV,EAEIiD,GAAS,SAASjD,EACtB,CACG,OAAA7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEVA,EAAM,EAAI6B,EAAU,EACpBA,EAAYA,IAAY,EAAK,IAAS7B,EAAM,GAAK,EAEjDA,EAAM,EAAM6B,EAAU,IAAY,EAAJ,EAC9B7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,EAAU,GACpB,EAEIkD,GAAQ,SAASlD,EACrB,CACG7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEV,IAAIyD,EAAOzD,EAAM,EACjB,OAAAA,EAAM,GAAK6B,EAAU,OAAU,EAC/BA,GAAYA,GAAW,EAAK4B,GAAQ,IAEpCzD,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,CACV,EAEImD,GAAQ,SAASnD,EACrB,CACG7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEV,IAAIyD,EAAOzD,EAAM,EACjB,OAAAA,EAAM,EAAI6B,EAAU,EACpBA,EAAYA,IAAY,EAAK,IAAS4B,GAAQ,EAE9CzD,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,CACV,EAEIoD,GAAS,SAASpD,EACtB,CACG,OAAA7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEVA,EAAM,GAAK6B,EAAU,OAAU,EAC/BA,EAAWA,GAAW,EAAK,IAE3B7B,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,CACV,EAEIqD,EAAS,SAASrD,EACtB,CACG,OAAA7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEVA,EAAM,EAAI6B,EAAU,EACpBA,EAAYA,IAAY,EAAK,IAASA,EAAU,IAEhD7B,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,CACV,EAEIsD,GAAS,SAAStD,EACtB,CACG,OAAA7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEVA,EAAM,GAAK6B,EAAU,OAAU,EAC/BA,EAAYA,GAAW,EAAK,IAAQ,EAEpC7B,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAK6B,EAAU,IAAQ,EAAI,EACjCe,EAAgBf,CAAO,EAEhBA,CACV,EAEIuD,GAAS,SAASvD,EACtB,CACG,OAAA7B,EAAM,EAAI,EACVA,EAAM,EAAI,EAEVA,EAAM,EAAI6B,EAAU,EACpBA,EAAWA,IAAY,EAAK,IAE5B7B,EAAM,EAAK6B,EAAc,EAAJ,EACrB7B,EAAM,EAAI8C,GAAWjB,CAAO,EAC5B7B,EAAM,EAAI,EACV4C,EAAgBf,CAAO,EAEhBA,CACV,EAEIwD,GAAY,SAASxD,EACzB,CACG7B,EAAM,EAAI,EAEV,IAAI6C,EAASnD,EAAKmC,EAElB7B,EAAM,EAAK6C,EAAS,MAAW,EAAI,EACnC7C,EAAM,GAAON,EAAK,OAAUmC,EAAU,MAAU,KAAU,EAAI,EAC9De,GAAiBC,EAAS,SAAY,CAAC,EAEvCnD,EAAKmD,EAAS,KACjB,EASIL,EAAe,CAAC,EAGpBA,EAAa,CAAI,EAAI,UAAW,CAAE,EAElCA,EAAa,CAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBjB,EAAIH,EAAK,SAASoB,CAAE,EACpBA,EAAMA,EAAK,EAAK,MAChBlB,EAAIF,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,CAAI,EAAI,UACrB,CACG7D,EAAK,UAAUG,EAAKD,GAAK,EAAID,CAAC,CACjC,EAEA4D,EAAa,CAAI,EAAI,UACrB,CACG,IAAIK,EAAU/D,EAAKD,GAAK,EACxBgE,GAAU,EACV/D,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,CAC7B,EAEAL,EAAa,CAAI,EAAI,UACrB,CACG3D,EAAI6E,EAAO7E,CAAC,CACf,EAEA2D,EAAa,CAAI,EAAI,UACrB,CACG3D,EAAI8E,EAAO9E,CAAC,CACf,EAEA2D,EAAa,CAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBlB,EAAIF,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,CAAI,EAAI,UACrB,CAKG,IAAI8C,EAAStF,EAAM,EAAGuF,EAASvF,EAAM,EAAGwF,EAASxF,EAAM,EACvDpB,EAAIiG,GAAOjG,CAAC,EACZoB,EAAM,EAAIsF,EACVtF,EAAM,EAAIuF,EACVvF,EAAM,EAAIwF,CACb,EAEAhD,EAAa,CAAI,EAAI,UACrB,CACG,IAAIiB,EAAO7E,EACXA,EAAIO,EACJA,EAAUsE,EAEVA,EAAO/C,GAAmB,EAC1BI,GAAmBH,GAAgB,CAAC,EACpCI,GAAgB0C,CAAI,CACvB,EAEAjB,EAAa,CAAI,EAAI,UACrB,CACGoB,GAAU9E,EAAKD,GAAK,CAAE,CACzB,EAEA2D,EAAa,EAAI,EAAI,UACrB,CACG5D,EAAID,EAAK,SAASG,EAAKD,GAAK,CAAE,CACjC,EAEA2D,EAAa,EAAI,EAAI,UACrB,CACG,IAAIK,EAAU/D,EAAKD,GAAK,EACxBgE,GAAU,EACV/D,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,CAC7B,EAEAL,EAAa,EAAI,EAAI,UACrB,CACG1D,EAAI4E,EAAO5E,CAAC,CACf,EAEA0D,EAAa,EAAI,EAAI,UACrB,CACG1D,EAAI6E,EAAO7E,CAAC,CACf,EAEA0D,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBjB,EAAIH,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACG,IAAI8C,EAAStF,EAAM,EAAGuF,EAASvF,EAAM,EAAGwF,EAASxF,EAAM,EACvDpB,EAAIkG,GAAOlG,CAAC,EACZoB,EAAM,EAAIsF,EACVtF,EAAM,EAAIuF,EACVvF,EAAM,EAAIwF,CACb,EAEAhD,EAAa,EAAI,EAAI,UACrB,CACG3D,EAAKA,EAAI,EAAK,IACdsE,GAA6BtE,IAAM,CAAC,CACvC,EAEA2D,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBf,EAAIL,EAAK,SAASoB,CAAE,EACpBA,EAAMA,EAAK,EAAK,MAChBhB,EAAIJ,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACG7D,EAAK,UAAUK,EAAKD,GAAK,EAAIH,CAAC,CACjC,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACG,IAAIK,EAAU7D,EAAKD,GAAK,EACxB8D,GAAU,EACV7D,EAAI6D,EAAS,IACb9D,GAAK8D,EAAS,SAAY,CAC7B,EAEAL,EAAa,EAAI,EAAI,UACrB,CACGzD,EAAI2E,EAAO3E,CAAC,CACf,EAEAyD,EAAa,EAAI,EAAI,UACrB,CACGzD,EAAI4E,EAAO5E,CAAC,CACf,EAEAyD,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBhB,EAAIJ,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACG,IAAI8C,EAAStF,EAAM,EAAGuF,EAASvF,EAAM,EAAGwF,EAASxF,EAAM,EACvDpB,EAAImG,GAAMnG,CAAC,EACXoB,EAAM,EAAIsF,EACVtF,EAAM,EAAIuF,EACVvF,EAAM,EAAIwF,CACb,EAEAhD,EAAa,EAAI,EAAI,UACrB,CACG,IAAIY,EAASV,EAAuB/D,EAAK,SAAUoB,EAAK,EAAK,KAAM,CAAC,EACpEA,EAAMA,EAAKqD,EAAS,EAAK,KAC5B,EAEAZ,EAAa,EAAI,EAAI,UACrB,CACGoB,GAAU5E,EAAKD,GAAK,CAAE,CACzB,EAEAyD,EAAa,EAAI,EAAI,UACrB,CACG5D,EAAID,EAAK,SAASK,EAAKD,GAAK,CAAE,CACjC,EAEAyD,EAAa,EAAI,EAAI,UACrB,CACG,IAAIK,EAAU7D,EAAKD,GAAK,EACxB8D,GAAU,EACV7D,EAAI6D,EAAS,IACb9D,GAAK8D,EAAS,SAAY,CAC7B,EAEAL,EAAa,EAAI,EAAI,UACrB,CACGxD,EAAI0E,EAAO1E,CAAC,CACf,EAEAwD,EAAa,EAAI,EAAI,UACrB,CACGxD,EAAI2E,EAAO3E,CAAC,CACf,EAEAwD,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBf,EAAIL,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACG,IAAI8C,EAAStF,EAAM,EAAGuF,EAASvF,EAAM,EAAGwF,EAASxF,EAAM,EACvDpB,EAAIoG,GAAMpG,CAAC,EACXoB,EAAM,EAAIsF,EACVtF,EAAM,EAAIuF,EACVvF,EAAM,EAAIwF,CACb,EAEAhD,EAAa,EAAI,EAAI,UACrB,CACGW,GAA6B,CAACnD,EAAM,CAAC,CACxC,EAEAwC,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBb,EAAIP,EAAK,SAASoB,CAAE,EACpBA,EAAMA,EAAK,EAAK,MAChBd,EAAIN,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCpB,EAAK,UAAU6E,EAAStE,CAAC,EACzBP,EAAK,UAAW6E,EAAU,EAAK,MAAQvE,CAAC,CAC3C,EAEAuD,EAAa,EAAI,EAAI,UACrB,CACG,IAAIK,EAAU3D,EAAKD,GAAK,EACxB4D,GAAU,EACV3D,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,CAC7B,EAEAL,EAAa,EAAI,EAAI,UACrB,CACGvD,EAAIyE,EAAOzE,CAAC,CACf,EAEAuD,EAAa,EAAI,EAAI,UACrB,CACGvD,EAAI0E,EAAO1E,CAAC,CACf,EAEAuD,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBd,EAAIN,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACG,IAAIiB,EAAO7E,EACNoB,EAAM,IASJA,EAAM,IAAOpB,EAAI,IAAQ,KAC1B6E,GAAQ,IACPzD,EAAM,GAAMpB,EAAI,OACjB6E,GAAQ,OAVPzD,EAAM,IAAOpB,EAAI,IAAQ,KAC1B6E,GAAQ,IACPzD,EAAM,GAAMpB,EAAI,OACjB6E,GAAQ,KAUdzD,EAAM,EAAKyD,EAAO,IAAQ,EAAI,EAC9BzD,EAAM,EAAMyD,EAAO,IAAY,EAAJ,EAC3BzD,EAAM,EAAMpB,EAAI,GAAS6E,EAAO,GAAS,EAAI,EAC7CzD,EAAM,EAAI8C,GAAWW,EAAO,GAAI,EAKhCzD,EAAM,EAAKA,EAAM,GAAMpB,EAAI,IAAS,EAAI,EAExCA,EAAI6E,EAAO,IAEXb,EAAgBhE,CAAC,CACpB,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACGW,GAA6B,CAAC,CAACnD,EAAM,CAAC,CACzC,EAEAwC,EAAa,EAAI,EAAI,UACrB,CACGoB,GAAU1E,EAAKD,GAAK,CAAE,CACzB,EAEAuD,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCb,EAAIP,EAAK,SAAS6E,CAAO,EACzBvE,EAAIN,EAAK,SAAU6E,EAAU,EAAK,KAAM,CAC3C,EAEAhB,EAAa,EAAI,EAAI,UACrB,CACG,IAAIK,EAAU3D,EAAKD,GAAK,EACxB4D,GAAU,EACV3D,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,CAC7B,EAEAL,EAAa,EAAI,EAAI,UACrB,CACGtD,EAAIwE,EAAOxE,CAAC,CACf,EAEAsD,EAAa,EAAI,EAAI,UACrB,CACGtD,EAAIyE,EAAOzE,CAAC,CACf,EAEAsD,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBb,EAAIP,EAAK,SAASoB,CAAE,CACvB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACG5D,EAAK,CAACA,EAAK,IACXoB,EAAM,EAAI,EACVA,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACGW,GAA6B,CAACnD,EAAM,CAAC,CACxC,EAEAwC,EAAa,EAAI,EAAI,UACrB,CACG1C,EAAMnB,EAAK,SAAUoB,EAAK,EAAK,KAAM,EAC3BpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,GAAK,EAC9CA,EAAMA,EAAK,EAAK,KACnB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCpB,EAAK,UAAU6E,EAAS5E,CAAC,CAC5B,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACG1C,EAAMA,EAAK,EAAK,KACnB,EAEA0C,EAAa,EAAI,EAAI,UACrB,CACG,IAAIgB,EAAUtE,EAAKD,GAAK,EACxBN,EAAK,UAAU6E,EAASE,EAAO/E,EAAK,SAAS6E,CAAO,CAAC,CAAC,CACzD,EAEAhB,EAAa,EAAI,EAAI,UACrB,CACG,IAAIgB,EAAUtE,EAAKD,GAAK,EACxBN,EAAK,UAAU6E,EAASG,EAAOhF,EAAK,SAAS6E,CAAO,CAAC,CAAC,CACzD,EAEAhB,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBpB,EAAK,UAAUO,EAAKD,GAAK,EAAIN,EAAK,SAASoB,CAAE,CAAC,CACjD,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACGxC,EAAM,EAAI,EACVA,EAAM,EAAI,EACVA,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACGW,GAA6B,CAAC,CAACnD,EAAM,CAAC,CACzC,EAEAwC,EAAa,EAAI,EAAI,UACrB,CACGoB,GAAU9D,CAAE,CACf,EAEA0C,EAAa,EAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCnB,EAAID,EAAK,SAAS6E,CAAO,CAC5B,EAEAhB,EAAa,EAAI,EAAI,UACrB,CACG1C,EAAMA,EAAK,EAAK,KACnB,EAEA0C,EAAa,EAAI,EAAI,UACrB,CACG5D,EAAI8E,EAAO9E,CAAC,CACf,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACG5D,EAAI+E,EAAO/E,CAAC,CACf,EAEA4D,EAAa,EAAI,EAAI,UACrB,CACG5D,EAAID,EAAK,SAAUoB,EAAK,EAAK,KAAM,EACnCA,EAAMA,EAAK,EAAK,KACnB,EAEAyC,EAAa,EAAI,EAAI,UACrB,CACGxC,EAAM,EAAI,EACVA,EAAM,EAAIA,EAAM,EAChBA,EAAM,EAAIA,EAAM,EAAI,EAAI,EACxB4C,EAAgBhE,CAAC,CACpB,EAEA4D,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAACtD,EAAM,CAAC,CACjC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIK,EAASG,GAAS,EACtBlE,EAAI+D,EAAS,IACbhE,GAAKgE,EAAS,SAAY,CAC7B,EAEAL,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAACjD,EAAM,CAAC,CACxC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,EAC3BpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,GAAK,EAC9CA,EAAMA,EAAK,EAAK,KACnB,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAACrD,EAAM,CAAC,CAC/B,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGd,GAAU5C,EAAKD,GAAK,CAAE,CACzB,EAEA2D,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBgC,GAAOpD,EAAK,SAASoB,CAAE,CAAC,CAC3B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,CAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAAC,CAACtD,EAAM,CAAC,CAClC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMiD,GAAS,EAAI,EAAK,KAC3B,EAEAR,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAAC,CAACjD,EAAM,CAAC,CACzC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CAKG3C,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAIrCE,EAAMA,EAAK,EAAK,MAChB,IAAIqB,EAASzC,EAAK,SAASoB,CAAE,EACzB0F,GAAcrE,EAAS,MAAU,EACjCsE,EAAWtE,EAAS,EAExB,GAAIA,EAAS,GACb,CAEG,IAAIU,GAAW,CAAC+C,GAAQC,GAAQC,GAAOC,GACvBC,GAAQC,EAAQC,GAAQC,EAAM,EAE1CM,IAAa,EACd7G,EAAIiD,GAAS2D,CAAU,EAAG5G,CAAC,EACrB6G,IAAa,EACnB5G,EAAIgD,GAAS2D,CAAU,EAAG3G,CAAC,EACrB4G,IAAa,EACnB3G,EAAI+C,GAAS2D,CAAU,EAAG1G,CAAC,EACrB2G,IAAa,EACnB1G,EAAI8C,GAAS2D,CAAU,EAAGzG,CAAC,EACrB0G,IAAa,EACnBzG,EAAI6C,GAAS2D,CAAU,EAAGxG,CAAC,EACrByG,IAAa,EACnBxG,EAAI4C,GAAS2D,CAAU,EAAGvG,CAAC,EACrBwG,IAAa,EACnB/G,EAAK,UAAUO,EAAKD,GAAK,EACN6C,GAAS2D,CAAU,EAAG9G,EAAK,SAASO,EAAKD,GAAK,CAAE,CAAC,CAAC,EAC/DyG,IAAa,IACnB9G,EAAIkD,GAAS2D,CAAU,EAAG7G,CAAC,EACjC,MACSwC,EAAS,KAGXsE,IAAa,EACd1F,EAAM,EAAMnB,EAAK,GAAK4G,EAAmB,EAAJ,EAC/BC,IAAa,EACnB1F,EAAM,EAAMlB,EAAK,GAAK2G,EAAmB,EAAJ,EAC/BC,IAAa,EACnB1F,EAAM,EAAMjB,EAAK,GAAK0G,EAAmB,EAAJ,EAC/BC,IAAa,EACnB1F,EAAM,EAAMhB,EAAK,GAAKyG,EAAmB,EAAJ,EAC/BC,IAAa,EACnB1F,EAAM,EAAMf,EAAK,GAAKwG,EAAmB,EAAJ,EAC/BC,IAAa,EACnB1F,EAAM,EAAMd,EAAK,GAAKuG,EAAmB,EAAJ,EAC/BC,IAAa,EACnB1F,EAAM,EAAOrB,EAAK,SAASO,EAAKD,GAAK,CAAE,EAAM,GAAKwG,EAAmB,EAAJ,EAC3DC,IAAa,IACnB1F,EAAM,EAAMpB,EAAK,GAAK6G,EAAmB,EAAJ,GAExCzF,EAAM,EAAI,EACVA,EAAM,EAAI,EACVA,EAAM,EAAIA,EAAM,EAChBA,EAAM,EAAMyF,IAAe,GAAM,CAACzF,EAAM,EAAK,EAAI,EAOjDA,EAAM,EAAMyF,IAAe,GAAM,CAACzF,EAAM,EAAK,EAAI,EACjDA,EAAM,EAAMyF,IAAe,GAAM,CAACzF,EAAM,EAAK,EAAI,GAE3CoB,EAAS,IAGXsE,IAAa,EACd7G,GAAM,IAAO,EAAE,GAAK4G,GACdC,IAAa,EACnB5G,GAAM,IAAO,EAAE,GAAK2G,GACdC,IAAa,EACnB3G,GAAM,IAAO,EAAE,GAAK0G,GACdC,IAAa,EACnB1G,GAAM,IAAO,EAAE,GAAKyG,GACdC,IAAa,EACnBzG,GAAM,IAAO,EAAE,GAAKwG,GACdC,IAAa,EACnBxG,GAAM,IAAO,EAAE,GAAKuG,GACdC,IAAa,EACnB/G,EAAK,UAAUO,EAAKD,GAAK,EACNN,EAAK,SAASO,EAAKD,GAAK,CAAE,EAAI,EAAE,GAAKwG,EAAW,EAC7DC,IAAa,IACnB9G,GAAM,IAAO,EAAE,GAAK6G,IAKnBC,IAAa,EACd7G,GAAM,GAAK4G,EACLC,IAAa,EACnB5G,GAAM,GAAK2G,EACLC,IAAa,EACnB3G,GAAM,GAAK0G,EACLC,IAAa,EACnB1G,GAAM,GAAKyG,EACLC,IAAa,EACnBzG,GAAM,GAAKwG,EACLC,IAAa,EACnBxG,GAAM,GAAKuG,EACLC,IAAa,EACnB/G,EAAK,UAAUO,EAAKD,GAAK,EACNN,EAAK,SAASO,EAAKD,GAAK,CAAE,EAAK,GAAKwG,CAAW,EAC5DC,IAAa,IACnB9G,GAAM,GAAK6G,GAGjBjF,IAAiBmF,EAAgBvE,CAAM,CAC1C,EAEAoB,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAAC,CAACrD,EAAM,CAAC,CAChC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGd,GAAW3B,EAAK,EAAK,KAAM,EAC3BA,EAAMpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,EAC3BpB,EAAK,SAAUoB,EAAK,EAAK,KAAM,GAAK,EAC9CA,EAAMA,EAAK,EAAK,KACnB,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBiC,GAAOrD,EAAK,SAASoB,CAAE,CAAC,CAC3B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,CAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAACtD,EAAM,CAAC,CACjC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIK,EAASG,GAAS,EACtBhE,EAAI6D,EAAS,IACb9D,GAAK8D,EAAS,SAAY,CAC7B,EAEAL,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAACjD,EAAM,CAAC,CACxC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBpB,EAAK,SAAUC,GAAK,EAAKD,EAAK,SAASoB,CAAE,EAAGnB,CAAC,CAChD,EAEA4D,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAACrD,EAAM,CAAC,CAC/B,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGd,GAAU1C,EAAKD,GAAK,CAAE,CACzB,EAEAyD,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBkC,EAAOtD,EAAK,SAASoB,CAAE,CAAC,CAC3B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,EAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAAC,CAACtD,EAAM,CAAC,CAClC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIiB,EAAO5E,EACXA,EAAIO,EACJA,EAAUqE,EACVA,EAAO3E,EACPA,EAAIO,EACJA,EAAUoE,EACVA,EAAO1E,EACPA,EAAIO,EACJA,EAAUmE,EACVA,EAAOzE,EACPA,EAAIO,EACJA,EAAUkE,EACVA,EAAOxE,EACPA,EAAIO,EACJA,EAAUiE,EACVA,EAAOvE,EACPA,EAAIO,GACJA,GAAUgE,CACb,EAEAjB,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAAC,CAACjD,EAAM,CAAC,CACzC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBnB,EAAID,EAAK,QAASC,GAAK,EAAKD,EAAK,SAASoB,CAAE,CAAC,CAChD,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAAC,CAACrD,EAAM,CAAC,CAChC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CAKG3C,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAErCE,EAAMA,EAAK,EAAK,MAChB,IAAIqB,EAASzC,EAAK,SAASoB,CAAE,EACzBwC,EAAOqD,EAAgBxE,CAAM,EAE7BmB,GAGDA,EAAK,EACL/B,IAAiBqF,EAAgBzE,CAAM,IASvCrB,EAAMA,EAAK,EAAK,MAEhBS,IAAiBiC,EAAa,CAAC,EAErC,EAEAD,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBmC,EAAOvD,EAAK,SAASoB,CAAE,CAAC,CAC3B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,EAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAACtD,EAAM,CAAC,CACjC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIK,EAASG,GAAS,EACtB9D,EAAI2D,EAAS,IACb5D,GAAK4D,EAAS,SAAY,CAC7B,EAEAL,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAACjD,EAAM,CAAC,CACxC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIiB,EAAO9E,EAAK,SAASmB,CAAE,EAC3BnB,EAAK,UAAUmB,EAAIZ,CAAC,EACpBA,EAAIuE,EACJA,EAAO9E,EAAK,SAAUmB,EAAK,EAAK,KAAM,EACtCnB,EAAK,UAAWmB,EAAK,EAAK,MAAQb,CAAC,EACnCA,EAAIwE,CACP,EAEAjB,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAACrD,EAAM,CAAC,CAC/B,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGd,GAAUxC,EAAKD,GAAK,CAAE,CACzB,EAEAuD,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBoC,GAAOxD,EAAK,SAASoB,CAAE,CAAC,CAC3B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,EAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAAC,CAACtD,EAAM,CAAC,CAClC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAKb,EAAKD,GAAK,EACfc,EAAMA,EAAK,EAAK,KACnB,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAAC,CAACjD,EAAM,CAAC,CACzC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIiB,EAAO1E,EACXA,EAAIE,EACJA,EAAIwE,EACJA,EAAOzE,EACPA,EAAIE,EACJA,EAAIuE,CACP,EAEAjB,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAAC,CAACrD,EAAM,CAAC,CAChC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CAKG3C,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAErCE,EAAMA,EAAK,EAAK,MAChB,IAAIqB,EAASzC,EAAK,SAASoB,CAAE,EACzBwC,EAAOuD,EAAgB1E,CAAM,EAE7BmB,GAGDA,EAAK,EACL/B,IAAiBuF,EAAgB3E,CAAM,GAKvCZ,IAAiBiC,EAAa,CAAC,CAErC,EAEAD,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBqC,GAAOzD,EAAK,SAASoB,CAAE,CAAC,CAC3B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,EAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAACtD,EAAM,CAAC,CACjC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG,IAAIK,EAASG,GAAS,EACtBlC,GAAmB+B,EAAS,GAAI,EAChCjE,GAAKiE,EAAS,SAAY,CAC7B,EAEAL,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAACjD,EAAM,CAAC,CACxC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CAEGlC,EAAgB,EACnB,EAEAkC,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAACrD,EAAM,CAAC,CAC/B,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACGd,GAAUhB,GAAmB,EAAK9B,GAAK,CAAE,CAC5C,EAEA4D,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBsC,EAAM1D,EAAK,SAASoB,CAAE,CAAC,CAC1B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,EAAI,CAChB,EAEAf,EAAa,GAAI,EAAI,UACrB,CACGc,GAAsB,CAAC,CAACtD,EAAM,CAAC,CAClC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CACG1C,EAAKZ,EAAKD,GAAK,CAClB,EAEAuD,EAAa,GAAI,EAAI,UACrB,CACGS,GAA6B,CAAC,CAACjD,EAAM,CAAC,CACzC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CAEGjC,GAAgB,EACnB,EAEAiC,EAAa,GAAI,EAAI,UACrB,CACGa,GAAoB,CAAC,CAACrD,EAAM,CAAC,CAChC,EAEAwC,EAAa,GAAI,EAAI,UACrB,CAKG3C,EAAKA,EAAI,KAAWA,EAAI,KAAQ,EAAK,IAErCE,EAAMA,EAAK,EAAK,MAChB,IAAIqB,EAASzC,EAAK,SAASoB,CAAE,EACzBwC,EAAOqD,EAAgBxE,CAAM,EAEjC,GAAImB,EACJ,CAIG,IAAIkB,EAAO/D,EACXA,EAAKC,EAEL4C,EAAK,EACL5C,EAAKD,EACLA,EAAK+D,EAELjD,IAAiBqF,EAAgBzE,CAAM,CAC1C,MAQGrB,EAAMA,EAAK,EAAK,MAEhBS,IAAiBiC,EAAa,CAAC,CAErC,EAEAD,EAAa,GAAI,EAAI,UACrB,CACGzC,EAAMA,EAAK,EAAK,MAChBuC,EAAM3D,EAAK,SAASoB,CAAE,CAAC,CAC1B,EAEAyC,EAAa,GAAI,EAAI,UACrB,CACGe,GAAS,EAAI,CAChB,EAQA,IAAIuC,EAAkB,CAAC,EAEvBA,EAAgB,EAAI,EAAI,UACxB,CACGjH,EAAImF,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,EAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGD,CAAC,CAChC,EAEAiH,EAAgB,EAAI,EAAI,UACxB,CACG/B,GAAUjF,EAAKD,GAAK,CAAE,CACzB,EAEAiH,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCpB,EAAK,UAAU6E,EAAS1E,CAAC,EACzBH,EAAK,UAAW6E,EAAU,EAAK,MAAQ3E,CAAC,CAC3C,EAEAiH,EAAgB,EAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,EAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,EAAI,EAAI,UACxB,CACGlG,GAAIhB,CACP,EAEAkH,EAAgB,EAAI,EAAI,UACxB,CACGhH,EAAIkF,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,EAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGA,CAAC,CAChC,EAEAgH,EAAgB,EAAI,EAAI,UACxB,CACGhC,EAAUhF,EAAKD,GAAK,CAAE,CACzB,EAEAiH,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCjB,EAAIH,EAAK,SAAS6E,CAAO,EACzB3E,EAAIF,EAAK,SAAU6E,EAAU,EAAK,KAAM,CAC3C,EAEAsC,EAAgB,EAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,KAC3B,EAEA8C,EAAgB,EAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,EAAI,EAAI,UACxB,CACGjG,EAAIjB,CACP,EAEAkH,EAAgB,EAAI,EAAI,UACxB,CACG/G,EAAIiF,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,EAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGC,CAAC,CAChC,EAEA+G,EAAgB,EAAI,EAAI,UACxB,CACG/B,GAAU/E,EAAKD,GAAK,CAAE,CACzB,EAEA+G,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCpB,EAAK,UAAU6E,EAASxE,CAAC,EACzBL,EAAK,UAAW6E,EAAU,EAAK,MAAQzE,CAAC,CAC3C,EAEA+G,EAAgB,EAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,EAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,EAAI,EAAI,UACxB,CACGlH,EAAIgB,GACJI,EAAM,EAAIpB,EAAI,IAAO,EAAI,EACzBoB,EAAM,EAAIpB,EAAI,EAAI,EAClBoB,EAAM,EAAI,EACVA,EAAM,EAAII,GACVJ,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEAkH,EAAgB,EAAI,EAAI,UACxB,CACG9G,EAAIgF,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,EAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGE,CAAC,CAChC,EAEA8G,EAAgB,EAAI,EAAI,UACxB,CACGhC,EAAU9E,EAAKD,GAAK,CAAE,CACzB,EAEA+G,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCf,EAAIL,EAAK,SAAS6E,CAAO,EACzBzE,EAAIJ,EAAK,SAAU6E,EAAU,EAAK,KAAM,CAC3C,EAEAsC,EAAgB,EAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,EAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,EAAI,EAAI,UACxB,CACGlH,EAAIiB,EACJG,EAAM,EAAIpB,EAAI,IAAO,EAAI,EACzBoB,EAAM,EAAIpB,EAAI,EAAI,EAClBoB,EAAM,EAAI,EACVA,EAAM,EAAII,GACVJ,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEAkH,EAAgB,EAAI,EAAI,UACxB,CACG7G,EAAI+E,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,EAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGG,CAAC,CAChC,EAEA6G,EAAgB,EAAI,EAAI,UACxB,CACG/B,GAAU7E,EAAKD,GAAK,CAAE,CACzB,EAEA6G,EAAgB,EAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCpB,EAAK,UAAU6E,EAAStE,CAAC,EACzBP,EAAK,UAAW6E,EAAU,EAAK,MAAQvE,CAAC,CAC3C,EAEA6G,EAAgB,GAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,GAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,GAAI,EAAI,UACxB,CACG,IAAIE,EAAWrH,EAAK,SAASO,EAAKD,GAAK,CAAE,EACrCgH,EAAQD,EAAW,GAAME,EAAQtH,EAAI,GACzCoH,GAAaA,EAAW,OAAU,EAAME,GAAS,EACjDtH,EAAKA,EAAI,IAAQqH,EACjBtH,EAAK,UAAUO,EAAKD,GAAK,EAAI+G,CAAQ,EAErChG,EAAM,EAAKpB,EAAI,IAAQ,EAAI,EAC3BoB,EAAM,EAAIpB,EAAI,EAAI,EAClBoB,EAAM,EAAI,EACVA,EAAM,EAAI8C,GAAWlE,CAAC,EAAI,EAAI,EAC9BoB,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEAkH,EAAgB,GAAI,EAAI,UACxB,CACG5G,EAAI8E,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGI,CAAC,CAChC,EAEA4G,EAAgB,GAAI,EAAI,UACxB,CACGhC,EAAU5E,EAAKD,GAAK,CAAE,CACzB,EAEA6G,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCb,EAAIP,EAAK,SAAS6E,CAAO,EACzBvE,EAAIN,EAAK,SAAU6E,EAAU,EAAK,KAAM,CAC3C,EAEAsC,EAAgB,GAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,GAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,GAAI,EAAI,UACxB,CACG,IAAIE,EAAWrH,EAAK,SAASO,EAAKD,GAAK,CAAE,EACrCgH,EAAQD,EAAW,IAAME,EAAQtH,EAAI,GACzCoH,GAAaA,EAAW,KAAS,EAAKE,EACtCtH,EAAKA,EAAI,IAASqH,IAAU,EAC5BtH,EAAK,UAAUO,EAAKD,GAAK,EAAI+G,CAAQ,EAErChG,EAAM,EAAKpB,EAAI,IAAQ,EAAI,EAC3BoB,EAAM,EAAIpB,EAAI,EAAI,EAClBoB,EAAM,EAAI,EACVA,EAAM,EAAI8C,GAAWlE,CAAC,EAAI,EAAI,EAC9BoB,EAAM,EAAI,EACV4C,EAAgBhE,CAAC,CACpB,EAEAkH,EAAgB,GAAI,EAAI,UACxB,CACG9B,GAAOnF,GAAK,EAAKC,CAAC,CACrB,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAG,CAAC,CAChC,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACG/B,GAAUjE,CAAE,CACf,EAEAgG,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCpB,EAAK,UAAU6E,EAAS1D,EAAK,GAAI,EACjCnB,EAAK,UAAW6E,EAAU,EAAK,MAAS1D,IAAO,EAAK,GAAI,CAC3D,EAEAgG,EAAgB,GAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,GAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,GAAI,EAAI,UACxB,CACGlH,EAAIoF,GAAOnF,GAAK,EAAKC,CAAC,CACzB,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACGnH,EAAK,SAAUE,GAAK,EAAKC,EAAGF,CAAC,CAChC,EAEAkH,EAAgB,GAAI,EAAI,UACxB,CACGhC,EAAUhE,CAAE,CACf,EAEAgG,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAW7E,EAAK,SAASoB,CAAE,GAAK,EAEhCD,EAAKnB,EAAK,SAAS6E,CAAO,EAC1B1D,GAAMnB,EAAK,SAAU6E,EAAU,EAAK,KAAM,GAAK,CAClD,EAEAsC,EAAgB,GAAI,EAAI,UACxB,CACG5B,EAAO,CACV,EAEA4B,EAAgB,GAAI,EAAI,UACxB,CACG/F,EAAMiD,GAAS,EAAI,EAAK,MACxB7C,EAAOC,EACV,EAEA0F,EAAgB,GAAI,EAAI,UACxB,CACG5F,GAAQ,CACX,EAEA4F,EAAgB,GAAI,EAAI,UACxB,CACG3B,GAAO,CACV,EAEA2B,EAAgB,GAAI,EAAI,UACxB,CACGzB,GAAO,CACV,EAEAyB,EAAgB,GAAI,EAAI,UACxB,CACGvB,EAAO,CACV,EAEAuB,EAAgB,GAAI,EAAI,UACxB,CACGtB,GAAQ,CACX,EAEAsB,EAAgB,GAAI,EAAI,UACxB,CACGrB,GAAO,CACV,EAEAqB,EAAgB,GAAI,EAAI,UACxB,CACGpB,GAAO,CACV,EAEAoB,EAAgB,GAAI,EAAI,UACxB,CACGnB,GAAO,CACV,EAEAmB,EAAgB,GAAI,EAAI,UACxB,CACGlB,GAAQ,CACX,EAEAkB,EAAgB,GAAI,EAAI,UACxB,CACG3B,GAAO,GACHtF,GAAKC,KAEN0B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGzB,GAAO,EACH,CAACrE,EAAM,IAAMnB,GAAKC,KAEnB0B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGvB,EAAO,EACH1F,IAED2B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGtB,GAAQ,EACJ3F,IAED2B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGrB,GAAO,GACH5F,GAAKC,KAEN0B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGpB,GAAO,EACH,CAAC1E,EAAM,IAAMnB,GAAKC,KAEnB0B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGnB,GAAO,EACH9F,IAED2B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EAEA+F,EAAgB,GAAI,EAAI,UACxB,CACGlB,GAAQ,EACJ/F,IAED2B,IAAiB,EACjBT,EAAMA,EAAK,EAAK,MAEtB,EASA,IAAI6F,EAAkB,CAAC,EAEvBA,EAAgB,CAAI,EAAI,UACxB,CACGP,GAAUvG,EAAKD,GAAK,CAAE,CACzB,EAEA+G,EAAgB,EAAI,EAAI,UACxB,CACGP,GAAUrG,EAAKD,GAAK,CAAE,CACzB,EAEA6G,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChBL,EAAKf,EAAK,SAASoB,CAAE,EACrBA,EAAMA,EAAK,EAAK,MAChBL,GAAOf,EAAK,SAASoB,CAAE,GAAK,CAC/B,EAEA6F,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAY7E,EAAK,SAASoB,CAAE,GAAK,EAEjCpB,EAAK,UAAU6E,EAAS9D,EAAK,GAAI,EACjCf,EAAK,UAAW6E,EAAU,EAAK,MAAS9D,IAAO,EAAK,GAAI,CAC3D,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,EAAK,KACnB,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMgE,EAAOhE,IAAO,CAAC,GAAK,EAAMA,EAAK,GACxC,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMiE,EAAOjE,IAAO,CAAC,GAAK,EAAMA,EAAK,GACxC,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChBL,EAAMf,EAAK,SAASoB,CAAE,GAAK,EAAML,EAAK,GACzC,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACGP,GAAU3F,CAAE,CACf,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIyD,EAAU7E,EAAK,SAASoB,CAAE,EAC9BA,EAAMA,EAAK,EAAK,MAChByD,GAAY7E,EAAK,SAASoB,CAAE,GAAK,EAEjCL,EAAKf,EAAK,SAAS6E,CAAO,EAC1B9D,GAAOf,EAAK,SAAU6E,EAAU,EAAK,KAAM,GAAK,CACnD,EAEAoC,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,EAAK,KACnB,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAKgE,EAAOhE,EAAK,GAAI,EAAKA,EAAK,KAClC,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAKiE,EAAOjE,EAAK,GAAI,EAAKA,EAAK,KAClC,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChBL,EAAMf,EAAK,SAASoB,CAAE,EAAI,IAASL,EAAK,KAC3C,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACjD4C,EAAQhE,EAAK,SAAUyE,EAAS1D,EAAM,KAAM,EAChDf,EAAK,UAAWyE,EAAS1D,EAAM,MAAQgE,EAAOf,CAAK,CAAC,CACvD,EAEAiD,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACjD4C,EAAQhE,EAAK,SAAUyE,EAAS1D,EAAM,KAAM,EAChDf,EAAK,UAAWyE,EAAS1D,EAAM,MAAQiE,EAAOhB,CAAK,CAAC,CACvD,EAEAiD,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDA,EAAMA,EAAK,EAAK,MAChBpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQzE,EAAK,SAASoB,CAAE,CAAC,CAC3D,EAEA6F,EAAgB,EAAI,EAAI,UACxB,CACGP,GAAUvF,CAAE,CACf,EAEA8F,EAAgB,EAAI,EAAI,UACxB,CACG/G,EAAKa,IAAO,EAAK,GACpB,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG/G,EAAIa,EAAK,GACZ,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDlB,EAAIF,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,EAAI,EAAI,UACxB,CACG9G,EAAKY,IAAO,EAAK,GACpB,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG9G,EAAIY,EAAK,GACZ,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDjB,EAAIH,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,EAAI,EAAI,UACxB,CACG7G,EAAKW,IAAO,EAAK,GACpB,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7G,EAAIW,EAAK,GACZ,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDhB,EAAIJ,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,EAAI,EAAI,UACxB,CACG5G,EAAKU,IAAO,EAAK,GACpB,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG5G,EAAIU,EAAK,GACZ,EAEAkG,EAAgB,EAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDf,EAAIL,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,IAASb,GAAK,CAC5B,EAEA+G,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,IAASZ,GAAK,CAC5B,EAEA8G,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,IAASX,GAAK,CAC5B,EAEA6G,EAAgB,EAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,IAASV,GAAK,CAC5B,EAEA4G,EAAgB,GAAI,EAAI,UACxB,CAEA,EAEAA,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,KAAUA,EAAK,MAAS,CACtC,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDd,EAAIN,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,IAASd,GAAK,CAC5B,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,MAAUb,CACxB,EAEA+G,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,MAAUZ,CACxB,EAEA8G,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,MAAUX,CACxB,EAEA6G,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,MAAUV,CACxB,EAEA4G,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,MAAWA,IAAO,CAChC,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CAEA,EAEAA,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDb,EAAIP,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAMA,EAAK,MAAUd,CACxB,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQvE,CAAC,CAC3C,EAEA+G,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQtE,CAAC,CAC3C,EAEA8G,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQrE,CAAC,CAC3C,EAEA6G,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQpE,CAAC,CAC3C,EAEA4G,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQnE,CAAC,CAC3C,EAEA2G,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQlE,CAAC,CAC3C,EAEA0G,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDpB,EAAK,UAAWe,EAAK0D,EAAU,MAAQxE,CAAC,CAC3C,EAEAgH,EAAgB,GAAI,EAAI,UACxB,CACGhH,EAAKc,IAAO,EAAK,GACpB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACGhH,EAAIc,EAAK,GACZ,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDnB,EAAID,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAC3C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACG7D,GAAQrC,IAAO,EAAK,GAAI,CAC3B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7D,GAAOrC,EAAK,GAAI,CACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDgC,GAAOpD,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC/C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACG5D,GAAQtC,IAAO,EAAK,GAAI,CAC3B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG5D,GAAOtC,EAAK,GAAI,CACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDiC,GAAOrD,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC/C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACG3D,EAAQvC,IAAO,EAAK,GAAI,CAC3B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG3D,EAAOvC,EAAK,GAAI,CACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDkC,EAAOtD,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC/C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACG1D,EAAQxC,IAAO,EAAK,GAAI,CAC3B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG1D,EAAOxC,EAAK,GAAI,CACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDmC,EAAOvD,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC/C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACGzD,GAAQzC,IAAO,EAAK,GAAI,CAC3B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACGzD,GAAOzC,EAAK,GAAI,CACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDoC,GAAOxD,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC/C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACGxD,GAAQ1C,IAAO,EAAK,GAAI,CAC3B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACGxD,GAAO1C,EAAK,GAAI,CACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDqC,GAAOzD,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC/C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACGvD,EAAO3C,IAAO,EAAK,GAAI,CAC1B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACGvD,EAAM3C,EAAK,GAAI,CAClB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDsC,EAAM1D,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC9C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACGtD,EAAO5C,IAAO,EAAK,GAAI,CAC1B,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACGtD,EAAM5C,EAAK,GAAI,CAClB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDuC,EAAM3D,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,CAC9C,EAEAwC,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAMA,EAAK,EAAK,MAChB,IAAIqD,EAASV,EAAuB/D,EAAK,SAASoB,CAAE,CAAC,EACrDA,EAAMA,EAAK,EAAK,MAChB,IAAIqB,EAASzC,EAAK,SAASoB,CAAE,EAAG4C,EAIhC,GAAIvB,EAAS,GACb,CAEG,IAAI+E,GAAiB,CAACtB,GAAQC,GAAQC,GAAOC,GACvBC,GAAQC,EAAQC,GAAQC,EAAM,EAIhD7C,GAAO4D,IAAgB/E,EAAS,MAAU,CAAC,EAC/CuB,EAAQJ,GAAM5D,EAAK,SAAUe,EAAK0D,EAAU,KAAM,CAAC,EAEnDzE,EAAK,UAAWe,EAAK0D,EAAU,MAAQT,CAAK,CAC/C,KAEA,CACG,IAAI8C,IAAcrE,EAAS,MAAU,EAEjCA,EAAS,KAGVpB,EAAM,EAAI,EACVA,EAAM,EAAI,EACVA,EAAM,EAAMrB,EAAK,SAAUe,EAAK0D,EAAU,KAAM,EAAK,GAAKqC,GAAmB,EAAJ,EACzEzF,EAAM,EAAIA,EAAM,EAChBA,EAAM,EAAMyF,KAAe,GAAM,CAACzF,EAAM,EAAK,EAAI,GAE3CoB,EAAS,KAGfuB,EAAQhE,EAAK,SAAUe,EAAK0D,EAAU,KAAM,EAAI,EAAE,GAAKqC,IAAc,IACrE9G,EAAK,UAAWe,EAAK0D,EAAU,MAAQT,CAAK,IAK5CA,EAAQhE,EAAK,SAAUe,EAAK0D,EAAU,KAAM,EAAK,GAAKqC,GACtD9G,EAAK,UAAWe,EAAK0D,EAAU,MAAQT,CAAK,EAElD,CAIIA,IAAU,UAENvB,EAAS,KAAU,EACrBvC,EAAI8D,GACGvB,EAAS,KAAU,EAC1BtC,EAAI6D,GACGvB,EAAS,KAAU,EAC1BrC,EAAI4D,GACGvB,EAAS,KAAU,EAC1BpC,EAAI2D,GACGvB,EAAS,KAAU,EAC1BnC,EAAI0D,GACGvB,EAAS,KAAU,EAC1BlC,EAAIyD,GAEGvB,EAAS,KAAU,IAC1BxC,EAAI+D,IAGVnC,IAAiBmF,EAAgBvE,CAAM,EAAI,CAC9C,EAEAwE,EAAgB,GAAI,EAAI,UACxB,CACGlG,EAAKsD,GAAS,CACjB,EAEA4C,EAAgB,GAAI,EAAI,UACxB,CACG,IAAInC,EAAO/D,EACXA,EAAKf,EAAK,SAASmB,CAAE,EACrBJ,GAAMf,EAAK,SAAUmB,EAAK,EAAK,KAAM,GAAK,EAC1CnB,EAAK,UAAUmB,EAAI2D,EAAO,GAAI,EAC9B9E,EAAK,UAAWmB,EAAK,EAAK,MAAS2D,IAAS,EAAK,GAAI,CACxD,EAEAmC,EAAgB,GAAI,EAAI,UACxB,CACGlE,GAAUhC,CAAE,CACf,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG7F,EAAML,EAAK,EAAK,KACnB,EAEAkG,EAAgB,GAAI,EAAI,UACxB,CACG9F,EAAKJ,CACR,EASA,IAAI+C,EAAe,CACf,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAG,GAAI,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAK,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAG,GAAI,GAAK,EAAG,GAAI,GAAI,GAAK,EAAI,EAAG,GAAI,GAAK,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAG,GAAI,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAG,GAAI,GAAK,EAAG,GAAI,GAAK,EAAG,GAC3D,EAAG,GAAI,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAAG,GAAI,GAAI,GAAK,EAAI,EAAG,GAC3D,EAAG,GAAI,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAAG,GAAK,EAAG,GAAK,EAAI,EAAG,GAC3D,EAAG,GAAI,GAAK,EAAG,GAAI,GAAK,EAAG,GAAK,EAAI,EAAG,GAAK,EAAG,GAAK,EAAI,EAAG,EAC/D,EAEIsD,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC7D,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAAG,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAC7D,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAAG,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAC7D,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAG,GAC5D,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAAG,GAAI,GAAI,GAAI,GAAK,EAAG,GAAK,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC7D,GAAI,GAAI,GAAI,GAAK,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAK,EAAI,EAAI,EAAI,EAC7D,GAAI,GAAI,GAAI,GAAK,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAK,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAChE,EAEIJ,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,CAChE,EAEIE,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI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E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,EACzhCC,GAAQ,IAAI,WAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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AC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,GAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE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,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE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,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,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EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,WAAY,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,CACF,EAEO,SAASV,GAAuBF,EAAQa,EAAS,CAGtD,MA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", - "names": ["OPS_6502", "disassemble6502", "pc", "b0", "b1", "b2", "op", "s", "am", "isaddr", "offset", "hex", "FastZ80", "coreParameter", "core", "a", "b", "c", "d", "e", "h", "l", "a_prime", "b_prime", "c_prime", "d_prime", "e_prime", "h_prime", "l_prime", "ix", "iy", "i", "r", "sp", "pc", "flags", "flags_prime", "imode", "iff1", "iff2", "halted", "do_delayed_di", "do_delayed_ei", "cycle_counter", "getState", "get_flags_register", "get_flags_prime", "setState", "state", "set_flags_register", "set_flags_prime", "reset", "run_instruction", "doing_delayed_di", "doing_delayed_ei", "opcode", "decode_instruction", "retval", "interrupt", "non_maskable", "data", "push_word", "vector_address", "get_operand", "operand", "op_array", "do_add", "do_adc", "do_sub", "do_sbc", "do_and", "do_xor", "do_or", "do_cp", "func", "instructions", "cycle_counts", "get_signed_offset_byte", "value", "update_xy_flags", "result", "get_parity", "parity_bits", "pop_word", "do_conditional_absolute_jump", "condition", "do_conditional_relative_jump", "offset", "do_conditional_call", "do_conditional_return", "do_reset", "address", "temp", "do_inc", "do_dec", "do_hl_add", "hl", "do_hl_adc", "do_hl_sbc", "do_in", "port", "do_neg", "do_ldi", "read_value", "do_cpi", "temp_carry", "do_ini", "do_outi", "do_ldd", "do_cpd", "do_ind", "do_outd", "do_rlc", "do_rrc", "do_rl", "do_rr", "do_sla", "do_sra", "do_sll", "do_srl", "do_ix_add", "temp_s", "temp_z", "temp_p", "bit_number", "reg_code", "cycle_counts_cb", "dd_instructions", "cycle_counts_dd", "ed_instructions", "cycle_counts_ed", "hl_value", "temp1", "temp2", "ddcb_functions", "Z80", "bus", "s", "MasterAudio", "AY38910_Audio", "master", "i", "val", "SN76489_Audio", "newPOKEYAudio", "count", "audio", "pokey", "POKEYDeviceChannel", "combinePolys", "a", "b", "arr", "n", "divideBy", "NOTPOLY5", "POLY4", "PURE", "VOL_ONLY", "VOLUME_MASK", "POLY9", "CH1_179", "CH3_179", "CH1_CH2", "CH3_CH4", "CH1_FILTER", "CH2_FILTER", "CLOCK_15", "DIV_64", "DIV_15", "POLY4_SIZE", "POLY5_SIZE", "POLY9_SIZE", "POLY17_SIZE", "CHAN1", "CHAN2", "CHAN3", "CHAN4", "CHIP1", "CHIP2", "CHIP3", "CHIP4", "SAMPLE", "FREQ_17_EXACT", "FREQ_17_APPROX", "bit1", "bit2", "bit4", "bit5", "bit9", "bit15", "bit31", "bit17", "bit17_5", "bit5_4", "wavetones", "div2", "div6", "div31", "div93", "bit15_4", "bit5_2", "bit5_6", "tiawavetones", "regs", "counters", "deltas", "volume", "audc", "waveforms", "buffer", "sampleRate", "clock", "baseDelta", "dirty", "length", "rate", "updateValues", "addr", "ctrl", "base", "div", "j", "k", "value", "s", "sample", "d", "v", "wav", "cnt", "on", "WorkerSoundChannel", "worker", "output", "pending", "pendingLength", "e", "buf", "l", "SampleAudio", "clockfreq", "self", "sfrac", "sinc", "accum", "bufpos", "bufferlist", "idrain", "ifill", "nbuffers", "mix", "ape", "buflen", "lbuf", "m", "clearBuffers", "createContext", "AudioContext", "ctx", "arrbuf", "inext", "SampledAudio", "TssChannelAdapter", "chans", "oversample", "c", "sink", "bufs", "ch", "total", "ProbeRecorder", "m", "buflen", "newbuflen", "a", "src", "clocks", "address", "SP", "type", "value", "op", "count", "i", "NullProbe", "src", "BasicHeadlessMachine", "key", "code", "flags", "probe", "data", "title", "origin", "state", "c", "membus", "a", "val", "v", "iobus", "BasicMachine", "audio", "pixels", "BasicScanlineMachine", "trap", "endLineClock", "steps", "sl", "Z80_OPS", "Z80_OPS_ED", "Z80_OPS_CB", "disassembleZ80", "pc", "b0", "b1", "b2", "b3", "op", "n", "am", "bytes", "isaddr", "ireg", "hex", "offset", "CPU6809", "ticks", "rA", "rB", "rX", "rY", "rU", "rS", "PC", "CC", "DP", "F_CARRY", "F_OVERFLOW", "F_ZERO", "F_NEGATIVE", "F_IRQMASK", "F_HALFCARRY", "F_FIRQMASK", "F_ENTIRE", "vecRESET", "vecNMI", "vecSWI", "vecIRQ", "vecFIRQ", "vecSWI2", "vecSWI3", "T", "IRQs", "byteTo", "byteAt", "cycles", "cycles2", "flagsNZ", "setV8", "a", "b", "r", "setV16", "getD", "setD", "v", "PUSHB", "PUSHW", "PUSHBU", "PUSHWU", "PULLB", "PULLW", "PULLBU", "PULLWU", "PSHS", "ucTemp", "i", "PSHU", "PULS", "PULU", "getPBR", "ucPostByte", "setPBR", "TFREXG", "bExchange", "signed", "x", "signed16", "fetch", "fetch16", "v1", "v2", "ReadWord", "addr", "WriteWord", "PostByte", "pb", "preg", "xchg", "sTemp", "sByte", "flagsNZ16", "word", "oINC", "oDEC", "oSUB", "temp", "oSUB16", "oADD", "oADD16", "oADC", "oSBC", "oCMP", "oCMP16", "oNEG", "oLSR", "oASR", "oASL", "oROL", "oldc", "oROR", "oEOR", "oOR", "oAND", "oCOM", "dpadd", "step", "oldT", "oldPC", "opcode", "cf", "nhi", "nlo", "reset", "ds", "ds11", "ds10", "disasm", "c", "d", "pc", "toHexN", "n", "s", "toHex2", "toHex4", "rx", "ro", "j", "sx", "bytes", "mode", "mnemo", "ixr", "disp", "ind", "mod", "ofs8", "ofs16", "Ts", "Tt", "t", "bt", "ba", "tck", "reg", "value", "f", "fx", "_MOS6502", "self", "RDY", "T", "instruction", "aBus", "bus", "boo", "I", "fetchOpcodeAndDecodeInstruction", "PC", "RESET_VECTOR", "SP", "A", "X", "Y", "N", "V", "D", "Z", "C", "opcode", "data", "AD", "BA", "BALCrossed", "IA", "branchOffset", "branchOffsetCrossAdjust", "NMI_VECTOR", "IRQ_VECTOR", "rX", "rY", "bN", "bV", "bZ", "bC", "instructions", "fetchNextOpcode", "fetchOpcodeAndDiscard", "fetchBranchOffset", "fetchADL", "fetchADH", "fetchADLFromBA", "fetchADHFromBA", "fetchBAL", "fetchBAH", "fetchBALFromIA", "fetchBAHFromIA", "addXtoBAL", "low", "addYtoBAL", "add1toBAL", "add1toBAHifBALCrossed", "fetchIAL", "fetchIAH", "add1toIAL", "fetchDataFromImmediate", "fetchDataFromAD", "fetchDataFromBA", "writeDataToAD", "writeDataToBA", "addBranchOffsetToPCL", "oldLow", "newLow", "adjustPCHForBranchOffsetCross", "setZ", "val", "setN", "setV", "setC", "popFromStack", "peekFromStack", "pushToStack", "getStatusBits", "setStatusBits", "illegalOpcode", "op", "implied", "operation", "immediateRead", "zeroPageRead", "absoluteRead", "indirectXRead", "absoluteIndexedRead", "index", "addIndex", "zeroPageIndexedRead", "indirectYRead", "zeroPageWrite", "absoluteWrite", "indirectXWrite", "absoluteIndexedWrite", "zeroPageIndexedWrite", "indirectYWrite", "zeroPageReadModifyWrite", "absoluteReadModifyWrite", "zeroPageIndexedReadModifyWrite", "absoluteIndexedReadModifyWrite", "indirectXReadModifyWrite", "indirectYReadModifyWrite", "opcodes", "BRK", "ORA", "uKIL", "uSLO", "uNOP", "ASL", "PHP", "ASL_ACC", "uANC", "Bxx", "CLC", "JSR", "AND", "uRLA", "BIT", "ROL", "PLP", "ROL_ACC", "SEC", "RTI", "EOR", "uSRE", "LSR", "PHA", "LSR_ACC", "uASR", "JMP_ABS", "CLI", "RTS", "ADC", "uRRA", "ROR", "PLA", "ROR_ACC", "uARR", "JMP_IND", "SEI", "STA", "uSAX", "STY", "STX", "DEY", "TXA", "uANE", "uSHA", "TYA", "TXS", "uSHS", "uSHY", "uSHX", "LDY", "LDA", "LDX", "uLAX", "TAY", "TAX", "uLXA", "CLV", "TSX", "uLAS", "CPY", "CMP", "uDCP", "DEC", "INY", "DEX", "uSBX", "CLD", "CPX", "SBC", "uISB", "INC", "INX", "NOP", "SED", "newC", "addressing", "operand", "AL", "AH", "add", "par", "sub", "oldC", "comp", "newX", "IRQ", "NMI", "reg", "cond", "branchTaken", "state", "mes", "text", "cycletime", "extracycles", "insnlengths", "validinsns", "address", "MOS6502", "_MOS6502", "bus", "itype", "s", "op", "BaseWASMMachine", "prefix", "self", "wmod", "wasmResponse", "wasmBinary", "wasmCompiled", "wasmResult", "biosBinary", "biosResponse", "statesize", "ctrlstatesize", "cpustatesize", "sampbufsize", "rom", "EmuHalt", "srcArray", "address", "value", "pixels", "pixbuf", "state", "audio", "n", "i", "trap", "cpf", "NullProbe", "datalen", "dataaddr", "databuf", "probe", "DebugSymbols", "symbolmap", "debuginfo", "invertMap", "isDebuggable", "arg", "BreakpointList", "result", "id", "BasePlatform", "recorder", "sym", "inspectSymbol", "_a", "o", "path", "data", "BaseDebugPlatform", "cond", "callback", "debugCond", "novideo", "steps", "targetClock", "reason", "evalfunc", "cpuState", "pc", "pcs", "c", "SP0", "clock", "prevState", "prevClock", "clock0", "frame0", "platform", "symmap", "addr2sym", "addr", "b", "hex", "b2", "w", "getToolForFilename_6502", "fn", "Base6502Platform", "membus", "cpu", "_MOS6502", "opcode", "offset", "getOpcodeMetadata_6502", "read", "disassemble6502", "category", "state", "cpuStateToLongString_6502", "dumpRAM", "dumpStackToString", "decodeFlags", "s", "OPMETA_6502", "address", "cpuStateToLongString_Z80", "flags", "printFlags", "cpuStateToLongString_SM83", "af", "BaseZ80Platform", "getToolForFilename_z80", "iobus", "Z80", "cycles", "n", "cyc", "sp", "start", "end", "disassembleZ80", "cpuStateToLongString_6809", "getToolForFilename_6809", "Base6809Platform", "CPU6809", "mem", "jsrop", "bigendian", "nraw", "jsrofs", "lookupSymbol", "extra", "addr2symbol", "hasVideo", "hasAudio", "hasKeyInput", "hasPaddleInput", "arg", "isRaster", "hasProbe", "hasBIOS", "hasSerialIO", "BaseMachinePlatform", "BaseDebugPlatform", "mainElement", "s", "m", "BaseWASMMachine", "videoFrequency", "hasVideo", "vp", "RasterVideo", "hasKeyInput", "ControllerPoller", "AnimationTimer", "hasAudio", "ap", "SampledAudio", "ProbeRecorder", "title", "data", "SerialIOVisualizer", "origin", "novideo", "trap", "steps", "_a", "x", "y", "ctx", "drawCrosshair", "step", "flag", "addr", "isDebuggable", "category", "state", "Base6502MachinePlatform", "getOpcodeMetadata_6502", "fn", "getToolForFilename_6502", "pc", "read", "disassemble6502", "cpuStateToLongString_6502", "dumpRAM", "dumpStackToString", "BaseZ80MachinePlatform", "getToolForFilename_z80", "cpuStateToLongString_Z80", "sp", "start", "end", "disassembleZ80", "Base6809MachinePlatform", "getToolForFilename_6809", "cpuStateToLongString_6809", "CPU6809", "parentElement", "device", "lastop", "ev", "byteToASCII"] -} diff --git a/gen/chunk-U7I7I32A.js b/gen/chunk-BTBOTRE5.js similarity index 51% rename from gen/chunk-U7I7I32A.js rename to gen/chunk-BTBOTRE5.js index 0fefb9d4..90505ae8 100644 --- a/gen/chunk-U7I7I32A.js +++ b/gen/chunk-BTBOTRE5.js @@ -1,2 +1,2 @@ -import{M as b,N as w}from"./chunk-6VYEJCUW.js";import{d as E}from"./chunk-KT7KMEQC.js";var y=E((d,v)=>{(function(l,e){typeof define=="function"&&define.amd?define([],e):typeof d!="undefined"?e():(e(),l.FileSaver={})})(d,function(){"use strict";function l(t,r){return typeof r=="undefined"?r={autoBom:!1}:typeof r!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function e(t,r,c){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){h(a.response,r,c)},a.onerror=function(){console.error("could not download file")},a.send()}function n(t){var r=new XMLHttpRequest;r.open("HEAD",t,!1);try{r.send()}catch(c){}return 200<=r.status&&299>=r.status}function i(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(c){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}var o=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,u=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),h=o.saveAs||(typeof window!="object"||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(t,r,c){var a=o.URL||o.webkitURL,s=document.createElement("a");r=r||t.name||"download",s.download=r,s.rel="noopener",typeof t=="string"?(s.href=t,s.origin===location.origin?i(s):n(s.href)?e(t,r,c):i(s,s.target="_blank")):(s.href=a.createObjectURL(t),setTimeout(function(){a.revokeObjectURL(s.href)},4e4),setTimeout(function(){i(s)},0))}:"msSaveOrOpenBlob"in navigator?function(t,r,c){if(r=r||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(l(t,c),r);else if(n(t))e(t,r,c);else{var a=document.createElement("a");a.href=t,a.target="_blank",setTimeout(function(){i(a)})}}:function(t,r,c,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),typeof t=="string")return e(t,r,c);var s=t.type==="application/octet-stream",C=/constructor/i.test(o.HTMLElement)||o.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||s&&C||u)&&typeof FileReader!="undefined"){var p=new FileReader;p.onloadend=function(){var m=p.result;m=S?m:m.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=m:location=m,a=null},p.readAsDataURL(t)}else{var k=o.URL||o.webkitURL,f=k.createObjectURL(t);a?a.location=f:location.href=f,a=null,setTimeout(function(){k.revokeObjectURL(f)},4e4)}});o.saveAs=h.saveAs=h,typeof v!="undefined"&&(v.exports=h)})});var g=class{constructor(e){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=e}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var e={controls:this.platform.saveControlsState(),seed:b()},n=!1;return this.lastSeekFramethis.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(e){if(e<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var n=Math.floor(e/this.checkpointInterval),i=n0&&this.platform.advanceFrameClock&&(n=this.platform.advanceFrameClock(null,n)),this.lastSeekFrame=e,this.lastSeekStep=n,this.lastStepCount=u,e}else return-1}loadControls(e){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[e].controls),w(this.framerecs[e].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}};function R(l){switch(l){case"apple2":return import("./apple2-3C4ZD4DD.js");case"arm32":return import("./arm32-U7EXMUEA.js");case"astrocade":return import("./astrocade-ITZHTM4Y.js");case"atari7800":return import("./atari7800-T6BNM2VI.js");case"atari8":return import("./atari8-DU7XPQJE.js");case"basic":return import("./basic-XGBGD5OW.js");case"c64":return import("./c64-H2CM2FS7.js");case"channelf":return import("./channelf-MOCITAVQ.js");case"coleco":return import("./coleco-RHQHLZSE.js");case"cpc":return import("./cpc-TXA7FIB4.js");case"devel":return import("./devel-4WJUF4VD.js");case"exidy":return import("./exidy-TFB6WKCV.js");case"galaxian":return import("./galaxian-GTJTYJ6I.js");case"gb":return import("./gb-OB2F7RFY.js");case"gameboy":return import("./gb-OB2F7RFY.js");case"kim1":return import("./kim1-WE2TURKH.js");case"markdown":return import("./markdown-JUOLLYEJ.js");case"mcr":return import("./mcr-Y6VNGK3T.js");case"msx":return import("./msx-KK2WRGON.js");case"mw8080bw":return import("./mw8080bw-ZESED2JK.js");case"nes":return import("./nes-EZ37ZSE3.js");case"pce":return import("./pce-PXRVFOXD.js");case"sms":return import("./sms-JUCQOPAZ.js");case"sound_konami":return import("./sound_konami-FV7XJRMS.js");case"sound_williams":return import("./sound_williams-4TVU4BIE.js");case"vcs":return import("./vcs-HUQNPOYZ.js");case"vector":return import("./vector-7BC6UGME.js");case"vectrex":return import("./vectrex-VTNUN3WR.js");case"verilog":return import("./verilog-T2AE2B26.js");case"vic20":return import("./vic20-ZQSW5TXL.js");case"vicdual":return import("./vicdual-AHKYFKIL.js");case"williams":return import("./williams-ZGG7MJFE.js");case"x86":return import("./x86-NL7ISPMM.js");case"zmachine":return import("./zmachine-OIKG5ACZ.js");case"zx":return import("./zx-M62LZARP.js");default:throw new Error(`Platform not recognized: '${l}'`)}}export{g as a,R as b,y as c}; -//# sourceMappingURL=chunk-U7I7I32A.js.map +import{M as b,N as w}from"./chunk-6VYEJCUW.js";import{d as E}from"./chunk-KT7KMEQC.js";var y=E((d,v)=>{(function(l,e){typeof define=="function"&&define.amd?define([],e):typeof d!="undefined"?e():(e(),l.FileSaver={})})(d,function(){"use strict";function l(t,r){return typeof r=="undefined"?r={autoBom:!1}:typeof r!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function e(t,r,c){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){h(a.response,r,c)},a.onerror=function(){console.error("could not download file")},a.send()}function o(t){var r=new XMLHttpRequest;r.open("HEAD",t,!1);try{r.send()}catch(c){}return 200<=r.status&&299>=r.status}function i(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(c){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}var n=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,u=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),h=n.saveAs||(typeof window!="object"||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(t,r,c){var a=n.URL||n.webkitURL,s=document.createElement("a");r=r||t.name||"download",s.download=r,s.rel="noopener",typeof t=="string"?(s.href=t,s.origin===location.origin?i(s):o(s.href)?e(t,r,c):i(s,s.target="_blank")):(s.href=a.createObjectURL(t),setTimeout(function(){a.revokeObjectURL(s.href)},4e4),setTimeout(function(){i(s)},0))}:"msSaveOrOpenBlob"in navigator?function(t,r,c){if(r=r||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(l(t,c),r);else if(o(t))e(t,r,c);else{var a=document.createElement("a");a.href=t,a.target="_blank",setTimeout(function(){i(a)})}}:function(t,r,c,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),typeof t=="string")return e(t,r,c);var s=t.type==="application/octet-stream",C=/constructor/i.test(n.HTMLElement)||n.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||s&&C||u)&&typeof FileReader!="undefined"){var p=new FileReader;p.onloadend=function(){var m=p.result;m=S?m:m.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=m:location=m,a=null},p.readAsDataURL(t)}else{var k=n.URL||n.webkitURL,f=k.createObjectURL(t);a?a.location=f:location.href=f,a=null,setTimeout(function(){k.revokeObjectURL(f)},4e4)}});n.saveAs=h.saveAs=h,typeof v!="undefined"&&(v.exports=h)})});var g=class{constructor(e){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=e}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var e={controls:this.platform.saveControlsState(),seed:b()},o=!1;return this.lastSeekFramethis.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(e){if(e<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var o=Math.floor(e/this.checkpointInterval),i=o0&&this.platform.advanceFrameClock&&(o=this.platform.advanceFrameClock(null,o)),this.lastSeekFrame=e,this.lastSeekStep=o,this.lastStepCount=u,e}else return-1}loadControls(e){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[e].controls),w(this.framerecs[e].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}};function R(l){switch(l){case"apple2":return import("./apple2-HVOUE76T.js");case"arm32":return import("./arm32-76TZ4DV5.js");case"astrocade":return import("./astrocade-NBGSY4P4.js");case"atari7800":return import("./atari7800-5BAGYBIM.js");case"atari8":return import("./atari8-6EBS324Z.js");case"basic":return import("./basic-EY4OCRYP.js");case"c64":return import("./c64-FN5YNE7L.js");case"channelf":return import("./channelf-DZ5A4LWS.js");case"coleco":return import("./coleco-4PB36NHZ.js");case"cpc":return import("./cpc-Y44TL4FY.js");case"devel":return import("./devel-SIVB5T3X.js");case"exidy":return import("./exidy-77ACASMP.js");case"galaxian":return import("./galaxian-4WLZAHO6.js");case"gb":return import("./gb-XOSCWAWO.js");case"gameboy":return import("./gb-XOSCWAWO.js");case"kim1":return import("./kim1-VGXWVWRK.js");case"markdown":return import("./markdown-JUOLLYEJ.js");case"mcr":return import("./mcr-DG2L33BL.js");case"msx":return import("./msx-W5SMSRNA.js");case"mw8080bw":return import("./mw8080bw-6ILEQ3AW.js");case"nes":return import("./nes-RPMNUAAT.js");case"pacman":return import("./pacman-EU7X4F3T.js");case"pce":return import("./pce-YYJRYMWW.js");case"sms":return import("./sms-Q3XM6C3I.js");case"sound_konami":return import("./sound_konami-GPESK7AJ.js");case"sound_williams":return import("./sound_williams-VSSYU4EM.js");case"vcs":return import("./vcs-4SA3IVXY.js");case"vector":return import("./vector-CV5GG74M.js");case"vectrex":return import("./vectrex-PWJNIMVL.js");case"verilog":return import("./verilog-CYCIAEBW.js");case"vic20":return import("./vic20-4WWR3DY7.js");case"vicdual":return import("./vicdual-CWRFDQFT.js");case"williams":return import("./williams-XY7FQ6WN.js");case"x86":return import("./x86-NL7ISPMM.js");case"zmachine":return import("./zmachine-BWL2K4LK.js");case"zx":return import("./zx-KYUJXAXE.js");default:throw new Error(`Platform not recognized: '${l}'`)}}export{g as a,R as b,y as c}; +//# sourceMappingURL=chunk-BTBOTRE5.js.map diff --git a/gen/chunk-U7I7I32A.js.map b/gen/chunk-BTBOTRE5.js.map similarity index 91% rename from gen/chunk-U7I7I32A.js.map rename to gen/chunk-BTBOTRE5.js.map index 324ff612..2eb74ed6 100644 --- a/gen/chunk-U7I7I32A.js.map +++ b/gen/chunk-BTBOTRE5.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/file-saver/src/FileSaver.js", "../src/common/recorder.ts", "../src/platform/_index.ts"], - "sourcesContent": ["/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n", "\nimport { Platform, EmuState, EmuControlsState, EmuRecorder } from \"./baseplatform\";\nimport { getNoiseSeed, setNoiseSeed } from \"./emu\";\n\n// RECORDER\n\ntype FrameRec = {controls:EmuControlsState, seed:number};\n\nexport class StateRecorderImpl implements EmuRecorder {\n \n checkpointInterval : number = 10;\n callbackStateChanged : () => void;\n callbackNewCheckpoint : (state:EmuState) => void;\n maxCheckpoints : number = 300;\n \n platform : Platform;\n checkpoints : EmuState[];\n framerecs : FrameRec[];\n frameCount : number;\n lastSeekFrame : number;\n lastSeekStep : number;\n lastStepCount : number;\n \n constructor(platform : Platform) {\n this.reset();\n this.platform = platform;\n }\n\n reset() {\n this.checkpoints = [];\n this.framerecs = [];\n this.frameCount = 0;\n this.lastSeekFrame = 0;\n this.lastSeekStep = 0;\n this.lastStepCount = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n\n frameRequested() : boolean {\n var controls = {\n controls:this.platform.saveControlsState(),\n seed:getNoiseSeed()\n };\n var requested = false;\n // are we replaying? then we don't need to save a frame, just replace controls\n if (this.lastSeekFrame < this.frameCount) {\n this.loadControls(this.lastSeekFrame);\n } else {\n // record the control state, if available\n if (this.platform.saveControlsState) {\n this.framerecs.push(controls);\n }\n // time to save next frame?\n requested = (this.frameCount++ % this.checkpointInterval) == 0;\n }\n this.lastSeekFrame++;\n this.lastSeekStep = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n return requested;\n }\n \n numFrames() : number {\n return this.frameCount;\n }\n \n currentFrame() : number {\n return this.lastSeekFrame;\n }\n\n currentStep() : number {\n return this.lastSeekStep;\n }\n\n recordFrame(state : EmuState) {\n this.checkpoints.push(state);\n if (this.callbackNewCheckpoint) this.callbackNewCheckpoint(state);\n // checkpoints full?\n if (this.checkpoints.length > this.maxCheckpoints) {\n this.checkpoints.shift(); // remove 1st checkpoint\n this.framerecs = this.framerecs.slice(this.checkpointInterval);\n this.lastSeekFrame -= this.checkpointInterval;\n this.frameCount -= this.checkpointInterval;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n }\n\n getStateAtOrBefore(frame : number) : {frame : number, state : EmuState} {\n // initial frame?\n if (frame <= 0 && this.checkpoints.length > 0)\n return {frame:0, state:this.checkpoints[0]};\n\n var bufidx = Math.floor(frame / this.checkpointInterval);\n var foundidx = bufidx < this.checkpoints.length ? bufidx : this.checkpoints.length-1;\n var foundframe = foundidx * this.checkpointInterval;\n return {frame:foundframe, state:this.checkpoints[foundidx]};\n }\n\n loadFrame(seekframe : number, seekstep? : number) : number {\n seekframe |= 0;\n seekstep |= 0;\n if (seekframe == this.lastSeekFrame && seekstep == this.lastSeekStep) {\n return seekframe; // already set to this frame\n }\n // TODO: what if < 1?\n let {frame,state} = this.getStateAtOrBefore(seekframe-1);\n if (state) {\n var numSteps = 0;\n this.platform.pause();\n this.platform.loadState(state);\n // seek to frame index\n while (frame < seekframe) {\n if (frame < this.framerecs.length) {\n this.loadControls(frame);\n }\n frame++;\n numSteps = this.platform.advance(frame < seekframe); // TODO: infinite loop?\n }\n // TODO: if first frame, we must figure out # of steps\n if (frame == 0) {\n numSteps = this.platform.advance(true);\n this.platform.loadState(state);\n }\n // seek to step index\n // TODO: what if advance() returns clocks, but steps use insns?\n if (seekstep > 0 && this.platform.advanceFrameClock) { \n seekstep = this.platform.advanceFrameClock(null, seekstep);\n }\n // record new values\n this.lastSeekFrame = seekframe;\n this.lastSeekStep = seekstep;\n this.lastStepCount = numSteps;\n return seekframe;\n } else {\n return -1;\n }\n }\n \n loadControls(frame : number) {\n if (this.platform.loadControlsState)\n this.platform.loadControlsState(this.framerecs[frame].controls);\n setNoiseSeed(this.framerecs[frame].seed);\n }\n \n getLastCheckpoint() : EmuState {\n return this.checkpoints.length && this.checkpoints[this.checkpoints.length-1];\n }\n}\n\n", "// hard-code platform files for esbuild code-splitting\n\nexport function importPlatform(name: string) : Promise {\n switch (name) {\n case \"apple2\": return import(\"../platform/apple2\");\n case \"arm32\": return import(\"../platform/arm32\");\n case \"astrocade\": return import(\"../platform/astrocade\");\n case \"atari7800\": return import(\"../platform/atari7800\");\n case \"atari8\": return import(\"../platform/atari8\");\n case \"basic\": return import(\"../platform/basic\");\n case \"c64\": return import(\"../platform/c64\");\n case \"channelf\": return import(\"../platform/channelf\");\n case \"coleco\": return import(\"../platform/coleco\");\n case \"cpc\": return import(\"../platform/cpc\");\n case \"devel\": return import(\"../platform/devel\");\n case \"exidy\": return import(\"../platform/exidy\");\n case \"galaxian\": return import(\"../platform/galaxian\");\n case \"gb\": return import(\"../platform/gb\");\n case \"gameboy\": return import(\"../platform/gb\");\n case \"kim1\": return import(\"../platform/kim1\");\n case \"markdown\": return import(\"../platform/markdown\");\n case \"mcr\": return import(\"../platform/mcr\");\n case \"msx\": return import(\"../platform/msx\");\n case \"mw8080bw\": return import(\"../platform/mw8080bw\");\n case \"nes\": return import(\"../platform/nes\");\n case \"pce\": return import(\"../platform/pce\");\n case \"sms\": return import(\"../platform/sms\");\n case \"sound_konami\": return import(\"../platform/sound_konami\");\n case \"sound_williams\": return import(\"../platform/sound_williams\");\n case \"vcs\": return import(\"../platform/vcs\");\n case \"vector\": return import(\"../platform/vector\");\n case \"vectrex\": return import(\"../platform/vectrex\");\n case \"verilog\": return import(\"../platform/verilog\");\n case \"vic20\": return import(\"../platform/vic20\");\n case \"vicdual\": return import(\"../platform/vicdual\");\n case \"williams\": return import(\"../platform/williams\");\n case \"x86\": return import(\"../platform/x86\");\n case \"zmachine\": return import(\"../platform/zmachine\");\n case \"zx\": return import(\"../platform/zx\");\n default: throw new Error(`Platform not recognized: '${name}'`)\n }\n }\n \n "], - "mappings": "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", + "sourcesContent": ["/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n", "\nimport { Platform, EmuState, EmuControlsState, EmuRecorder } from \"./baseplatform\";\nimport { getNoiseSeed, setNoiseSeed } from \"./emu\";\n\n// RECORDER\n\ntype FrameRec = {controls:EmuControlsState, seed:number};\n\nexport class StateRecorderImpl implements EmuRecorder {\n \n checkpointInterval : number = 10;\n callbackStateChanged : () => void;\n callbackNewCheckpoint : (state:EmuState) => void;\n maxCheckpoints : number = 300;\n \n platform : Platform;\n checkpoints : EmuState[];\n framerecs : FrameRec[];\n frameCount : number;\n lastSeekFrame : number;\n lastSeekStep : number;\n lastStepCount : number;\n \n constructor(platform : Platform) {\n this.reset();\n this.platform = platform;\n }\n\n reset() {\n this.checkpoints = [];\n this.framerecs = [];\n this.frameCount = 0;\n this.lastSeekFrame = 0;\n this.lastSeekStep = 0;\n this.lastStepCount = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n\n frameRequested() : boolean {\n var controls = {\n controls:this.platform.saveControlsState(),\n seed:getNoiseSeed()\n };\n var requested = false;\n // are we replaying? then we don't need to save a frame, just replace controls\n if (this.lastSeekFrame < this.frameCount) {\n this.loadControls(this.lastSeekFrame);\n } else {\n // record the control state, if available\n if (this.platform.saveControlsState) {\n this.framerecs.push(controls);\n }\n // time to save next frame?\n requested = (this.frameCount++ % this.checkpointInterval) == 0;\n }\n this.lastSeekFrame++;\n this.lastSeekStep = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n return requested;\n }\n \n numFrames() : number {\n return this.frameCount;\n }\n \n currentFrame() : number {\n return this.lastSeekFrame;\n }\n\n currentStep() : number {\n return this.lastSeekStep;\n }\n\n recordFrame(state : EmuState) {\n this.checkpoints.push(state);\n if (this.callbackNewCheckpoint) this.callbackNewCheckpoint(state);\n // checkpoints full?\n if (this.checkpoints.length > this.maxCheckpoints) {\n this.checkpoints.shift(); // remove 1st checkpoint\n this.framerecs = this.framerecs.slice(this.checkpointInterval);\n this.lastSeekFrame -= this.checkpointInterval;\n this.frameCount -= this.checkpointInterval;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n }\n\n getStateAtOrBefore(frame : number) : {frame : number, state : EmuState} {\n // initial frame?\n if (frame <= 0 && this.checkpoints.length > 0)\n return {frame:0, state:this.checkpoints[0]};\n\n var bufidx = Math.floor(frame / this.checkpointInterval);\n var foundidx = bufidx < this.checkpoints.length ? bufidx : this.checkpoints.length-1;\n var foundframe = foundidx * this.checkpointInterval;\n return {frame:foundframe, state:this.checkpoints[foundidx]};\n }\n\n loadFrame(seekframe : number, seekstep? : number) : number {\n seekframe |= 0;\n seekstep |= 0;\n if (seekframe == this.lastSeekFrame && seekstep == this.lastSeekStep) {\n return seekframe; // already set to this frame\n }\n // TODO: what if < 1?\n let {frame,state} = this.getStateAtOrBefore(seekframe-1);\n if (state) {\n var numSteps = 0;\n this.platform.pause();\n this.platform.loadState(state);\n // seek to frame index\n while (frame < seekframe) {\n if (frame < this.framerecs.length) {\n this.loadControls(frame);\n }\n frame++;\n numSteps = this.platform.advance(frame < seekframe); // TODO: infinite loop?\n }\n // TODO: if first frame, we must figure out # of steps\n if (frame == 0) {\n numSteps = this.platform.advance(true);\n this.platform.loadState(state);\n }\n // seek to step index\n // TODO: what if advance() returns clocks, but steps use insns?\n if (seekstep > 0 && this.platform.advanceFrameClock) { \n seekstep = this.platform.advanceFrameClock(null, seekstep);\n }\n // record new values\n this.lastSeekFrame = seekframe;\n this.lastSeekStep = seekstep;\n this.lastStepCount = numSteps;\n return seekframe;\n } else {\n return -1;\n }\n }\n \n loadControls(frame : number) {\n if (this.platform.loadControlsState)\n this.platform.loadControlsState(this.framerecs[frame].controls);\n setNoiseSeed(this.framerecs[frame].seed);\n }\n \n getLastCheckpoint() : EmuState {\n return this.checkpoints.length && this.checkpoints[this.checkpoints.length-1];\n }\n}\n\n", "// hard-code platform files for esbuild code-splitting\n\nexport function importPlatform(name: string) : Promise {\n switch (name) {\n case \"apple2\": return import(\"../platform/apple2\");\n case \"arm32\": return import(\"../platform/arm32\");\n case \"astrocade\": return import(\"../platform/astrocade\");\n case \"atari7800\": return import(\"../platform/atari7800\");\n case \"atari8\": return import(\"../platform/atari8\");\n case \"basic\": return import(\"../platform/basic\");\n case \"c64\": return import(\"../platform/c64\");\n case \"channelf\": return import(\"../platform/channelf\");\n case \"coleco\": return import(\"../platform/coleco\");\n case \"cpc\": return import(\"../platform/cpc\");\n case \"devel\": return import(\"../platform/devel\");\n case \"exidy\": return import(\"../platform/exidy\");\n case \"galaxian\": return import(\"../platform/galaxian\");\n case \"gb\": return import(\"../platform/gb\");\n case \"gameboy\": return import(\"../platform/gb\");\n case \"kim1\": return import(\"../platform/kim1\");\n case \"markdown\": return import(\"../platform/markdown\");\n case \"mcr\": return import(\"../platform/mcr\");\n case \"msx\": return import(\"../platform/msx\");\n case \"mw8080bw\": return import(\"../platform/mw8080bw\");\n case \"nes\": return import(\"../platform/nes\");\n case \"pacman\": return import(\"../platform/pacman\");\n case \"pce\": return import(\"../platform/pce\");\n case \"sms\": return import(\"../platform/sms\");\n case \"sound_konami\": return import(\"../platform/sound_konami\");\n case \"sound_williams\": return import(\"../platform/sound_williams\");\n case \"vcs\": return import(\"../platform/vcs\");\n case \"vector\": return import(\"../platform/vector\");\n case \"vectrex\": return import(\"../platform/vectrex\");\n case \"verilog\": return import(\"../platform/verilog\");\n case \"vic20\": return import(\"../platform/vic20\");\n case \"vicdual\": return import(\"../platform/vicdual\");\n case \"williams\": return import(\"../platform/williams\");\n case \"x86\": return import(\"../platform/x86\");\n case \"zmachine\": return import(\"../platform/zmachine\");\n case \"zx\": return import(\"../platform/zx\");\n default: throw new Error(`Platform not recognized: '${name}'`)\n }\n }\n \n "], + "mappings": "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", "names": ["b", "a", "c", "d", "g", "e", "f", "h", "i", "j", "k", "l", "m", "module", "StateRecorderImpl", "platform", "controls", "getNoiseSeed", "requested", "state", "frame", "bufidx", "foundidx", "foundframe", "seekframe", "seekstep", "numSteps", "setNoiseSeed", "importPlatform", "name"] } diff --git a/gen/chunk-NYNEYYCH.js b/gen/chunk-ELQXSR5S.js similarity index 98% rename from gen/chunk-NYNEYYCH.js rename to gen/chunk-ELQXSR5S.js index 97950641..e13979e0 100644 --- a/gen/chunk-NYNEYYCH.js +++ b/gen/chunk-ELQXSR5S.js @@ -1,4 +1,4 @@ -import{B as w,a as b,b as v,z as P}from"./chunk-BDSSD4L3.js";import{P as S,S as p,U as C}from"./chunk-6VYEJCUW.js";var o=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new C(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,n=this.romdata=this.romdata||e.romdata||new p(e.romsize).mem,g=this.romtype=this.romtype||e.romtype,a=this.video=new S(this.mainElement,e.width,e.height);a.create(),$(a.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",a.canvas.width+"x"+a.canvas.height];r&&u.push("-"+g,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:a.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:a.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,n,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(a.canvas).click(i=>{a.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,m=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),m.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else m.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,m,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"] +import{B as w,a as b,b as v,z as P}from"./chunk-V66UDXZ2.js";import{P as S,S as p,U as C}from"./chunk-6VYEJCUW.js";var o=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new C(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,n=this.romdata=this.romdata||e.romdata||new p(e.romsize).mem,g=this.romtype=this.romtype||e.romtype,a=this.video=new S(this.mainElement,e.width,e.height);a.create(),$(a.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",a.canvas.width+"x"+a.canvas.height];r&&u.push("-"+g,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:a.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:a.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,n,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(a.canvas).click(i=>{a.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,m=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),m.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else m.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,m,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"] `,n=0;n{(function(i){if(typeof Vg=="object"&&typeof Yu!="undefined")Yu.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(f,O){if(!s[f]){if(!n[f]){var m=typeof ma=="function"&&ma;if(!O&&m)return m(f,!0);if(l)return l(f,!0);var b=new Error("Cannot find module '"+f+"'");throw b.code="MODULE_NOT_FOUND",b}var y=s[f]={exports:{}};n[f][0].call(y.exports,function(P){var X=n[f][1][P];return a(X||P)},y,y.exports,r,n,s,o)}return s[f].exports}for(var l=typeof ma=="function"&&ma,h=0;h=43)}}).catch(function(){return!1})}function ue(w){return typeof G=="boolean"?m.resolve(G):F(w).then(function(C){return G=C,G})}function Ae(w){var C=q[w.name],k={};k.promise=new m(function(U,M){k.resolve=U,k.reject=M}),C.deferredOperations.push(k),C.dbReady?C.dbReady=C.dbReady.then(function(){return k.promise}):C.dbReady=k.promise}function me(w){var C=q[w.name],k=C.deferredOperations.pop();if(k)return k.resolve(),k.promise}function ie(w,C){var k=q[w.name],U=k.deferredOperations.pop();if(U)return U.reject(C),U.promise}function Te(w,C){return new m(function(k,U){if(q[w.name]=q[w.name]||st(),w.db)if(C)Ae(w),w.db.close();else return k(w.db);var M=[w.name];C&&M.push(w.version);var Z=h.open.apply(h,M);C&&(Z.onupgradeneeded=function(H){var re=Z.result;try{re.createObjectStore(w.storeName),H.oldVersion<=1&&re.createObjectStore(E)}catch(le){if(le.name==="ConstraintError")console.warn('The database "'+w.name+'" has been upgraded from version '+H.oldVersion+" to version "+H.newVersion+', but the storage "'+w.storeName+'" already exists.');else throw le}}),Z.onerror=function(H){H.preventDefault(),U(Z.error)},Z.onsuccess=function(){var H=Z.result;H.onversionchange=function(re){re.target.close()},k(H),me(w)}})}function Ze(w){return Te(w,!1)}function Be(w){return Te(w,!0)}function te(w,C){if(!w.db)return!0;var k=!w.db.objectStoreNames.contains(w.storeName),U=w.versionw.db.version;if(U&&(w.version!==C&&console.warn('The database "'+w.name+`" can't be downgraded from version `+w.db.version+" to version "+w.version+"."),w.version=w.db.version),M||k){if(k){var Z=w.db.version+1;Z>w.version&&(w.version=Z)}return!0}return!1}function ye(w){return new m(function(C,k){var U=new FileReader;U.onerror=k,U.onloadend=function(M){var Z=btoa(M.target.result||"");C({__local_forage_encoded_blob:!0,data:Z,type:w.type})},U.readAsBinaryString(w)})}function ce(w){var C=j(atob(w.data));return O([C],{type:w.type})}function Me(w){return w&&w.__local_forage_encoded_blob}function je(w){var C=this,k=C._initReady().then(function(){var U=q[C._dbInfo.name];if(U&&U.dbReady)return U.dbReady});return y(k,w,w),k}function We(w){Ae(w);for(var C=q[w.name],k=C.forages,U=0;U0&&(!w.db||Z.name==="InvalidStateError"||Z.name==="NotFoundError"))return m.resolve().then(function(){if(!w.db||Z.name==="NotFoundError"&&!w.db.objectStoreNames.contains(w.storeName)&&w.version<=w.db.version)return w.db&&(w.version=w.db.version+1),Be(w)}).then(function(){return We(w).then(function(){pt(w,C,k,U-1)})}).catch(k);k(Z)}}function st(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Ai(w){var C=this,k={db:null};if(w)for(var U in w)k[U]=w[U];var M=q[k.name];M||(M=st(),q[k.name]=M),M.forages.push(C),C._initReady||(C._initReady=C.ready,C.ready=je);var Z=[];function H(){return m.resolve()}for(var re=0;re>4,se[M++]=(H&15)<<4|re>>2,se[M++]=(re&3)<<6|le&63;return he}function Si(w){var C=new Uint8Array(w),k="",U;for(U=0;U>2],k+=Jt[(C[U]&3)<<4|C[U+1]>>4],k+=Jt[(C[U+1]&15)<<2|C[U+2]>>6],k+=Jt[C[U+2]&63];return C.length%3===2?k=k.substring(0,k.length-1)+"=":C.length%3===1&&(k=k.substring(0,k.length-2)+"=="),k}function Gi(w,C){var k="";if(w&&(k=bi.call(w)),w&&(k==="[object ArrayBuffer]"||w.buffer&&bi.call(w.buffer)==="[object ArrayBuffer]")){var U,M=Cr;w instanceof ArrayBuffer?(U=w,M+=ei):(U=w.buffer,k==="[object Int8Array]"?M+=tn:k==="[object Uint8Array]"?M+=we:k==="[object Uint8ClampedArray]"?M+=_t:k==="[object Int16Array]"?M+=Ar:k==="[object Uint16Array]"?M+=Wn:k==="[object Int32Array]"?M+=mi:k==="[object Uint32Array]"?M+=qn:k==="[object Float32Array]"?M+=jn:k==="[object Float64Array]"?M+=ar:C(new Error("Failed to get type for BinaryArray"))),C(M+Si(U))}else if(k==="[object Blob]"){var Z=new FileReader;Z.onload=function(){var H=pi+w.type+"~"+Si(this.result);C(Cr+or+H)},Z.readAsArrayBuffer(w)}else try{C(JSON.stringify(w))}catch(H){console.error("Couldn't convert value into a JSON string: ",w),C(null,H)}}function In(w){if(w.substring(0,en)!==Cr)return JSON.parse(w);var C=w.substring(gi),k=w.substring(en,gi),U;if(k===or&&Rr.test(C)){var M=C.match(Rr);U=M[1],C=C.substring(M[0].length)}var Z=Yi(C);switch(k){case ei:return Z;case or:return O([Z],{type:U});case tn:return new Int8Array(Z);case we:return new Uint8Array(Z);case _t:return new Uint8ClampedArray(Z);case Ar:return new Int16Array(Z);case Wn:return new Uint16Array(Z);case mi:return new Int32Array(Z);case qn:return new Uint32Array(Z);case jn:return new Float32Array(Z);case ar:return new Float64Array(Z);default:throw new Error("Unkown type: "+k)}}var rn={serialize:Gi,deserialize:In,stringToBuffer:Yi,bufferToString:Si};function So(w,C,k,U){w.executeSql("CREATE TABLE IF NOT EXISTS "+C.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],k,U)}function Fi(w){var C=this,k={db:null};if(w)for(var U in w)k[U]=typeof w[U]!="string"?w[U].toString():w[U];var M=new m(function(Z,H){try{k.db=openDatabase(k.name,String(k.version),k.description,k.size)}catch(re){return H(re)}k.db.transaction(function(re){So(re,k,function(){C._dbInfo=k,Z()},function(le,he){H(he)})},H)});return k.serializer=rn,M}function Wt(w,C,k,U,M,Z){w.executeSql(k,U,M,function(H,re){re.code===re.SYNTAX_ERR?H.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[C.storeName],function(le,he){he.rows.length?Z(le,re):So(le,C,function(){le.executeSql(k,U,M,Z)},Z)},Z):Z(H,re)},Z)}function vo(w,C){var k=this;w=P(w);var U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"SELECT * FROM "+H.storeName+" WHERE key = ? LIMIT 1",[w],function(le,he){var se=he.rows.length?he.rows.item(0).value:null;se&&(se=H.serializer.deserialize(se)),M(se)},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function nn(w,C){var k=this,U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"SELECT * FROM "+H.storeName,[],function(le,he){for(var se=he.rows,$e=se.length,qe=0;qe<$e;qe++){var ut=se.item(qe),Ot=ut.value;if(Ot&&(Ot=H.serializer.deserialize(Ot)),Ot=w(Ot,ut.key,qe+1),Ot!==void 0){M(Ot);return}}M()},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function ti(w,C,k,U){var M=this;w=P(w);var Z=new m(function(H,re){M.ready().then(function(){C===void 0&&(C=null);var le=C,he=M._dbInfo;he.serializer.serialize(C,function(se,$e){$e?re($e):he.db.transaction(function(qe){Wt(qe,he,"INSERT OR REPLACE INTO "+he.storeName+" (key, value) VALUES (?, ?)",[w,se],function(){H(le)},function(ut,Ot){re(Ot)})},function(qe){if(qe.code===qe.QUOTA_ERR){if(U>0){H(ti.apply(M,[w,le,k,U-1]));return}re(qe)}})})}).catch(re)});return b(Z,k),Z}function Gt(w,C,k){return ti.apply(this,[w,C,k,1])}function kt(w,C){var k=this;w=P(w);var U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"DELETE FROM "+H.storeName+" WHERE key = ?",[w],function(){M()},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function sn(w){var C=this,k=new m(function(U,M){C.ready().then(function(){var Z=C._dbInfo;Z.db.transaction(function(H){Wt(H,Z,"DELETE FROM "+Z.storeName,[],function(){U()},function(re,le){M(le)})})}).catch(M)});return b(k,w),k}function yo(w){var C=this,k=new m(function(U,M){C.ready().then(function(){var Z=C._dbInfo;Z.db.transaction(function(H){Wt(H,Z,"SELECT COUNT(key) as c FROM "+Z.storeName,[],function(re,le){var he=le.rows.item(0).c;U(he)},function(re,le){M(le)})})}).catch(M)});return b(k,w),k}function ws(w,C){var k=this,U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"SELECT key FROM "+H.storeName+" WHERE id = ? LIMIT 1",[w+1],function(le,he){var se=he.rows.length?he.rows.item(0).key:null;M(se)},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function lr(w){var C=this,k=new m(function(U,M){C.ready().then(function(){var Z=C._dbInfo;Z.db.transaction(function(H){Wt(H,Z,"SELECT key FROM "+Z.storeName,[],function(re,le){for(var he=[],se=0;se '__WebKitDatabaseInfoTable__'",[],function(M,Z){for(var H=[],re=0;re0}function Ps(w){var C=this,k={};if(w)for(var U in w)k[U]=w[U];return k.keyPrefix=cr(w,C._defaultConfig),$s()?(C._dbInfo=k,k.serializer=rn,m.resolve()):m.reject()}function Qo(w){var C=this,k=C.ready().then(function(){for(var U=C._dbInfo.keyPrefix,M=localStorage.length-1;M>=0;M--){var Z=localStorage.key(M);Z.indexOf(U)===0&&localStorage.removeItem(Z)}});return b(k,w),k}function Ui(w,C){var k=this;w=P(w);var U=k.ready().then(function(){var M=k._dbInfo,Z=localStorage.getItem(M.keyPrefix+w);return Z&&(Z=M.serializer.deserialize(Z)),Z});return b(U,C),U}function wo(w,C){var k=this,U=k.ready().then(function(){for(var M=k._dbInfo,Z=M.keyPrefix,H=Z.length,re=localStorage.length,le=1,he=0;he=0;H--){var re=localStorage.key(H);re.indexOf(Z)===0&&localStorage.removeItem(re)}}):M=m.reject("Invalid arguments"),b(M,C),M}var ae={_driver:"localStorageWrapper",_initStorage:Ps,_support:Zi(),iterate:wo,getItem:Ui,setItem:ke,removeItem:Ts,clear:Qo,length:Gn,key:Yr,keys:ks,dropInstance:A},xe=function(C,k){return C===k||typeof C=="number"&&typeof k=="number"&&isNaN(C)&&isNaN(k)},mt=function(C,k){for(var U=C.length,M=0;M{(function(i,e){"use strict";typeof Kf=="object"&&typeof Kf.exports=="object"?Kf.exports=i.document?e(i,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(i)})(typeof window!="undefined"?window:Iw,function(i,e){"use strict";var t=[],r=Object.getPrototypeOf,n=t.slice,s=t.flat?function(c){return t.flat.call(c)}:function(c){return t.concat.apply([],c)},o=t.push,a=t.indexOf,l={},h=l.toString,f=l.hasOwnProperty,O=f.toString,m=O.call(Object),b={},y=function(u){return typeof u=="function"&&typeof u.nodeType!="number"&&typeof u.item!="function"},P=function(u){return u!=null&&u===u.window},X=i.document,E={type:!0,src:!0,nonce:!0,noModule:!0};function G(c,u,p){p=p||X;var g,S,v=p.createElement("script");if(v.text=c,u)for(g in E)S=u[g]||u.getAttribute&&u.getAttribute(g),S&&v.setAttribute(g,S);p.head.appendChild(v).parentNode.removeChild(v)}function q(c){return c==null?c+"":typeof c=="object"||typeof c=="function"?l[h.call(c)]||"object":typeof c}var N="3.7.1",V=/HTML$/i,d=function(c,u){return new d.fn.init(c,u)};d.fn=d.prototype={jquery:N,constructor:d,length:0,toArray:function(){return n.call(this)},get:function(c){return c==null?n.call(this):c<0?this[c+this.length]:this[c]},pushStack:function(c){var u=d.merge(this.constructor(),c);return u.prevObject=this,u},each:function(c){return d.each(this,c)},map:function(c){return this.pushStack(d.map(this,function(u,p){return c.call(u,p,u)}))},slice:function(){return this.pushStack(n.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(d.grep(this,function(c,u){return(u+1)%2}))},odd:function(){return this.pushStack(d.grep(this,function(c,u){return u%2}))},eq:function(c){var u=this.length,p=+c+(c<0?u:0);return this.pushStack(p>=0&&p0&&u-1 in c}function F(c,u){return c.nodeName&&c.nodeName.toLowerCase()===u.toLowerCase()}var ue=t.pop,Ae=t.sort,me=t.splice,ie="[\\x20\\t\\r\\n\\f]",Te=new RegExp("^"+ie+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ie+"+$","g");d.contains=function(c,u){var p=u&&u.parentNode;return c===p||!!(p&&p.nodeType===1&&(c.contains?c.contains(p):c.compareDocumentPosition&&c.compareDocumentPosition(p)&16))};var Ze=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function Be(c,u){return u?c==="\0"?"\uFFFD":c.slice(0,-1)+"\\"+c.charCodeAt(c.length-1).toString(16)+" ":"\\"+c}d.escapeSelector=function(c){return(c+"").replace(Ze,Be)};var te=X,ye=o;(function(){var c,u,p,g,S,v=ye,Q,R,_,z,B,ee=d.expando,W=0,oe=0,Ve=ec(),ot=ec(),Ie=ec(),ii=ec(),qt=function(T,Y){return T===Y&&(S=!0),0},an="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ln="(?:\\\\[\\da-fA-F]{1,6}"+ie+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",et="\\["+ie+"*("+ln+")(?:"+ie+"*([*^$|!~]?=)"+ie+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+ln+"))|)"+ie+"*\\]",Es=":("+ln+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+et+")*)|.*)\\)|)",ct=new RegExp(ie+"+","g"),Yt=new RegExp("^"+ie+"*,"+ie+"*"),Oa=new RegExp("^"+ie+"*([>+~]|"+ie+")"+ie+"*"),bu=new RegExp(ie+"|>"),cn=new RegExp(Es),da=new RegExp("^"+ln+"$"),hn={ID:new RegExp("^#("+ln+")"),CLASS:new RegExp("^\\.("+ln+")"),TAG:new RegExp("^("+ln+"|[*])"),ATTR:new RegExp("^"+et),PSEUDO:new RegExp("^"+Es),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ie+"*(even|odd|(([+-]|)(\\d*)n|)"+ie+"*(?:([+-]|)"+ie+"*(\\d+)|))"+ie+"*\\)|)","i"),bool:new RegExp("^(?:"+an+")$","i"),needsContext:new RegExp("^"+ie+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ie+"*((?:-\\d)?\\d*)"+ie+"*\\)|)(?=[^-]|$)","i")},Fn=/^(?:input|select|textarea|button)$/i,Hn=/^h\d$/i,fr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Su=/[+~]/,Pn=new RegExp("\\\\[\\da-fA-F]{1,6}"+ie+"?|\\\\([^\\r\\n\\f])","g"),kn=function(T,Y){var D="0x"+T.slice(1)-65536;return Y||(D<0?String.fromCharCode(D+65536):String.fromCharCode(D>>10|55296,D&1023|56320))},q1=function(){Kn()},j1=ic(function(T){return T.disabled===!0&&F(T,"fieldset")},{dir:"parentNode",next:"legend"});function I1(){try{return Q.activeElement}catch(T){}}try{v.apply(t=n.call(te.childNodes),te.childNodes),t[te.childNodes.length].nodeType}catch(T){v={apply:function(Y,D){ye.apply(Y,n.call(D))},call:function(Y){ye.apply(Y,n.call(arguments,1))}}}function St(T,Y,D,I){var K,Oe,be,Xe,Se,He,ze,De=Y&&Y.ownerDocument,Ke=Y?Y.nodeType:9;if(D=D||[],typeof T!="string"||!T||Ke!==1&&Ke!==9&&Ke!==11)return D;if(!I&&(Kn(Y),Y=Y||Q,_)){if(Ke!==11&&(Se=fr.exec(T)))if(K=Se[1]){if(Ke===9)if(be=Y.getElementById(K)){if(be.id===K)return v.call(D,be),D}else return D;else if(De&&(be=De.getElementById(K))&&St.contains(Y,be)&&be.id===K)return v.call(D,be),D}else{if(Se[2])return v.apply(D,Y.getElementsByTagName(T)),D;if((K=Se[3])&&Y.getElementsByClassName)return v.apply(D,Y.getElementsByClassName(K)),D}if(!ii[T+" "]&&(!z||!z.test(T))){if(ze=T,De=Y,Ke===1&&(bu.test(T)||Oa.test(T))){for(De=Su.test(T)&&vu(Y.parentNode)||Y,(De!=Y||!b.scope)&&((Xe=Y.getAttribute("id"))?Xe=d.escapeSelector(Xe):Y.setAttribute("id",Xe=ee)),He=pa(T),Oe=He.length;Oe--;)He[Oe]=(Xe?"#"+Xe:":scope")+" "+tc(He[Oe]);ze=He.join(",")}try{return v.apply(D,De.querySelectorAll(ze)),D}catch(Ye){ii(T,!0)}finally{Xe===ee&&Y.removeAttribute("id")}}}return Xg(T.replace(Te,"$1"),Y,D,I)}function ec(){var T=[];function Y(D,I){return T.push(D+" ")>u.cacheLength&&delete Y[T.shift()],Y[D+" "]=I}return Y}function Zr(T){return T[ee]=!0,T}function $o(T){var Y=Q.createElement("fieldset");try{return!!T(Y)}catch(D){return!1}finally{Y.parentNode&&Y.parentNode.removeChild(Y),Y=null}}function N1(T){return function(Y){return F(Y,"input")&&Y.type===T}}function B1(T){return function(Y){return(F(Y,"input")||F(Y,"button"))&&Y.type===T}}function kg(T){return function(Y){return"form"in Y?Y.parentNode&&Y.disabled===!1?"label"in Y?"label"in Y.parentNode?Y.parentNode.disabled===T:Y.disabled===T:Y.isDisabled===T||Y.isDisabled!==!T&&j1(Y)===T:Y.disabled===T:"label"in Y?Y.disabled===T:!1}}function Ys(T){return Zr(function(Y){return Y=+Y,Zr(function(D,I){for(var K,Oe=T([],D.length,Y),be=Oe.length;be--;)D[K=Oe[be]]&&(D[K]=!(I[K]=D[K]))})})}function vu(T){return T&&typeof T.getElementsByTagName!="undefined"&&T}function Kn(T){var Y,D=T?T.ownerDocument||T:te;return D==Q||D.nodeType!==9||!D.documentElement||(Q=D,R=Q.documentElement,_=!d.isXMLDoc(Q),B=R.matches||R.webkitMatchesSelector||R.msMatchesSelector,R.msMatchesSelector&&te!=Q&&(Y=Q.defaultView)&&Y.top!==Y&&Y.addEventListener("unload",q1),b.getById=$o(function(I){return R.appendChild(I).id=d.expando,!Q.getElementsByName||!Q.getElementsByName(d.expando).length}),b.disconnectedMatch=$o(function(I){return B.call(I,"*")}),b.scope=$o(function(){return Q.querySelectorAll(":scope")}),b.cssHas=$o(function(){try{return Q.querySelector(":has(*,:jqfake)"),!1}catch(I){return!0}}),b.getById?(u.filter.ID=function(I){var K=I.replace(Pn,kn);return function(Oe){return Oe.getAttribute("id")===K}},u.find.ID=function(I,K){if(typeof K.getElementById!="undefined"&&_){var Oe=K.getElementById(I);return Oe?[Oe]:[]}}):(u.filter.ID=function(I){var K=I.replace(Pn,kn);return function(Oe){var be=typeof Oe.getAttributeNode!="undefined"&&Oe.getAttributeNode("id");return be&&be.value===K}},u.find.ID=function(I,K){if(typeof K.getElementById!="undefined"&&_){var Oe,be,Xe,Se=K.getElementById(I);if(Se){if(Oe=Se.getAttributeNode("id"),Oe&&Oe.value===I)return[Se];for(Xe=K.getElementsByName(I),be=0;Se=Xe[be++];)if(Oe=Se.getAttributeNode("id"),Oe&&Oe.value===I)return[Se]}return[]}}),u.find.TAG=function(I,K){return typeof K.getElementsByTagName!="undefined"?K.getElementsByTagName(I):K.querySelectorAll(I)},u.find.CLASS=function(I,K){if(typeof K.getElementsByClassName!="undefined"&&_)return K.getElementsByClassName(I)},z=[],$o(function(I){var K;R.appendChild(I).innerHTML="",I.querySelectorAll("[selected]").length||z.push("\\["+ie+"*(?:value|"+an+")"),I.querySelectorAll("[id~="+ee+"-]").length||z.push("~="),I.querySelectorAll("a#"+ee+"+*").length||z.push(".#.+[+~]"),I.querySelectorAll(":checked").length||z.push(":checked"),K=Q.createElement("input"),K.setAttribute("type","hidden"),I.appendChild(K).setAttribute("name","D"),R.appendChild(I).disabled=!0,I.querySelectorAll(":disabled").length!==2&&z.push(":enabled",":disabled"),K=Q.createElement("input"),K.setAttribute("name",""),I.appendChild(K),I.querySelectorAll("[name='']").length||z.push("\\["+ie+"*name"+ie+"*="+ie+`*(?:''|"")`)}),b.cssHas||z.push(":has"),z=z.length&&new RegExp(z.join("|")),qt=function(I,K){if(I===K)return S=!0,0;var Oe=!I.compareDocumentPosition-!K.compareDocumentPosition;return Oe||(Oe=(I.ownerDocument||I)==(K.ownerDocument||K)?I.compareDocumentPosition(K):1,Oe&1||!b.sortDetached&&K.compareDocumentPosition(I)===Oe?I===Q||I.ownerDocument==te&&St.contains(te,I)?-1:K===Q||K.ownerDocument==te&&St.contains(te,K)?1:g?a.call(g,I)-a.call(g,K):0:Oe&4?-1:1)}),Q}St.matches=function(T,Y){return St(T,null,null,Y)},St.matchesSelector=function(T,Y){if(Kn(T),_&&!ii[Y+" "]&&(!z||!z.test(Y)))try{var D=B.call(T,Y);if(D||b.disconnectedMatch||T.document&&T.document.nodeType!==11)return D}catch(I){ii(Y,!0)}return St(Y,Q,null,[T]).length>0},St.contains=function(T,Y){return(T.ownerDocument||T)!=Q&&Kn(T),d.contains(T,Y)},St.attr=function(T,Y){(T.ownerDocument||T)!=Q&&Kn(T);var D=u.attrHandle[Y.toLowerCase()],I=D&&f.call(u.attrHandle,Y.toLowerCase())?D(T,Y,!_):void 0;return I!==void 0?I:T.getAttribute(Y)},St.error=function(T){throw new Error("Syntax error, unrecognized expression: "+T)},d.uniqueSort=function(T){var Y,D=[],I=0,K=0;if(S=!b.sortStable,g=!b.sortStable&&n.call(T,0),Ae.call(T,qt),S){for(;Y=T[K++];)Y===T[K]&&(I=D.push(K));for(;I--;)me.call(T,D[I],1)}return g=null,T},d.fn.uniqueSort=function(){return this.pushStack(d.uniqueSort(n.apply(this)))},u=d.expr={cacheLength:50,createPseudo:Zr,match:hn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(T){return T[1]=T[1].replace(Pn,kn),T[3]=(T[3]||T[4]||T[5]||"").replace(Pn,kn),T[2]==="~="&&(T[3]=" "+T[3]+" "),T.slice(0,4)},CHILD:function(T){return T[1]=T[1].toLowerCase(),T[1].slice(0,3)==="nth"?(T[3]||St.error(T[0]),T[4]=+(T[4]?T[5]+(T[6]||1):2*(T[3]==="even"||T[3]==="odd")),T[5]=+(T[7]+T[8]||T[3]==="odd")):T[3]&&St.error(T[0]),T},PSEUDO:function(T){var Y,D=!T[6]&&T[2];return hn.CHILD.test(T[0])?null:(T[3]?T[2]=T[4]||T[5]||"":D&&cn.test(D)&&(Y=pa(D,!0))&&(Y=D.indexOf(")",D.length-Y)-D.length)&&(T[0]=T[0].slice(0,Y),T[2]=D.slice(0,Y)),T.slice(0,3))}},filter:{TAG:function(T){var Y=T.replace(Pn,kn).toLowerCase();return T==="*"?function(){return!0}:function(D){return F(D,Y)}},CLASS:function(T){var Y=Ve[T+" "];return Y||(Y=new RegExp("(^|"+ie+")"+T+"("+ie+"|$)"))&&Ve(T,function(D){return Y.test(typeof D.className=="string"&&D.className||typeof D.getAttribute!="undefined"&&D.getAttribute("class")||"")})},ATTR:function(T,Y,D){return function(I){var K=St.attr(I,T);return K==null?Y==="!=":Y?(K+="",Y==="="?K===D:Y==="!="?K!==D:Y==="^="?D&&K.indexOf(D)===0:Y==="*="?D&&K.indexOf(D)>-1:Y==="$="?D&&K.slice(-D.length)===D:Y==="~="?(" "+K.replace(ct," ")+" ").indexOf(D)>-1:Y==="|="?K===D||K.slice(0,D.length+1)===D+"-":!1):!0}},CHILD:function(T,Y,D,I,K){var Oe=T.slice(0,3)!=="nth",be=T.slice(-4)!=="last",Xe=Y==="of-type";return I===1&&K===0?function(Se){return!!Se.parentNode}:function(Se,He,ze){var De,Ke,Ye,$t,zi,li=Oe!==be?"nextSibling":"previousSibling",ur=Se.parentNode,fn=Xe&&Se.nodeName.toLowerCase(),Po=!ze&&!Xe,vi=!1;if(ur){if(Oe){for(;li;){for(Ye=Se;Ye=Ye[li];)if(Xe?F(Ye,fn):Ye.nodeType===1)return!1;zi=li=T==="only"&&!zi&&"nextSibling"}return!0}if(zi=[be?ur.firstChild:ur.lastChild],be&&Po){for(Ke=ur[ee]||(ur[ee]={}),De=Ke[T]||[],$t=De[0]===W&&De[1],vi=$t&&De[2],Ye=$t&&ur.childNodes[$t];Ye=++$t&&Ye&&Ye[li]||(vi=$t=0)||zi.pop();)if(Ye.nodeType===1&&++vi&&Ye===Se){Ke[T]=[W,$t,vi];break}}else if(Po&&(Ke=Se[ee]||(Se[ee]={}),De=Ke[T]||[],$t=De[0]===W&&De[1],vi=$t),vi===!1)for(;(Ye=++$t&&Ye&&Ye[li]||(vi=$t=0)||zi.pop())&&!((Xe?F(Ye,fn):Ye.nodeType===1)&&++vi&&(Po&&(Ke=Ye[ee]||(Ye[ee]={}),Ke[T]=[W,vi]),Ye===Se)););return vi-=K,vi===I||vi%I===0&&vi/I>=0}}},PSEUDO:function(T,Y){var D,I=u.pseudos[T]||u.setFilters[T.toLowerCase()]||St.error("unsupported pseudo: "+T);return I[ee]?I(Y):I.length>1?(D=[T,T,"",Y],u.setFilters.hasOwnProperty(T.toLowerCase())?Zr(function(K,Oe){for(var be,Xe=I(K,Y),Se=Xe.length;Se--;)be=a.call(K,Xe[Se]),K[be]=!(Oe[be]=Xe[Se])}):function(K){return I(K,0,D)}):I}},pseudos:{not:Zr(function(T){var Y=[],D=[],I=wu(T.replace(Te,"$1"));return I[ee]?Zr(function(K,Oe,be,Xe){for(var Se,He=I(K,null,Xe,[]),ze=K.length;ze--;)(Se=He[ze])&&(K[ze]=!(Oe[ze]=Se))}):function(K,Oe,be){return Y[0]=K,I(Y,null,be,D),Y[0]=null,!D.pop()}}),has:Zr(function(T){return function(Y){return St(T,Y).length>0}}),contains:Zr(function(T){return T=T.replace(Pn,kn),function(Y){return(Y.textContent||d.text(Y)).indexOf(T)>-1}}),lang:Zr(function(T){return da.test(T||"")||St.error("unsupported lang: "+T),T=T.replace(Pn,kn).toLowerCase(),function(Y){var D;do if(D=_?Y.lang:Y.getAttribute("xml:lang")||Y.getAttribute("lang"))return D=D.toLowerCase(),D===T||D.indexOf(T+"-")===0;while((Y=Y.parentNode)&&Y.nodeType===1);return!1}}),target:function(T){var Y=i.location&&i.location.hash;return Y&&Y.slice(1)===T.id},root:function(T){return T===R},focus:function(T){return T===I1()&&Q.hasFocus()&&!!(T.type||T.href||~T.tabIndex)},enabled:kg(!1),disabled:kg(!0),checked:function(T){return F(T,"input")&&!!T.checked||F(T,"option")&&!!T.selected},selected:function(T){return T.parentNode&&T.parentNode.selectedIndex,T.selected===!0},empty:function(T){for(T=T.firstChild;T;T=T.nextSibling)if(T.nodeType<6)return!1;return!0},parent:function(T){return!u.pseudos.empty(T)},header:function(T){return Hn.test(T.nodeName)},input:function(T){return Fn.test(T.nodeName)},button:function(T){return F(T,"input")&&T.type==="button"||F(T,"button")},text:function(T){var Y;return F(T,"input")&&T.type==="text"&&((Y=T.getAttribute("type"))==null||Y.toLowerCase()==="text")},first:Ys(function(){return[0]}),last:Ys(function(T,Y){return[Y-1]}),eq:Ys(function(T,Y,D){return[D<0?D+Y:D]}),even:Ys(function(T,Y){for(var D=0;DY?I=Y:I=D;--I>=0;)T.push(I);return T}),gt:Ys(function(T,Y,D){for(var I=D<0?D+Y:D;++I1?function(Y,D,I){for(var K=T.length;K--;)if(!T[K](Y,D,I))return!1;return!0}:T[0]}function G1(T,Y,D){for(var I=0,K=Y.length;I-1&&(be[ze]=!(Xe[ze]=Ke))}}else Ye=rc(Ye===Xe?Ye.splice(li,Ye.length):Ye),K?K(null,Xe,Ye,He):v.apply(Xe,Ye)})}function Qu(T){for(var Y,D,I,K=T.length,Oe=u.relative[T[0].type],be=Oe||u.relative[" "],Xe=Oe?1:0,Se=ic(function(De){return De===Y},be,!0),He=ic(function(De){return a.call(Y,De)>-1},be,!0),ze=[function(De,Ke,Ye){var $t=!Oe&&(Ye||Ke!=p)||((Y=Ke).nodeType?Se(De,Ke,Ye):He(De,Ke,Ye));return Y=null,$t}];Xe1&&yu(ze),Xe>1&&tc(T.slice(0,Xe-1).concat({value:T[Xe-2].type===" "?"*":""})).replace(Te,"$1"),D,Xe0,I=T.length>0,K=function(Oe,be,Xe,Se,He){var ze,De,Ke,Ye=0,$t="0",zi=Oe&&[],li=[],ur=p,fn=Oe||I&&u.find.TAG("*",He),Po=W+=ur==null?1:Math.random()||.1,vi=fn.length;for(He&&(p=be==Q||be||He);$t!==vi&&(ze=fn[$t])!=null;$t++){if(I&&ze){for(De=0,!be&&ze.ownerDocument!=Q&&(Kn(ze),Xe=!_);Ke=T[De++];)if(Ke(ze,be||Q,Xe)){v.call(Se,ze);break}He&&(W=Po)}D&&((ze=!Ke&&ze)&&Ye--,Oe&&zi.push(ze))}if(Ye+=$t,D&&$t!==Ye){for(De=0;Ke=Y[De++];)Ke(zi,li,be,Xe);if(Oe){if(Ye>0)for(;$t--;)zi[$t]||li[$t]||(li[$t]=ue.call(Se));li=rc(li)}v.apply(Se,li),He&&!Oe&&li.length>0&&Ye+Y.length>1&&d.uniqueSort(Se)}return He&&(W=Po,p=ur),zi};return D?Zr(K):K}function wu(T,Y){var D,I=[],K=[],Oe=Ie[T+" "];if(!Oe){for(Y||(Y=pa(T)),D=Y.length;D--;)Oe=Qu(Y[D]),Oe[ee]?I.push(Oe):K.push(Oe);Oe=Ie(T,F1(K,I)),Oe.selector=T}return Oe}function Xg(T,Y,D,I){var K,Oe,be,Xe,Se,He=typeof T=="function"&&T,ze=!I&&pa(T=He.selector||T);if(D=D||[],ze.length===1){if(Oe=ze[0]=ze[0].slice(0),Oe.length>2&&(be=Oe[0]).type==="ID"&&Y.nodeType===9&&_&&u.relative[Oe[1].type]){if(Y=(u.find.ID(be.matches[0].replace(Pn,kn),Y)||[])[0],Y)He&&(Y=Y.parentNode);else return D;T=T.slice(Oe.shift().value.length)}for(K=hn.needsContext.test(T)?0:Oe.length;K--&&(be=Oe[K],!u.relative[Xe=be.type]);)if((Se=u.find[Xe])&&(I=Se(be.matches[0].replace(Pn,kn),Su.test(Oe[0].type)&&vu(Y.parentNode)||Y))){if(Oe.splice(K,1),T=I.length&&tc(Oe),!T)return v.apply(D,I),D;break}}return(He||wu(T,ze))(I,Y,!_,D,!Y||Su.test(T)&&vu(Y.parentNode)||Y),D}b.sortStable=ee.split("").sort(qt).join("")===ee,Kn(),b.sortDetached=$o(function(T){return T.compareDocumentPosition(Q.createElement("fieldset"))&1}),d.find=St,d.expr[":"]=d.expr.pseudos,d.unique=d.uniqueSort,St.compile=wu,St.select=Xg,St.setDocument=Kn,St.tokenize=pa,St.escape=d.escapeSelector,St.getText=d.text,St.isXML=d.isXMLDoc,St.selectors=d.expr,St.support=d.support,St.uniqueSort=d.uniqueSort})();var ce=function(c,u,p){for(var g=[],S=p!==void 0;(c=c[u])&&c.nodeType!==9;)if(c.nodeType===1){if(S&&d(c).is(p))break;g.push(c)}return g},Me=function(c,u){for(var p=[];c;c=c.nextSibling)c.nodeType===1&&c!==u&&p.push(c);return p},je=d.expr.match.needsContext,We=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function pt(c,u,p){return y(u)?d.grep(c,function(g,S){return!!u.call(g,S,g)!==p}):u.nodeType?d.grep(c,function(g){return g===u!==p}):typeof u!="string"?d.grep(c,function(g){return a.call(u,g)>-1!==p}):d.filter(u,c,p)}d.filter=function(c,u,p){var g=u[0];return p&&(c=":not("+c+")"),u.length===1&&g.nodeType===1?d.find.matchesSelector(g,c)?[g]:[]:d.find.matches(c,d.grep(u,function(S){return S.nodeType===1}))},d.fn.extend({find:function(c){var u,p,g=this.length,S=this;if(typeof c!="string")return this.pushStack(d(c).filter(function(){for(u=0;u1?d.uniqueSort(p):p},filter:function(c){return this.pushStack(pt(this,c||[],!1))},not:function(c){return this.pushStack(pt(this,c||[],!0))},is:function(c){return!!pt(this,typeof c=="string"&&je.test(c)?d(c):c||[],!1).length}});var st,Ai=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ft=d.fn.init=function(c,u,p){var g,S;if(!c)return this;if(p=p||st,typeof c=="string")if(c[0]==="<"&&c[c.length-1]===">"&&c.length>=3?g=[null,c,null]:g=Ai.exec(c),g&&(g[1]||!u))if(g[1]){if(u=u instanceof d?u[0]:u,d.merge(this,d.parseHTML(g[1],u&&u.nodeType?u.ownerDocument||u:X,!0)),We.test(g[1])&&d.isPlainObject(u))for(g in u)y(this[g])?this[g](u[g]):this.attr(g,u[g]);return this}else return S=X.getElementById(g[2]),S&&(this[0]=S,this.length=1),this;else return!u||u.jquery?(u||p).find(c):this.constructor(u).find(c);else{if(c.nodeType)return this[0]=c,this.length=1,this;if(y(c))return p.ready!==void 0?p.ready(c):c(d)}return d.makeArray(c,this)};ft.prototype=d.fn,st=d(X);var Ei=/^(?:parents|prev(?:Until|All))/,Jr={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({has:function(c){var u=d(c,this),p=u.length;return this.filter(function(){for(var g=0;g-1:p.nodeType===1&&d.find.matchesSelector(p,c))){v.push(p);break}}return this.pushStack(v.length>1?d.uniqueSort(v):v)},index:function(c){return c?typeof c=="string"?a.call(d(c),this[0]):a.call(this,c.jquery?c[0]:c):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(c,u){return this.pushStack(d.uniqueSort(d.merge(this.get(),d(c,u))))},addBack:function(c){return this.add(c==null?this.prevObject:this.prevObject.filter(c))}});function Tr(c,u){for(;(c=c[u])&&c.nodeType!==1;);return c}d.each({parent:function(c){var u=c.parentNode;return u&&u.nodeType!==11?u:null},parents:function(c){return ce(c,"parentNode")},parentsUntil:function(c,u,p){return ce(c,"parentNode",p)},next:function(c){return Tr(c,"nextSibling")},prev:function(c){return Tr(c,"previousSibling")},nextAll:function(c){return ce(c,"nextSibling")},prevAll:function(c){return ce(c,"previousSibling")},nextUntil:function(c,u,p){return ce(c,"nextSibling",p)},prevUntil:function(c,u,p){return ce(c,"previousSibling",p)},siblings:function(c){return Me((c.parentNode||{}).firstChild,c)},children:function(c){return Me(c.firstChild)},contents:function(c){return c.contentDocument!=null&&r(c.contentDocument)?c.contentDocument:(F(c,"template")&&(c=c.content||c),d.merge([],c.childNodes))}},function(c,u){d.fn[c]=function(p,g){var S=d.map(this,u,p);return c.slice(-5)!=="Until"&&(g=p),g&&typeof g=="string"&&(S=d.filter(g,S)),this.length>1&&(Jr[c]||d.uniqueSort(S),Ei.test(c)&&S.reverse()),this.pushStack(S)}});var di=/[^\x20\t\r\n\f]+/g;function Qs(c){var u={};return d.each(c.match(di)||[],function(p,g){u[g]=!0}),u}d.Callbacks=function(c){c=typeof c=="string"?Qs(c):d.extend({},c);var u,p,g,S,v=[],Q=[],R=-1,_=function(){for(S=S||c.once,g=u=!0;Q.length;R=-1)for(p=Q.shift();++R-1;)v.splice(W,1),W<=R&&R--}),this},has:function(B){return B?d.inArray(B,v)>-1:v.length>0},empty:function(){return v&&(v=[]),this},disable:function(){return S=Q=[],v=p="",this},disabled:function(){return!v},lock:function(){return S=Q=[],!p&&!u&&(v=p=""),this},locked:function(){return!!S},fireWith:function(B,ee){return S||(ee=ee||[],ee=[B,ee.slice?ee.slice():ee],Q.push(ee),u||_()),this},fire:function(){return z.fireWith(this,arguments),this},fired:function(){return!!g}};return z};function Xr(c){return c}function wn(c){throw c}function _r(c,u,p,g){var S;try{c&&y(S=c.promise)?S.call(c).done(u).fail(p):c&&y(S=c.then)?S.call(c,u,p):u.apply(void 0,[c].slice(g))}catch(v){p.apply(void 0,[v])}}d.extend({Deferred:function(c){var u=[["notify","progress",d.Callbacks("memory"),d.Callbacks("memory"),2],["resolve","done",d.Callbacks("once memory"),d.Callbacks("once memory"),0,"resolved"],["reject","fail",d.Callbacks("once memory"),d.Callbacks("once memory"),1,"rejected"]],p="pending",g={state:function(){return p},always:function(){return S.done(arguments).fail(arguments),this},catch:function(v){return g.then(null,v)},pipe:function(){var v=arguments;return d.Deferred(function(Q){d.each(u,function(R,_){var z=y(v[_[4]])&&v[_[4]];S[_[1]](function(){var B=z&&z.apply(this,arguments);B&&y(B.promise)?B.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject):Q[_[0]+"With"](this,z?[B]:arguments)})}),v=null}).promise()},then:function(v,Q,R){var _=0;function z(B,ee,W,oe){return function(){var Ve=this,ot=arguments,Ie=function(){var qt,an;if(!(B<_)){if(qt=W.apply(Ve,ot),qt===ee.promise())throw new TypeError("Thenable self-resolution");an=qt&&(typeof qt=="object"||typeof qt=="function")&&qt.then,y(an)?oe?an.call(qt,z(_,ee,Xr,oe),z(_,ee,wn,oe)):(_++,an.call(qt,z(_,ee,Xr,oe),z(_,ee,wn,oe),z(_,ee,Xr,ee.notifyWith))):(W!==Xr&&(Ve=void 0,ot=[qt]),(oe||ee.resolveWith)(Ve,ot))}},ii=oe?Ie:function(){try{Ie()}catch(qt){d.Deferred.exceptionHook&&d.Deferred.exceptionHook(qt,ii.error),B+1>=_&&(W!==wn&&(Ve=void 0,ot=[qt]),ee.rejectWith(Ve,ot))}};B?ii():(d.Deferred.getErrorHook?ii.error=d.Deferred.getErrorHook():d.Deferred.getStackHook&&(ii.error=d.Deferred.getStackHook()),i.setTimeout(ii))}}return d.Deferred(function(B){u[0][3].add(z(0,B,y(R)?R:Xr,B.notifyWith)),u[1][3].add(z(0,B,y(v)?v:Xr)),u[2][3].add(z(0,B,y(Q)?Q:wn))}).promise()},promise:function(v){return v!=null?d.extend(v,g):g}},S={};return d.each(u,function(v,Q){var R=Q[2],_=Q[5];g[Q[1]]=R.add,_&&R.add(function(){p=_},u[3-v][2].disable,u[3-v][3].disable,u[0][2].lock,u[0][3].lock),R.add(Q[3].fire),S[Q[0]]=function(){return S[Q[0]+"With"](this===S?void 0:this,arguments),this},S[Q[0]+"With"]=R.fireWith}),g.promise(S),c&&c.call(S,S),S},when:function(c){var u=arguments.length,p=u,g=Array(p),S=n.call(arguments),v=d.Deferred(),Q=function(R){return function(_){g[R]=this,S[R]=arguments.length>1?n.call(arguments):_,--u||v.resolveWith(g,S)}};if(u<=1&&(_r(c,v.done(Q(p)).resolve,v.reject,!u),v.state()==="pending"||y(S[p]&&S[p].then)))return v.then();for(;p--;)_r(S[p],Q(p),v.reject);return v.promise()}});var Dn=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;d.Deferred.exceptionHook=function(c,u){i.console&&i.console.warn&&c&&Dn.test(c.name)&&i.console.warn("jQuery.Deferred exception: "+c.message,c.stack,u)},d.readyException=function(c){i.setTimeout(function(){throw c})};var Bi=d.Deferred();d.fn.ready=function(c){return Bi.then(c).catch(function(u){d.readyException(u)}),this},d.extend({isReady:!1,readyWait:1,ready:function(c){(c===!0?--d.readyWait:d.isReady)||(d.isReady=!0,!(c!==!0&&--d.readyWait>0)&&Bi.resolveWith(X,[d]))}}),d.ready.then=Bi.then;function Jt(){X.removeEventListener("DOMContentLoaded",Jt),i.removeEventListener("load",Jt),d.ready()}X.readyState==="complete"||X.readyState!=="loading"&&!X.documentElement.doScroll?i.setTimeout(d.ready):(X.addEventListener("DOMContentLoaded",Jt),i.addEventListener("load",Jt));var pi=function(c,u,p,g,S,v,Q){var R=0,_=c.length,z=p==null;if(q(p)==="object"){S=!0;for(R in p)pi(c,u,R,p[R],!0,v,Q)}else if(g!==void 0&&(S=!0,y(g)||(Q=!0),z&&(Q?(u.call(c,g),u=null):(z=u,u=function(B,ee,W){return z.call(d(B),W)})),u))for(;R<_;R++)u(c[R],p,Q?g:g.call(c[R],R,u(c[R],p)));return S?c:z?u.call(c):_?u(c[0],p):v},Rr=/^-ms-/,Cr=/-([a-z])/g;function en(c,u){return u.toUpperCase()}function ei(c){return c.replace(Rr,"ms-").replace(Cr,en)}var or=function(c){return c.nodeType===1||c.nodeType===9||!+c.nodeType};function tn(){this.expando=d.expando+tn.uid++}tn.uid=1,tn.prototype={cache:function(c){var u=c[this.expando];return u||(u={},or(c)&&(c.nodeType?c[this.expando]=u:Object.defineProperty(c,this.expando,{value:u,configurable:!0}))),u},set:function(c,u,p){var g,S=this.cache(c);if(typeof u=="string")S[ei(u)]=p;else for(g in u)S[ei(g)]=u[g];return S},get:function(c,u){return u===void 0?this.cache(c):c[this.expando]&&c[this.expando][ei(u)]},access:function(c,u,p){return u===void 0||u&&typeof u=="string"&&p===void 0?this.get(c,u):(this.set(c,u,p),p!==void 0?p:u)},remove:function(c,u){var p,g=c[this.expando];if(g!==void 0){if(u!==void 0)for(Array.isArray(u)?u=u.map(ei):(u=ei(u),u=u in g?[u]:u.match(di)||[]),p=u.length;p--;)delete g[u[p]];(u===void 0||d.isEmptyObject(g))&&(c.nodeType?c[this.expando]=void 0:delete c[this.expando])}},hasData:function(c){var u=c[this.expando];return u!==void 0&&!d.isEmptyObject(u)}};var we=new tn,_t=new tn,Ar=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,mi=/[A-Z]/g;function Wn(c){return c==="true"?!0:c==="false"?!1:c==="null"?null:c===+c+""?+c:Ar.test(c)?JSON.parse(c):c}function qn(c,u,p){var g;if(p===void 0&&c.nodeType===1)if(g="data-"+u.replace(mi,"-$&").toLowerCase(),p=c.getAttribute(g),typeof p=="string"){try{p=Wn(p)}catch(S){}_t.set(c,u,p)}else p=void 0;return p}d.extend({hasData:function(c){return _t.hasData(c)||we.hasData(c)},data:function(c,u,p){return _t.access(c,u,p)},removeData:function(c,u){_t.remove(c,u)},_data:function(c,u,p){return we.access(c,u,p)},_removeData:function(c,u){we.remove(c,u)}}),d.fn.extend({data:function(c,u){var p,g,S,v=this[0],Q=v&&v.attributes;if(c===void 0){if(this.length&&(S=_t.get(v),v.nodeType===1&&!we.get(v,"hasDataAttrs"))){for(p=Q.length;p--;)Q[p]&&(g=Q[p].name,g.indexOf("data-")===0&&(g=ei(g.slice(5)),qn(v,g,S[g])));we.set(v,"hasDataAttrs",!0)}return S}return typeof c=="object"?this.each(function(){_t.set(this,c)}):pi(this,function(R){var _;if(v&&R===void 0)return _=_t.get(v,c),_!==void 0||(_=qn(v,c),_!==void 0)?_:void 0;this.each(function(){_t.set(this,c,R)})},null,u,arguments.length>1,null,!0)},removeData:function(c){return this.each(function(){_t.remove(this,c)})}}),d.extend({queue:function(c,u,p){var g;if(c)return u=(u||"fx")+"queue",g=we.get(c,u),p&&(!g||Array.isArray(p)?g=we.access(c,u,d.makeArray(p)):g.push(p)),g||[]},dequeue:function(c,u){u=u||"fx";var p=d.queue(c,u),g=p.length,S=p.shift(),v=d._queueHooks(c,u),Q=function(){d.dequeue(c,u)};S==="inprogress"&&(S=p.shift(),g--),S&&(u==="fx"&&p.unshift("inprogress"),delete v.stop,S.call(c,Q,v)),!g&&v&&v.empty.fire()},_queueHooks:function(c,u){var p=u+"queueHooks";return we.get(c,p)||we.access(c,p,{empty:d.Callbacks("once memory").add(function(){we.remove(c,[u+"queue",p])})})}}),d.fn.extend({queue:function(c,u){var p=2;return typeof c!="string"&&(u=c,c="fx",p--),arguments.length\x20\t\r\n\f]*)/i,nn=/^$|^module$|\/(?:java|ecma)script/i;(function(){var c=X.createDocumentFragment(),u=c.appendChild(X.createElement("div")),p=X.createElement("input");p.setAttribute("type","radio"),p.setAttribute("checked","checked"),p.setAttribute("name","t"),u.appendChild(p),b.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,u.innerHTML="",b.noCloneChecked=!!u.cloneNode(!0).lastChild.defaultValue,u.innerHTML="",b.option=!!u.lastChild})();var ti={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ti.tbody=ti.tfoot=ti.colgroup=ti.caption=ti.thead,ti.th=ti.td,b.option||(ti.optgroup=ti.option=[1,""]);function Gt(c,u){var p;return typeof c.getElementsByTagName!="undefined"?p=c.getElementsByTagName(u||"*"):typeof c.querySelectorAll!="undefined"?p=c.querySelectorAll(u||"*"):p=[],u===void 0||u&&F(c,u)?d.merge([c],p):p}function kt(c,u){for(var p=0,g=c.length;p-1){S&&S.push(v);continue}if(z=Yi(v),Q=Gt(ee.appendChild(v),"script"),z&&kt(Q),p)for(B=0;v=Q[B++];)nn.test(v.type||"")&&p.push(v)}return ee}var ws=/^([^.]*)(?:\.(.+)|)/;function lr(){return!0}function Er(){return!1}function Nn(c,u,p,g,S,v){var Q,R;if(typeof u=="object"){typeof p!="string"&&(g=g||p,p=void 0);for(R in u)Nn(c,R,p,g,u[R],v);return c}if(g==null&&S==null?(S=p,g=p=void 0):S==null&&(typeof p=="string"?(S=g,g=void 0):(S=g,g=p,p=void 0)),S===!1)S=Er;else if(!S)return c;return v===1&&(Q=S,S=function(_){return d().off(_),Q.apply(this,arguments)},S.guid=Q.guid||(Q.guid=d.guid++)),c.each(function(){d.event.add(this,u,S,g,p)})}d.event={global:{},add:function(c,u,p,g,S){var v,Q,R,_,z,B,ee,W,oe,Ve,ot,Ie=we.get(c);if(or(c))for(p.handler&&(v=p,p=v.handler,S=v.selector),S&&d.find.matchesSelector(bi,S),p.guid||(p.guid=d.guid++),(_=Ie.events)||(_=Ie.events=Object.create(null)),(Q=Ie.handle)||(Q=Ie.handle=function(ii){return typeof d!="undefined"&&d.event.triggered!==ii.type?d.event.dispatch.apply(c,arguments):void 0}),u=(u||"").match(di)||[""],z=u.length;z--;)R=ws.exec(u[z])||[],oe=ot=R[1],Ve=(R[2]||"").split(".").sort(),oe&&(ee=d.event.special[oe]||{},oe=(S?ee.delegateType:ee.bindType)||oe,ee=d.event.special[oe]||{},B=d.extend({type:oe,origType:ot,data:g,handler:p,guid:p.guid,selector:S,needsContext:S&&d.expr.match.needsContext.test(S),namespace:Ve.join(".")},v),(W=_[oe])||(W=_[oe]=[],W.delegateCount=0,(!ee.setup||ee.setup.call(c,g,Ve,Q)===!1)&&c.addEventListener&&c.addEventListener(oe,Q)),ee.add&&(ee.add.call(c,B),B.handler.guid||(B.handler.guid=p.guid)),S?W.splice(W.delegateCount++,0,B):W.push(B),d.event.global[oe]=!0)},remove:function(c,u,p,g,S){var v,Q,R,_,z,B,ee,W,oe,Ve,ot,Ie=we.hasData(c)&&we.get(c);if(!(!Ie||!(_=Ie.events))){for(u=(u||"").match(di)||[""],z=u.length;z--;){if(R=ws.exec(u[z])||[],oe=ot=R[1],Ve=(R[2]||"").split(".").sort(),!oe){for(oe in _)d.event.remove(c,oe+u[z],p,g,!0);continue}for(ee=d.event.special[oe]||{},oe=(g?ee.delegateType:ee.bindType)||oe,W=_[oe]||[],R=R[2]&&new RegExp("(^|\\.)"+Ve.join("\\.(?:.*\\.|)")+"(\\.|$)"),Q=v=W.length;v--;)B=W[v],(S||ot===B.origType)&&(!p||p.guid===B.guid)&&(!R||R.test(B.namespace))&&(!g||g===B.selector||g==="**"&&B.selector)&&(W.splice(v,1),B.selector&&W.delegateCount--,ee.remove&&ee.remove.call(c,B));Q&&!W.length&&((!ee.teardown||ee.teardown.call(c,Ve,Ie.handle)===!1)&&d.removeEvent(c,oe,Ie.handle),delete _[oe])}d.isEmptyObject(_)&&we.remove(c,"handle events")}},dispatch:function(c){var u,p,g,S,v,Q,R=new Array(arguments.length),_=d.event.fix(c),z=(we.get(this,"events")||Object.create(null))[_.type]||[],B=d.event.special[_.type]||{};for(R[0]=_,u=1;u=1)){for(;z!==this;z=z.parentNode||this)if(z.nodeType===1&&!(c.type==="click"&&z.disabled===!0)){for(v=[],Q={},p=0;p<_;p++)g=u[p],S=g.selector+" ",Q[S]===void 0&&(Q[S]=g.needsContext?d(S,this).index(z)>-1:d.find(S,this,null,[z]).length),Q[S]&&v.push(g);v.length&&R.push({elem:z,handlers:v})}}return z=this,_\s*$/g;function $s(c,u){return F(c,"table")&&F(u.nodeType!==11?u:u.firstChild,"tr")&&d(c).children("tbody")[0]||c}function Ps(c){return c.type=(c.getAttribute("type")!==null)+"/"+c.type,c}function Qo(c){return(c.type||"").slice(0,5)==="true/"?c.type=c.type.slice(5):c.removeAttribute("type"),c}function Ui(c,u){var p,g,S,v,Q,R,_;if(u.nodeType===1){if(we.hasData(c)&&(v=we.get(c),_=v.events,_)){we.remove(u,"handle events");for(S in _)for(p=0,g=_[S].length;p1&&typeof oe=="string"&&!b.checkClone&&cr.test(oe))return c.each(function(ot){var Ie=c.eq(ot);Ve&&(u[0]=oe.call(this,ot,Ie.html())),Yr(Ie,u,p,g)});if(ee&&(S=yo(u,c[0].ownerDocument,!1,c,g),v=S.firstChild,S.childNodes.length===1&&(S=v),v||g)){for(Q=d.map(Gt(S,"script"),Ps),R=Q.length;B0&&kt(Q,!_&&Gt(c,"script")),R},cleanData:function(c){for(var u,p,g,S=d.event.special,v=0;(p=c[v])!==void 0;v++)if(or(p)){if(u=p[we.expando]){if(u.events)for(g in u.events)S[g]?d.event.remove(p,g):d.removeEvent(p,g,u.handle);p[we.expando]=void 0}p[_t.expando]&&(p[_t.expando]=void 0)}}}),d.fn.extend({detach:function(c){return ks(this,c,!0)},remove:function(c){return ks(this,c)},text:function(c){return pi(this,function(u){return u===void 0?d.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=u)})},null,c,arguments.length)},append:function(){return Yr(this,arguments,function(c){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=$s(this,c);u.appendChild(c)}})},prepend:function(){return Yr(this,arguments,function(c){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=$s(this,c);u.insertBefore(c,u.firstChild)}})},before:function(){return Yr(this,arguments,function(c){this.parentNode&&this.parentNode.insertBefore(c,this)})},after:function(){return Yr(this,arguments,function(c){this.parentNode&&this.parentNode.insertBefore(c,this.nextSibling)})},empty:function(){for(var c,u=0;(c=this[u])!=null;u++)c.nodeType===1&&(d.cleanData(Gt(c,!1)),c.textContent="");return this},clone:function(c,u){return c=c==null?!1:c,u=u==null?c:u,this.map(function(){return d.clone(this,c,u)})},html:function(c){return pi(this,function(u){var p=this[0]||{},g=0,S=this.length;if(u===void 0&&p.nodeType===1)return p.innerHTML;if(typeof u=="string"&&!Zi.test(u)&&!ti[(vo.exec(u)||["",""])[1].toLowerCase()]){u=d.htmlPrefilter(u);try{for(;g=0&&(_+=Math.max(0,Math.ceil(c["offset"+u[0].toUpperCase()+u.slice(1)]-v-_-R-.5))||0),_+z}function Hl(c,u,p){var g=ke(c),S=!b.boxSizingReliable()||p,v=S&&d.css(c,"boxSizing",!1,g)==="border-box",Q=v,R=xe(c,u,g),_="offset"+u[0].toUpperCase()+u.slice(1);if(Gn.test(R)){if(!p)return R;R="auto"}return(!b.boxSizingReliable()&&v||!b.reliableTrDimensions()&&F(c,"tr")||R==="auto"||!parseFloat(R)&&d.css(c,"display",!1,g)==="inline")&&c.getClientRects().length&&(v=d.css(c,"boxSizing",!1,g)==="border-box",Q=_ in c,Q&&(R=c[_])),R=parseFloat(R)||0,R+Rs(c,u,p||(v?"border":"content"),Q,g,R)+"px"}d.extend({cssHooks:{opacity:{get:function(c,u){if(u){var p=xe(c,"opacity");return p===""?"1":p}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(c,u,p,g){if(!(!c||c.nodeType===3||c.nodeType===8||!c.style)){var S,v,Q,R=ei(u),_=Ts.test(u),z=c.style;if(_||(u=hr(R)),Q=d.cssHooks[u]||d.cssHooks[R],p!==void 0){if(v=typeof p,v==="string"&&(S=ar.exec(p))&&S[1]&&(p=In(c,u,S),v="number"),p==null||p!==p)return;v==="number"&&!_&&(p+=S&&S[3]||(d.cssNumber[R]?"":"px")),!b.clearCloneStyle&&p===""&&u.indexOf("background")===0&&(z[u]="inherit"),(!Q||!("set"in Q)||(p=Q.set(c,p,g))!==void 0)&&(_?z.setProperty(u,p):z[u]=p)}else return Q&&"get"in Q&&(S=Q.get(c,!1,g))!==void 0?S:z[u]}},css:function(c,u,p,g){var S,v,Q,R=ei(u),_=Ts.test(u);return _||(u=hr(R)),Q=d.cssHooks[u]||d.cssHooks[R],Q&&"get"in Q&&(S=Q.get(c,!0,p)),S===void 0&&(S=xe(c,u,g)),S==="normal"&&u in Xs&&(S=Xs[u]),p===""||p?(v=parseFloat(S),p===!0||isFinite(v)?v||0:S):S}}),d.each(["height","width"],function(c,u){d.cssHooks[u]={get:function(p,g,S){if(g)return on.test(d.css(p,"display"))&&(!p.getClientRects().length||!p.getBoundingClientRect().width)?A(p,Rt,function(){return Hl(p,u,S)}):Hl(p,u,S)},set:function(p,g,S){var v,Q=ke(p),R=!b.scrollboxSize()&&Q.position==="absolute",_=R||S,z=_&&d.css(p,"boxSizing",!1,Q)==="border-box",B=S?Rs(p,u,S,z,Q):0;return z&&R&&(B-=Math.ceil(p["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(Q[u])-Rs(p,u,"border",!1,Q)-.5)),B&&(v=ar.exec(g))&&(v[3]||"px")!=="px"&&(p.style[u]=g,g=d.css(p,u)),_s(p,g,B)}}}),d.cssHooks.marginLeft=mt(b.reliableMarginLeft,function(c,u){if(u)return(parseFloat(xe(c,"marginLeft"))||c.getBoundingClientRect().left-A(c,{marginLeft:0},function(){return c.getBoundingClientRect().left}))+"px"}),d.each({margin:"",padding:"",border:"Width"},function(c,u){d.cssHooks[c+u]={expand:function(p){for(var g=0,S={},v=typeof p=="string"?p.split(" "):[p];g<4;g++)S[c+gi[g]+u]=v[g]||v[g-2]||v[0];return S}},c!=="margin"&&(d.cssHooks[c+u].set=_s)}),d.fn.extend({css:function(c,u){return pi(this,function(p,g,S){var v,Q,R={},_=0;if(Array.isArray(g)){for(v=ke(p),Q=g.length;_1)}});function oi(c,u,p,g,S){return new oi.prototype.init(c,u,p,g,S)}d.Tween=oi,oi.prototype={constructor:oi,init:function(c,u,p,g,S,v){this.elem=c,this.prop=p,this.easing=S||d.easing._default,this.options=u,this.start=this.now=this.cur(),this.end=g,this.unit=v||(d.cssNumber[p]?"":"px")},cur:function(){var c=oi.propHooks[this.prop];return c&&c.get?c.get(this):oi.propHooks._default.get(this)},run:function(c){var u,p=oi.propHooks[this.prop];return this.options.duration?this.pos=u=d.easing[this.easing](c,this.options.duration*c,0,1,this.options.duration):this.pos=u=c,this.now=(this.end-this.start)*u+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),p&&p.set?p.set(this):oi.propHooks._default.set(this),this}},oi.prototype.init.prototype=oi.prototype,oi.propHooks={_default:{get:function(c){var u;return c.elem.nodeType!==1||c.elem[c.prop]!=null&&c.elem.style[c.prop]==null?c.elem[c.prop]:(u=d.css(c.elem,c.prop,""),!u||u==="auto"?0:u)},set:function(c){d.fx.step[c.prop]?d.fx.step[c.prop](c):c.elem.nodeType===1&&(d.cssHooks[c.prop]||c.elem.style[hr(c.prop)]!=null)?d.style(c.elem,c.prop,c.now+c.unit):c.elem[c.prop]=c.now}}},oi.propHooks.scrollTop=oi.propHooks.scrollLeft={set:function(c){c.elem.nodeType&&c.elem.parentNode&&(c.elem[c.prop]=c.now)}},d.easing={linear:function(c){return c},swing:function(c){return .5-Math.cos(c*Math.PI)/2},_default:"swing"},d.fx=oi.prototype.init,d.fx.step={};var w,C,k=/^(?:toggle|show|hide)$/,U=/queueHooks$/;function M(){C&&(X.hidden===!1&&i.requestAnimationFrame?i.requestAnimationFrame(M):i.setTimeout(M,d.fx.interval),d.fx.tick())}function Z(){return i.setTimeout(function(){w=void 0}),w=Date.now()}function H(c,u){var p,g=0,S={height:c};for(u=u?1:0;g<4;g+=2-u)p=gi[g],S["margin"+p]=S["padding"+p]=c;return u&&(S.opacity=S.width=c),S}function re(c,u,p){for(var g,S=(se.tweeners[u]||[]).concat(se.tweeners["*"]),v=0,Q=S.length;v1)},removeAttr:function(c){return this.each(function(){d.removeAttr(this,c)})}}),d.extend({attr:function(c,u,p){var g,S,v=c.nodeType;if(!(v===3||v===8||v===2)){if(typeof c.getAttribute=="undefined")return d.prop(c,u,p);if((v!==1||!d.isXMLDoc(c))&&(S=d.attrHooks[u.toLowerCase()]||(d.expr.match.bool.test(u)?$e:void 0)),p!==void 0){if(p===null){d.removeAttr(c,u);return}return S&&"set"in S&&(g=S.set(c,p,u))!==void 0?g:(c.setAttribute(u,p+""),p)}return S&&"get"in S&&(g=S.get(c,u))!==null?g:(g=d.find.attr(c,u),g==null?void 0:g)}},attrHooks:{type:{set:function(c,u){if(!b.radioValue&&u==="radio"&&F(c,"input")){var p=c.value;return c.setAttribute("type",u),p&&(c.value=p),u}}}},removeAttr:function(c,u){var p,g=0,S=u&&u.match(di);if(S&&c.nodeType===1)for(;p=S[g++];)c.removeAttribute(p)}}),$e={set:function(c,u,p){return u===!1?d.removeAttr(c,p):c.setAttribute(p,p),p}},d.each(d.expr.match.bool.source.match(/\w+/g),function(c,u){var p=qe[u]||d.find.attr;qe[u]=function(g,S,v){var Q,R,_=S.toLowerCase();return v||(R=qe[_],qe[_]=Q,Q=p(g,S,v)!=null?_:null,qe[_]=R),Q}});var ut=/^(?:input|select|textarea|button)$/i,Ot=/^(?:a|area)$/i;d.fn.extend({prop:function(c,u){return pi(this,d.prop,c,u,arguments.length>1)},removeProp:function(c){return this.each(function(){delete this[d.propFix[c]||c]})}}),d.extend({prop:function(c,u,p){var g,S,v=c.nodeType;if(!(v===3||v===8||v===2))return(v!==1||!d.isXMLDoc(c))&&(u=d.propFix[u]||u,S=d.propHooks[u]),p!==void 0?S&&"set"in S&&(g=S.set(c,p,u))!==void 0?g:c[u]=p:S&&"get"in S&&(g=S.get(c,u))!==null?g:c[u]},propHooks:{tabIndex:{get:function(c){var u=d.find.attr(c,"tabindex");return u?parseInt(u,10):ut.test(c.nodeName)||Ot.test(c.nodeName)&&c.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(d.propHooks.selected={get:function(c){var u=c.parentNode;return u&&u.parentNode&&u.parentNode.selectedIndex,null},set:function(c){var u=c.parentNode;u&&(u.selectedIndex,u.parentNode&&u.parentNode.selectedIndex)}}),d.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){d.propFix[this.toLowerCase()]=this});function yt(c){var u=c.match(di)||[];return u.join(" ")}function bt(c){return c.getAttribute&&c.getAttribute("class")||""}function ai(c){return Array.isArray(c)?c:typeof c=="string"?c.match(di)||[]:[]}d.fn.extend({addClass:function(c){var u,p,g,S,v,Q;return y(c)?this.each(function(R){d(this).addClass(c.call(this,R,bt(this)))}):(u=ai(c),u.length?this.each(function(){if(g=bt(this),p=this.nodeType===1&&" "+yt(g)+" ",p){for(v=0;v-1;)p=p.replace(" "+S+" "," ");Q=yt(p),g!==Q&&this.setAttribute("class",Q)}}):this):this.attr("class","")},toggleClass:function(c,u){var p,g,S,v,Q=typeof c,R=Q==="string"||Array.isArray(c);return y(c)?this.each(function(_){d(this).toggleClass(c.call(this,_,bt(this),u),u)}):typeof u=="boolean"&&R?u?this.addClass(c):this.removeClass(c):(p=ai(c),this.each(function(){if(R)for(v=d(this),S=0;S-1)return!0;return!1}});var Cs=/\r/g;d.fn.extend({val:function(c){var u,p,g,S=this[0];return arguments.length?(g=y(c),this.each(function(v){var Q;this.nodeType===1&&(g?Q=c.call(this,v,d(this).val()):Q=c,Q==null?Q="":typeof Q=="number"?Q+="":Array.isArray(Q)&&(Q=d.map(Q,function(R){return R==null?"":R+""})),u=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()],(!u||!("set"in u)||u.set(this,Q,"value")===void 0)&&(this.value=Q))})):S?(u=d.valHooks[S.type]||d.valHooks[S.nodeName.toLowerCase()],u&&"get"in u&&(p=u.get(S,"value"))!==void 0?p:(p=S.value,typeof p=="string"?p.replace(Cs,""):p==null?"":p)):void 0}}),d.extend({valHooks:{option:{get:function(c){var u=d.find.attr(c,"value");return u!=null?u:yt(d.text(c))}},select:{get:function(c){var u,p,g,S=c.options,v=c.selectedIndex,Q=c.type==="select-one",R=Q?null:[],_=Q?v+1:S.length;for(v<0?g=_:g=Q?v:0;g<_;g++)if(p=S[g],(p.selected||g===v)&&!p.disabled&&(!p.parentNode.disabled||!F(p.parentNode,"optgroup"))){if(u=d(p).val(),Q)return u;R.push(u)}return R},set:function(c,u){for(var p,g,S=c.options,v=d.makeArray(u),Q=S.length;Q--;)g=S[Q],(g.selected=d.inArray(d.valHooks.option.get(g),v)>-1)&&(p=!0);return p||(c.selectedIndex=-1),v}}}}),d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(c,u){if(Array.isArray(u))return c.checked=d.inArray(d(c).val(),u)>-1}},b.checkOn||(d.valHooks[this].get=function(c){return c.getAttribute("value")===null?"on":c.value})});var $n=i.location,Kl={guid:Date.now()},As=/\?/;d.parseXML=function(c){var u,p;if(!c||typeof c!="string")return null;try{u=new i.DOMParser().parseFromString(c,"text/xml")}catch(g){}return p=u&&u.getElementsByTagName("parsererror")[0],(!u||p)&&d.error("Invalid XML: "+(p?d.map(p.childNodes,function(g){return g.textContent}).join(` -`):c)),u};var fu=/^(?:focusinfocus|focusoutblur)$/,Jl=function(c){c.stopPropagation()};d.extend(d.event,{trigger:function(c,u,p,g){var S,v,Q,R,_,z,B,ee,W=[p||X],oe=f.call(c,"type")?c.type:c,Ve=f.call(c,"namespace")?c.namespace.split("."):[];if(v=ee=Q=p=p||X,!(p.nodeType===3||p.nodeType===8)&&!fu.test(oe+d.event.triggered)&&(oe.indexOf(".")>-1&&(Ve=oe.split("."),oe=Ve.shift(),Ve.sort()),_=oe.indexOf(":")<0&&"on"+oe,c=c[d.expando]?c:new d.Event(oe,typeof c=="object"&&c),c.isTrigger=g?2:3,c.namespace=Ve.join("."),c.rnamespace=c.namespace?new RegExp("(^|\\.)"+Ve.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,c.result=void 0,c.target||(c.target=p),u=u==null?[c]:d.makeArray(u,[c]),B=d.event.special[oe]||{},!(!g&&B.trigger&&B.trigger.apply(p,u)===!1))){if(!g&&!B.noBubble&&!P(p)){for(R=B.delegateType||oe,fu.test(R+oe)||(v=v.parentNode);v;v=v.parentNode)W.push(v),Q=v;Q===(p.ownerDocument||X)&&W.push(Q.defaultView||Q.parentWindow||i)}for(S=0;(v=W[S++])&&!c.isPropagationStopped();)ee=v,c.type=S>1?R:B.bindType||oe,z=(we.get(v,"events")||Object.create(null))[c.type]&&we.get(v,"handle"),z&&z.apply(v,u),z=_&&v[_],z&&z.apply&&or(v)&&(c.result=z.apply(v,u),c.result===!1&&c.preventDefault());return c.type=oe,!g&&!c.isDefaultPrevented()&&(!B._default||B._default.apply(W.pop(),u)===!1)&&or(p)&&_&&y(p[oe])&&!P(p)&&(Q=p[_],Q&&(p[_]=null),d.event.triggered=oe,c.isPropagationStopped()&&ee.addEventListener(oe,Jl),p[oe](),c.isPropagationStopped()&&ee.removeEventListener(oe,Jl),d.event.triggered=void 0,Q&&(p[_]=Q)),c.result}},simulate:function(c,u,p){var g=d.extend(new d.Event,p,{type:c,isSimulated:!0});d.event.trigger(g,null,u)}}),d.fn.extend({trigger:function(c,u){return this.each(function(){d.event.trigger(c,u,this)})},triggerHandler:function(c,u){var p=this[0];if(p)return d.event.trigger(c,u,p,!0)}});var uu=/\[\]$/,fa=/\r?\n/g,X1=/^(?:submit|button|image|reset|file)$/i,_1=/^(?:input|select|textarea|keygen)/i;function Ou(c,u,p,g){var S;if(Array.isArray(u))d.each(u,function(v,Q){p||uu.test(c)?g(c,Q):Ou(c+"["+(typeof Q=="object"&&Q!=null?v:"")+"]",Q,p,g)});else if(!p&&q(u)==="object")for(S in u)Ou(c+"["+S+"]",u[S],p,g);else g(c,u)}d.param=function(c,u){var p,g=[],S=function(v,Q){var R=y(Q)?Q():Q;g[g.length]=encodeURIComponent(v)+"="+encodeURIComponent(R==null?"":R)};if(c==null)return"";if(Array.isArray(c)||c.jquery&&!d.isPlainObject(c))d.each(c,function(){S(this.name,this.value)});else for(p in c)Ou(p,c[p],u,S);return g.join("&")},d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var c=d.prop(this,"elements");return c?d.makeArray(c):this}).filter(function(){var c=this.type;return this.name&&!d(this).is(":disabled")&&_1.test(this.nodeName)&&!X1.test(c)&&(this.checked||!Wt.test(c))}).map(function(c,u){var p=d(this).val();return p==null?null:Array.isArray(p)?d.map(p,function(g){return{name:u.name,value:g.replace(fa,`\r +import{a as uc,b as To,c as J1}from"./chunk-JSIZCY7X.js";import{a as Mg}from"./chunk-LNOKARBD.js";import{a as fc}from"./chunk-A7SWO6EA.js";import{a as Lg,b as Vg,c as e$}from"./chunk-BTBOTRE5.js";import{D as Au,J as Eu,t as Ug,u as zg}from"./chunk-V66UDXZ2.js";import{A as Us,E as Or,F as _u,G as ko,I as cc,J as Eg,K as Ru,T as Cu,V as Yg,a as un,b as ba,ba as hc,ca as Zg,d as ci,da as va,e as ku,f as hi,g as ht,h as Tu,k as Rg,m as sc,n as oc,o as ac,p as Zs,q as Cg,t as lc,w as Ag,x as Xu,y as Sa,z as yi}from"./chunk-6VYEJCUW.js";import{a as Ht,b as nc,c as ma,d as $u,e as Pu}from"./chunk-KT7KMEQC.js";var Zu=$u((Dg,Yu)=>{(function(i){if(typeof Dg=="object"&&typeof Yu!="undefined")Yu.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(f,O){if(!s[f]){if(!n[f]){var m=typeof ma=="function"&&ma;if(!O&&m)return m(f,!0);if(l)return l(f,!0);var b=new Error("Cannot find module '"+f+"'");throw b.code="MODULE_NOT_FOUND",b}var y=s[f]={exports:{}};n[f][0].call(y.exports,function(P){var X=n[f][1][P];return a(X||P)},y,y.exports,r,n,s,o)}return s[f].exports}for(var l=typeof ma=="function"&&ma,h=0;h=43)}}).catch(function(){return!1})}function ue(w){return typeof G=="boolean"?m.resolve(G):F(w).then(function(C){return G=C,G})}function Ae(w){var C=q[w.name],k={};k.promise=new m(function(U,M){k.resolve=U,k.reject=M}),C.deferredOperations.push(k),C.dbReady?C.dbReady=C.dbReady.then(function(){return k.promise}):C.dbReady=k.promise}function me(w){var C=q[w.name],k=C.deferredOperations.pop();if(k)return k.resolve(),k.promise}function ie(w,C){var k=q[w.name],U=k.deferredOperations.pop();if(U)return U.reject(C),U.promise}function Te(w,C){return new m(function(k,U){if(q[w.name]=q[w.name]||st(),w.db)if(C)Ae(w),w.db.close();else return k(w.db);var M=[w.name];C&&M.push(w.version);var Z=h.open.apply(h,M);C&&(Z.onupgradeneeded=function(H){var re=Z.result;try{re.createObjectStore(w.storeName),H.oldVersion<=1&&re.createObjectStore(E)}catch(le){if(le.name==="ConstraintError")console.warn('The database "'+w.name+'" has been upgraded from version '+H.oldVersion+" to version "+H.newVersion+', but the storage "'+w.storeName+'" already exists.');else throw le}}),Z.onerror=function(H){H.preventDefault(),U(Z.error)},Z.onsuccess=function(){var H=Z.result;H.onversionchange=function(re){re.target.close()},k(H),me(w)}})}function Ze(w){return Te(w,!1)}function Ne(w){return Te(w,!0)}function te(w,C){if(!w.db)return!0;var k=!w.db.objectStoreNames.contains(w.storeName),U=w.versionw.db.version;if(U&&(w.version!==C&&console.warn('The database "'+w.name+`" can't be downgraded from version `+w.db.version+" to version "+w.version+"."),w.version=w.db.version),M||k){if(k){var Z=w.db.version+1;Z>w.version&&(w.version=Z)}return!0}return!1}function ye(w){return new m(function(C,k){var U=new FileReader;U.onerror=k,U.onloadend=function(M){var Z=btoa(M.target.result||"");C({__local_forage_encoded_blob:!0,data:Z,type:w.type})},U.readAsBinaryString(w)})}function ce(w){var C=j(atob(w.data));return O([C],{type:w.type})}function Me(w){return w&&w.__local_forage_encoded_blob}function je(w){var C=this,k=C._initReady().then(function(){var U=q[C._dbInfo.name];if(U&&U.dbReady)return U.dbReady});return y(k,w,w),k}function We(w){Ae(w);for(var C=q[w.name],k=C.forages,U=0;U0&&(!w.db||Z.name==="InvalidStateError"||Z.name==="NotFoundError"))return m.resolve().then(function(){if(!w.db||Z.name==="NotFoundError"&&!w.db.objectStoreNames.contains(w.storeName)&&w.version<=w.db.version)return w.db&&(w.version=w.db.version+1),Ne(w)}).then(function(){return We(w).then(function(){pt(w,C,k,U-1)})}).catch(k);k(Z)}}function st(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Ai(w){var C=this,k={db:null};if(w)for(var U in w)k[U]=w[U];var M=q[k.name];M||(M=st(),q[k.name]=M),M.forages.push(C),C._initReady||(C._initReady=C.ready,C.ready=je);var Z=[];function H(){return m.resolve()}for(var re=0;re>4,se[M++]=(H&15)<<4|re>>2,se[M++]=(re&3)<<6|le&63;return he}function Si(w){var C=new Uint8Array(w),k="",U;for(U=0;U>2],k+=Jt[(C[U]&3)<<4|C[U+1]>>4],k+=Jt[(C[U+1]&15)<<2|C[U+2]>>6],k+=Jt[C[U+2]&63];return C.length%3===2?k=k.substring(0,k.length-1)+"=":C.length%3===1&&(k=k.substring(0,k.length-2)+"=="),k}function Gi(w,C){var k="";if(w&&(k=bi.call(w)),w&&(k==="[object ArrayBuffer]"||w.buffer&&bi.call(w.buffer)==="[object ArrayBuffer]")){var U,M=Cr;w instanceof ArrayBuffer?(U=w,M+=ei):(U=w.buffer,k==="[object Int8Array]"?M+=tn:k==="[object Uint8Array]"?M+=we:k==="[object Uint8ClampedArray]"?M+=_t:k==="[object Int16Array]"?M+=Ar:k==="[object Uint16Array]"?M+=Wn:k==="[object Int32Array]"?M+=mi:k==="[object Uint32Array]"?M+=qn:k==="[object Float32Array]"?M+=jn:k==="[object Float64Array]"?M+=ar:C(new Error("Failed to get type for BinaryArray"))),C(M+Si(U))}else if(k==="[object Blob]"){var Z=new FileReader;Z.onload=function(){var H=pi+w.type+"~"+Si(this.result);C(Cr+or+H)},Z.readAsArrayBuffer(w)}else try{C(JSON.stringify(w))}catch(H){console.error("Couldn't convert value into a JSON string: ",w),C(null,H)}}function In(w){if(w.substring(0,en)!==Cr)return JSON.parse(w);var C=w.substring(gi),k=w.substring(en,gi),U;if(k===or&&Rr.test(C)){var M=C.match(Rr);U=M[1],C=C.substring(M[0].length)}var Z=Yi(C);switch(k){case ei:return Z;case or:return O([Z],{type:U});case tn:return new Int8Array(Z);case we:return new Uint8Array(Z);case _t:return new Uint8ClampedArray(Z);case Ar:return new Int16Array(Z);case Wn:return new Uint16Array(Z);case mi:return new Int32Array(Z);case qn:return new Uint32Array(Z);case jn:return new Float32Array(Z);case ar:return new Float64Array(Z);default:throw new Error("Unkown type: "+k)}}var rn={serialize:Gi,deserialize:In,stringToBuffer:Yi,bufferToString:Si};function So(w,C,k,U){w.executeSql("CREATE TABLE IF NOT EXISTS "+C.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],k,U)}function Fi(w){var C=this,k={db:null};if(w)for(var U in w)k[U]=typeof w[U]!="string"?w[U].toString():w[U];var M=new m(function(Z,H){try{k.db=openDatabase(k.name,String(k.version),k.description,k.size)}catch(re){return H(re)}k.db.transaction(function(re){So(re,k,function(){C._dbInfo=k,Z()},function(le,he){H(he)})},H)});return k.serializer=rn,M}function Wt(w,C,k,U,M,Z){w.executeSql(k,U,M,function(H,re){re.code===re.SYNTAX_ERR?H.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[C.storeName],function(le,he){he.rows.length?Z(le,re):So(le,C,function(){le.executeSql(k,U,M,Z)},Z)},Z):Z(H,re)},Z)}function vo(w,C){var k=this;w=P(w);var U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"SELECT * FROM "+H.storeName+" WHERE key = ? LIMIT 1",[w],function(le,he){var se=he.rows.length?he.rows.item(0).value:null;se&&(se=H.serializer.deserialize(se)),M(se)},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function nn(w,C){var k=this,U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"SELECT * FROM "+H.storeName,[],function(le,he){for(var se=he.rows,$e=se.length,qe=0;qe<$e;qe++){var ut=se.item(qe),Ot=ut.value;if(Ot&&(Ot=H.serializer.deserialize(Ot)),Ot=w(Ot,ut.key,qe+1),Ot!==void 0){M(Ot);return}}M()},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function ti(w,C,k,U){var M=this;w=P(w);var Z=new m(function(H,re){M.ready().then(function(){C===void 0&&(C=null);var le=C,he=M._dbInfo;he.serializer.serialize(C,function(se,$e){$e?re($e):he.db.transaction(function(qe){Wt(qe,he,"INSERT OR REPLACE INTO "+he.storeName+" (key, value) VALUES (?, ?)",[w,se],function(){H(le)},function(ut,Ot){re(Ot)})},function(qe){if(qe.code===qe.QUOTA_ERR){if(U>0){H(ti.apply(M,[w,le,k,U-1]));return}re(qe)}})})}).catch(re)});return b(Z,k),Z}function Gt(w,C,k){return ti.apply(this,[w,C,k,1])}function kt(w,C){var k=this;w=P(w);var U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"DELETE FROM "+H.storeName+" WHERE key = ?",[w],function(){M()},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function sn(w){var C=this,k=new m(function(U,M){C.ready().then(function(){var Z=C._dbInfo;Z.db.transaction(function(H){Wt(H,Z,"DELETE FROM "+Z.storeName,[],function(){U()},function(re,le){M(le)})})}).catch(M)});return b(k,w),k}function yo(w){var C=this,k=new m(function(U,M){C.ready().then(function(){var Z=C._dbInfo;Z.db.transaction(function(H){Wt(H,Z,"SELECT COUNT(key) as c FROM "+Z.storeName,[],function(re,le){var he=le.rows.item(0).c;U(he)},function(re,le){M(le)})})}).catch(M)});return b(k,w),k}function ws(w,C){var k=this,U=new m(function(M,Z){k.ready().then(function(){var H=k._dbInfo;H.db.transaction(function(re){Wt(re,H,"SELECT key FROM "+H.storeName+" WHERE id = ? LIMIT 1",[w+1],function(le,he){var se=he.rows.length?he.rows.item(0).key:null;M(se)},function(le,he){Z(he)})})}).catch(Z)});return b(U,C),U}function lr(w){var C=this,k=new m(function(U,M){C.ready().then(function(){var Z=C._dbInfo;Z.db.transaction(function(H){Wt(H,Z,"SELECT key FROM "+Z.storeName,[],function(re,le){for(var he=[],se=0;se '__WebKitDatabaseInfoTable__'",[],function(M,Z){for(var H=[],re=0;re0}function Ps(w){var C=this,k={};if(w)for(var U in w)k[U]=w[U];return k.keyPrefix=cr(w,C._defaultConfig),$s()?(C._dbInfo=k,k.serializer=rn,m.resolve()):m.reject()}function Qo(w){var C=this,k=C.ready().then(function(){for(var U=C._dbInfo.keyPrefix,M=localStorage.length-1;M>=0;M--){var Z=localStorage.key(M);Z.indexOf(U)===0&&localStorage.removeItem(Z)}});return b(k,w),k}function Ui(w,C){var k=this;w=P(w);var U=k.ready().then(function(){var M=k._dbInfo,Z=localStorage.getItem(M.keyPrefix+w);return Z&&(Z=M.serializer.deserialize(Z)),Z});return b(U,C),U}function wo(w,C){var k=this,U=k.ready().then(function(){for(var M=k._dbInfo,Z=M.keyPrefix,H=Z.length,re=localStorage.length,le=1,he=0;he=0;H--){var re=localStorage.key(H);re.indexOf(Z)===0&&localStorage.removeItem(re)}}):M=m.reject("Invalid arguments"),b(M,C),M}var ae={_driver:"localStorageWrapper",_initStorage:Ps,_support:Zi(),iterate:wo,getItem:Ui,setItem:ke,removeItem:Ts,clear:Qo,length:Gn,key:Yr,keys:ks,dropInstance:A},xe=function(C,k){return C===k||typeof C=="number"&&typeof k=="number"&&isNaN(C)&&isNaN(k)},mt=function(C,k){for(var U=C.length,M=0;M{(function(i,e){"use strict";typeof Kf=="object"&&typeof Kf.exports=="object"?Kf.exports=i.document?e(i,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(i)})(typeof window!="undefined"?window:Nw,function(i,e){"use strict";var t=[],r=Object.getPrototypeOf,n=t.slice,s=t.flat?function(c){return t.flat.call(c)}:function(c){return t.concat.apply([],c)},o=t.push,a=t.indexOf,l={},h=l.toString,f=l.hasOwnProperty,O=f.toString,m=O.call(Object),b={},y=function(u){return typeof u=="function"&&typeof u.nodeType!="number"&&typeof u.item!="function"},P=function(u){return u!=null&&u===u.window},X=i.document,E={type:!0,src:!0,nonce:!0,noModule:!0};function G(c,u,p){p=p||X;var g,S,v=p.createElement("script");if(v.text=c,u)for(g in E)S=u[g]||u.getAttribute&&u.getAttribute(g),S&&v.setAttribute(g,S);p.head.appendChild(v).parentNode.removeChild(v)}function q(c){return c==null?c+"":typeof c=="object"||typeof c=="function"?l[h.call(c)]||"object":typeof c}var B="3.7.1",V=/HTML$/i,d=function(c,u){return new d.fn.init(c,u)};d.fn=d.prototype={jquery:B,constructor:d,length:0,toArray:function(){return n.call(this)},get:function(c){return c==null?n.call(this):c<0?this[c+this.length]:this[c]},pushStack:function(c){var u=d.merge(this.constructor(),c);return u.prevObject=this,u},each:function(c){return d.each(this,c)},map:function(c){return this.pushStack(d.map(this,function(u,p){return c.call(u,p,u)}))},slice:function(){return this.pushStack(n.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(d.grep(this,function(c,u){return(u+1)%2}))},odd:function(){return this.pushStack(d.grep(this,function(c,u){return u%2}))},eq:function(c){var u=this.length,p=+c+(c<0?u:0);return this.pushStack(p>=0&&p0&&u-1 in c}function F(c,u){return c.nodeName&&c.nodeName.toLowerCase()===u.toLowerCase()}var ue=t.pop,Ae=t.sort,me=t.splice,ie="[\\x20\\t\\r\\n\\f]",Te=new RegExp("^"+ie+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ie+"+$","g");d.contains=function(c,u){var p=u&&u.parentNode;return c===p||!!(p&&p.nodeType===1&&(c.contains?c.contains(p):c.compareDocumentPosition&&c.compareDocumentPosition(p)&16))};var Ze=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function Ne(c,u){return u?c==="\0"?"\uFFFD":c.slice(0,-1)+"\\"+c.charCodeAt(c.length-1).toString(16)+" ":"\\"+c}d.escapeSelector=function(c){return(c+"").replace(Ze,Ne)};var te=X,ye=o;(function(){var c,u,p,g,S,v=ye,Q,R,_,z,N,ee=d.expando,W=0,oe=0,Ve=ec(),ot=ec(),Ie=ec(),ii=ec(),qt=function(T,Y){return T===Y&&(S=!0),0},an="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ln="(?:\\\\[\\da-fA-F]{1,6}"+ie+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",et="\\["+ie+"*("+ln+")(?:"+ie+"*([*^$|!~]?=)"+ie+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+ln+"))|)"+ie+"*\\]",Es=":("+ln+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+et+")*)|.*)\\)|)",ct=new RegExp(ie+"+","g"),Yt=new RegExp("^"+ie+"*,"+ie+"*"),Oa=new RegExp("^"+ie+"*([>+~]|"+ie+")"+ie+"*"),bu=new RegExp(ie+"|>"),cn=new RegExp(Es),da=new RegExp("^"+ln+"$"),hn={ID:new RegExp("^#("+ln+")"),CLASS:new RegExp("^\\.("+ln+")"),TAG:new RegExp("^("+ln+"|[*])"),ATTR:new RegExp("^"+et),PSEUDO:new RegExp("^"+Es),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ie+"*(even|odd|(([+-]|)(\\d*)n|)"+ie+"*(?:([+-]|)"+ie+"*(\\d+)|))"+ie+"*\\)|)","i"),bool:new RegExp("^(?:"+an+")$","i"),needsContext:new RegExp("^"+ie+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ie+"*((?:-\\d)?\\d*)"+ie+"*\\)|)(?=[^-]|$)","i")},Fn=/^(?:input|select|textarea|button)$/i,Hn=/^h\d$/i,fr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Su=/[+~]/,Pn=new RegExp("\\\\[\\da-fA-F]{1,6}"+ie+"?|\\\\([^\\r\\n\\f])","g"),kn=function(T,Y){var D="0x"+T.slice(1)-65536;return Y||(D<0?String.fromCharCode(D+65536):String.fromCharCode(D>>10|55296,D&1023|56320))},I1=function(){Kn()},B1=ic(function(T){return T.disabled===!0&&F(T,"fieldset")},{dir:"parentNode",next:"legend"});function N1(){try{return Q.activeElement}catch(T){}}try{v.apply(t=n.call(te.childNodes),te.childNodes),t[te.childNodes.length].nodeType}catch(T){v={apply:function(Y,D){ye.apply(Y,n.call(D))},call:function(Y){ye.apply(Y,n.call(arguments,1))}}}function St(T,Y,D,I){var K,Oe,be,Xe,Se,He,ze,De=Y&&Y.ownerDocument,Ke=Y?Y.nodeType:9;if(D=D||[],typeof T!="string"||!T||Ke!==1&&Ke!==9&&Ke!==11)return D;if(!I&&(Kn(Y),Y=Y||Q,_)){if(Ke!==11&&(Se=fr.exec(T)))if(K=Se[1]){if(Ke===9)if(be=Y.getElementById(K)){if(be.id===K)return v.call(D,be),D}else return D;else if(De&&(be=De.getElementById(K))&&St.contains(Y,be)&&be.id===K)return v.call(D,be),D}else{if(Se[2])return v.apply(D,Y.getElementsByTagName(T)),D;if((K=Se[3])&&Y.getElementsByClassName)return v.apply(D,Y.getElementsByClassName(K)),D}if(!ii[T+" "]&&(!z||!z.test(T))){if(ze=T,De=Y,Ke===1&&(bu.test(T)||Oa.test(T))){for(De=Su.test(T)&&vu(Y.parentNode)||Y,(De!=Y||!b.scope)&&((Xe=Y.getAttribute("id"))?Xe=d.escapeSelector(Xe):Y.setAttribute("id",Xe=ee)),He=pa(T),Oe=He.length;Oe--;)He[Oe]=(Xe?"#"+Xe:":scope")+" "+tc(He[Oe]);ze=He.join(",")}try{return v.apply(D,De.querySelectorAll(ze)),D}catch(Ye){ii(T,!0)}finally{Xe===ee&&Y.removeAttribute("id")}}}return _g(T.replace(Te,"$1"),Y,D,I)}function ec(){var T=[];function Y(D,I){return T.push(D+" ")>u.cacheLength&&delete Y[T.shift()],Y[D+" "]=I}return Y}function Zr(T){return T[ee]=!0,T}function $o(T){var Y=Q.createElement("fieldset");try{return!!T(Y)}catch(D){return!1}finally{Y.parentNode&&Y.parentNode.removeChild(Y),Y=null}}function G1(T){return function(Y){return F(Y,"input")&&Y.type===T}}function F1(T){return function(Y){return(F(Y,"input")||F(Y,"button"))&&Y.type===T}}function Tg(T){return function(Y){return"form"in Y?Y.parentNode&&Y.disabled===!1?"label"in Y?"label"in Y.parentNode?Y.parentNode.disabled===T:Y.disabled===T:Y.isDisabled===T||Y.isDisabled!==!T&&B1(Y)===T:Y.disabled===T:"label"in Y?Y.disabled===T:!1}}function Ys(T){return Zr(function(Y){return Y=+Y,Zr(function(D,I){for(var K,Oe=T([],D.length,Y),be=Oe.length;be--;)D[K=Oe[be]]&&(D[K]=!(I[K]=D[K]))})})}function vu(T){return T&&typeof T.getElementsByTagName!="undefined"&&T}function Kn(T){var Y,D=T?T.ownerDocument||T:te;return D==Q||D.nodeType!==9||!D.documentElement||(Q=D,R=Q.documentElement,_=!d.isXMLDoc(Q),N=R.matches||R.webkitMatchesSelector||R.msMatchesSelector,R.msMatchesSelector&&te!=Q&&(Y=Q.defaultView)&&Y.top!==Y&&Y.addEventListener("unload",I1),b.getById=$o(function(I){return R.appendChild(I).id=d.expando,!Q.getElementsByName||!Q.getElementsByName(d.expando).length}),b.disconnectedMatch=$o(function(I){return N.call(I,"*")}),b.scope=$o(function(){return Q.querySelectorAll(":scope")}),b.cssHas=$o(function(){try{return Q.querySelector(":has(*,:jqfake)"),!1}catch(I){return!0}}),b.getById?(u.filter.ID=function(I){var K=I.replace(Pn,kn);return function(Oe){return Oe.getAttribute("id")===K}},u.find.ID=function(I,K){if(typeof K.getElementById!="undefined"&&_){var Oe=K.getElementById(I);return Oe?[Oe]:[]}}):(u.filter.ID=function(I){var K=I.replace(Pn,kn);return function(Oe){var be=typeof Oe.getAttributeNode!="undefined"&&Oe.getAttributeNode("id");return be&&be.value===K}},u.find.ID=function(I,K){if(typeof K.getElementById!="undefined"&&_){var Oe,be,Xe,Se=K.getElementById(I);if(Se){if(Oe=Se.getAttributeNode("id"),Oe&&Oe.value===I)return[Se];for(Xe=K.getElementsByName(I),be=0;Se=Xe[be++];)if(Oe=Se.getAttributeNode("id"),Oe&&Oe.value===I)return[Se]}return[]}}),u.find.TAG=function(I,K){return typeof K.getElementsByTagName!="undefined"?K.getElementsByTagName(I):K.querySelectorAll(I)},u.find.CLASS=function(I,K){if(typeof K.getElementsByClassName!="undefined"&&_)return K.getElementsByClassName(I)},z=[],$o(function(I){var K;R.appendChild(I).innerHTML="",I.querySelectorAll("[selected]").length||z.push("\\["+ie+"*(?:value|"+an+")"),I.querySelectorAll("[id~="+ee+"-]").length||z.push("~="),I.querySelectorAll("a#"+ee+"+*").length||z.push(".#.+[+~]"),I.querySelectorAll(":checked").length||z.push(":checked"),K=Q.createElement("input"),K.setAttribute("type","hidden"),I.appendChild(K).setAttribute("name","D"),R.appendChild(I).disabled=!0,I.querySelectorAll(":disabled").length!==2&&z.push(":enabled",":disabled"),K=Q.createElement("input"),K.setAttribute("name",""),I.appendChild(K),I.querySelectorAll("[name='']").length||z.push("\\["+ie+"*name"+ie+"*="+ie+`*(?:''|"")`)}),b.cssHas||z.push(":has"),z=z.length&&new RegExp(z.join("|")),qt=function(I,K){if(I===K)return S=!0,0;var Oe=!I.compareDocumentPosition-!K.compareDocumentPosition;return Oe||(Oe=(I.ownerDocument||I)==(K.ownerDocument||K)?I.compareDocumentPosition(K):1,Oe&1||!b.sortDetached&&K.compareDocumentPosition(I)===Oe?I===Q||I.ownerDocument==te&&St.contains(te,I)?-1:K===Q||K.ownerDocument==te&&St.contains(te,K)?1:g?a.call(g,I)-a.call(g,K):0:Oe&4?-1:1)}),Q}St.matches=function(T,Y){return St(T,null,null,Y)},St.matchesSelector=function(T,Y){if(Kn(T),_&&!ii[Y+" "]&&(!z||!z.test(Y)))try{var D=N.call(T,Y);if(D||b.disconnectedMatch||T.document&&T.document.nodeType!==11)return D}catch(I){ii(Y,!0)}return St(Y,Q,null,[T]).length>0},St.contains=function(T,Y){return(T.ownerDocument||T)!=Q&&Kn(T),d.contains(T,Y)},St.attr=function(T,Y){(T.ownerDocument||T)!=Q&&Kn(T);var D=u.attrHandle[Y.toLowerCase()],I=D&&f.call(u.attrHandle,Y.toLowerCase())?D(T,Y,!_):void 0;return I!==void 0?I:T.getAttribute(Y)},St.error=function(T){throw new Error("Syntax error, unrecognized expression: "+T)},d.uniqueSort=function(T){var Y,D=[],I=0,K=0;if(S=!b.sortStable,g=!b.sortStable&&n.call(T,0),Ae.call(T,qt),S){for(;Y=T[K++];)Y===T[K]&&(I=D.push(K));for(;I--;)me.call(T,D[I],1)}return g=null,T},d.fn.uniqueSort=function(){return this.pushStack(d.uniqueSort(n.apply(this)))},u=d.expr={cacheLength:50,createPseudo:Zr,match:hn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(T){return T[1]=T[1].replace(Pn,kn),T[3]=(T[3]||T[4]||T[5]||"").replace(Pn,kn),T[2]==="~="&&(T[3]=" "+T[3]+" "),T.slice(0,4)},CHILD:function(T){return T[1]=T[1].toLowerCase(),T[1].slice(0,3)==="nth"?(T[3]||St.error(T[0]),T[4]=+(T[4]?T[5]+(T[6]||1):2*(T[3]==="even"||T[3]==="odd")),T[5]=+(T[7]+T[8]||T[3]==="odd")):T[3]&&St.error(T[0]),T},PSEUDO:function(T){var Y,D=!T[6]&&T[2];return hn.CHILD.test(T[0])?null:(T[3]?T[2]=T[4]||T[5]||"":D&&cn.test(D)&&(Y=pa(D,!0))&&(Y=D.indexOf(")",D.length-Y)-D.length)&&(T[0]=T[0].slice(0,Y),T[2]=D.slice(0,Y)),T.slice(0,3))}},filter:{TAG:function(T){var Y=T.replace(Pn,kn).toLowerCase();return T==="*"?function(){return!0}:function(D){return F(D,Y)}},CLASS:function(T){var Y=Ve[T+" "];return Y||(Y=new RegExp("(^|"+ie+")"+T+"("+ie+"|$)"))&&Ve(T,function(D){return Y.test(typeof D.className=="string"&&D.className||typeof D.getAttribute!="undefined"&&D.getAttribute("class")||"")})},ATTR:function(T,Y,D){return function(I){var K=St.attr(I,T);return K==null?Y==="!=":Y?(K+="",Y==="="?K===D:Y==="!="?K!==D:Y==="^="?D&&K.indexOf(D)===0:Y==="*="?D&&K.indexOf(D)>-1:Y==="$="?D&&K.slice(-D.length)===D:Y==="~="?(" "+K.replace(ct," ")+" ").indexOf(D)>-1:Y==="|="?K===D||K.slice(0,D.length+1)===D+"-":!1):!0}},CHILD:function(T,Y,D,I,K){var Oe=T.slice(0,3)!=="nth",be=T.slice(-4)!=="last",Xe=Y==="of-type";return I===1&&K===0?function(Se){return!!Se.parentNode}:function(Se,He,ze){var De,Ke,Ye,$t,zi,li=Oe!==be?"nextSibling":"previousSibling",ur=Se.parentNode,fn=Xe&&Se.nodeName.toLowerCase(),Po=!ze&&!Xe,vi=!1;if(ur){if(Oe){for(;li;){for(Ye=Se;Ye=Ye[li];)if(Xe?F(Ye,fn):Ye.nodeType===1)return!1;zi=li=T==="only"&&!zi&&"nextSibling"}return!0}if(zi=[be?ur.firstChild:ur.lastChild],be&&Po){for(Ke=ur[ee]||(ur[ee]={}),De=Ke[T]||[],$t=De[0]===W&&De[1],vi=$t&&De[2],Ye=$t&&ur.childNodes[$t];Ye=++$t&&Ye&&Ye[li]||(vi=$t=0)||zi.pop();)if(Ye.nodeType===1&&++vi&&Ye===Se){Ke[T]=[W,$t,vi];break}}else if(Po&&(Ke=Se[ee]||(Se[ee]={}),De=Ke[T]||[],$t=De[0]===W&&De[1],vi=$t),vi===!1)for(;(Ye=++$t&&Ye&&Ye[li]||(vi=$t=0)||zi.pop())&&!((Xe?F(Ye,fn):Ye.nodeType===1)&&++vi&&(Po&&(Ke=Ye[ee]||(Ye[ee]={}),Ke[T]=[W,vi]),Ye===Se)););return vi-=K,vi===I||vi%I===0&&vi/I>=0}}},PSEUDO:function(T,Y){var D,I=u.pseudos[T]||u.setFilters[T.toLowerCase()]||St.error("unsupported pseudo: "+T);return I[ee]?I(Y):I.length>1?(D=[T,T,"",Y],u.setFilters.hasOwnProperty(T.toLowerCase())?Zr(function(K,Oe){for(var be,Xe=I(K,Y),Se=Xe.length;Se--;)be=a.call(K,Xe[Se]),K[be]=!(Oe[be]=Xe[Se])}):function(K){return I(K,0,D)}):I}},pseudos:{not:Zr(function(T){var Y=[],D=[],I=wu(T.replace(Te,"$1"));return I[ee]?Zr(function(K,Oe,be,Xe){for(var Se,He=I(K,null,Xe,[]),ze=K.length;ze--;)(Se=He[ze])&&(K[ze]=!(Oe[ze]=Se))}):function(K,Oe,be){return Y[0]=K,I(Y,null,be,D),Y[0]=null,!D.pop()}}),has:Zr(function(T){return function(Y){return St(T,Y).length>0}}),contains:Zr(function(T){return T=T.replace(Pn,kn),function(Y){return(Y.textContent||d.text(Y)).indexOf(T)>-1}}),lang:Zr(function(T){return da.test(T||"")||St.error("unsupported lang: "+T),T=T.replace(Pn,kn).toLowerCase(),function(Y){var D;do if(D=_?Y.lang:Y.getAttribute("xml:lang")||Y.getAttribute("lang"))return D=D.toLowerCase(),D===T||D.indexOf(T+"-")===0;while((Y=Y.parentNode)&&Y.nodeType===1);return!1}}),target:function(T){var Y=i.location&&i.location.hash;return Y&&Y.slice(1)===T.id},root:function(T){return T===R},focus:function(T){return T===N1()&&Q.hasFocus()&&!!(T.type||T.href||~T.tabIndex)},enabled:Tg(!1),disabled:Tg(!0),checked:function(T){return F(T,"input")&&!!T.checked||F(T,"option")&&!!T.selected},selected:function(T){return T.parentNode&&T.parentNode.selectedIndex,T.selected===!0},empty:function(T){for(T=T.firstChild;T;T=T.nextSibling)if(T.nodeType<6)return!1;return!0},parent:function(T){return!u.pseudos.empty(T)},header:function(T){return Hn.test(T.nodeName)},input:function(T){return Fn.test(T.nodeName)},button:function(T){return F(T,"input")&&T.type==="button"||F(T,"button")},text:function(T){var Y;return F(T,"input")&&T.type==="text"&&((Y=T.getAttribute("type"))==null||Y.toLowerCase()==="text")},first:Ys(function(){return[0]}),last:Ys(function(T,Y){return[Y-1]}),eq:Ys(function(T,Y,D){return[D<0?D+Y:D]}),even:Ys(function(T,Y){for(var D=0;DY?I=Y:I=D;--I>=0;)T.push(I);return T}),gt:Ys(function(T,Y,D){for(var I=D<0?D+Y:D;++I1?function(Y,D,I){for(var K=T.length;K--;)if(!T[K](Y,D,I))return!1;return!0}:T[0]}function H1(T,Y,D){for(var I=0,K=Y.length;I-1&&(be[ze]=!(Xe[ze]=Ke))}}else Ye=rc(Ye===Xe?Ye.splice(li,Ye.length):Ye),K?K(null,Xe,Ye,He):v.apply(Xe,Ye)})}function Qu(T){for(var Y,D,I,K=T.length,Oe=u.relative[T[0].type],be=Oe||u.relative[" "],Xe=Oe?1:0,Se=ic(function(De){return De===Y},be,!0),He=ic(function(De){return a.call(Y,De)>-1},be,!0),ze=[function(De,Ke,Ye){var $t=!Oe&&(Ye||Ke!=p)||((Y=Ke).nodeType?Se(De,Ke,Ye):He(De,Ke,Ye));return Y=null,$t}];Xe1&&yu(ze),Xe>1&&tc(T.slice(0,Xe-1).concat({value:T[Xe-2].type===" "?"*":""})).replace(Te,"$1"),D,Xe0,I=T.length>0,K=function(Oe,be,Xe,Se,He){var ze,De,Ke,Ye=0,$t="0",zi=Oe&&[],li=[],ur=p,fn=Oe||I&&u.find.TAG("*",He),Po=W+=ur==null?1:Math.random()||.1,vi=fn.length;for(He&&(p=be==Q||be||He);$t!==vi&&(ze=fn[$t])!=null;$t++){if(I&&ze){for(De=0,!be&&ze.ownerDocument!=Q&&(Kn(ze),Xe=!_);Ke=T[De++];)if(Ke(ze,be||Q,Xe)){v.call(Se,ze);break}He&&(W=Po)}D&&((ze=!Ke&&ze)&&Ye--,Oe&&zi.push(ze))}if(Ye+=$t,D&&$t!==Ye){for(De=0;Ke=Y[De++];)Ke(zi,li,be,Xe);if(Oe){if(Ye>0)for(;$t--;)zi[$t]||li[$t]||(li[$t]=ue.call(Se));li=rc(li)}v.apply(Se,li),He&&!Oe&&li.length>0&&Ye+Y.length>1&&d.uniqueSort(Se)}return He&&(W=Po,p=ur),zi};return D?Zr(K):K}function wu(T,Y){var D,I=[],K=[],Oe=Ie[T+" "];if(!Oe){for(Y||(Y=pa(T)),D=Y.length;D--;)Oe=Qu(Y[D]),Oe[ee]?I.push(Oe):K.push(Oe);Oe=Ie(T,K1(K,I)),Oe.selector=T}return Oe}function _g(T,Y,D,I){var K,Oe,be,Xe,Se,He=typeof T=="function"&&T,ze=!I&&pa(T=He.selector||T);if(D=D||[],ze.length===1){if(Oe=ze[0]=ze[0].slice(0),Oe.length>2&&(be=Oe[0]).type==="ID"&&Y.nodeType===9&&_&&u.relative[Oe[1].type]){if(Y=(u.find.ID(be.matches[0].replace(Pn,kn),Y)||[])[0],Y)He&&(Y=Y.parentNode);else return D;T=T.slice(Oe.shift().value.length)}for(K=hn.needsContext.test(T)?0:Oe.length;K--&&(be=Oe[K],!u.relative[Xe=be.type]);)if((Se=u.find[Xe])&&(I=Se(be.matches[0].replace(Pn,kn),Su.test(Oe[0].type)&&vu(Y.parentNode)||Y))){if(Oe.splice(K,1),T=I.length&&tc(Oe),!T)return v.apply(D,I),D;break}}return(He||wu(T,ze))(I,Y,!_,D,!Y||Su.test(T)&&vu(Y.parentNode)||Y),D}b.sortStable=ee.split("").sort(qt).join("")===ee,Kn(),b.sortDetached=$o(function(T){return T.compareDocumentPosition(Q.createElement("fieldset"))&1}),d.find=St,d.expr[":"]=d.expr.pseudos,d.unique=d.uniqueSort,St.compile=wu,St.select=_g,St.setDocument=Kn,St.tokenize=pa,St.escape=d.escapeSelector,St.getText=d.text,St.isXML=d.isXMLDoc,St.selectors=d.expr,St.support=d.support,St.uniqueSort=d.uniqueSort})();var ce=function(c,u,p){for(var g=[],S=p!==void 0;(c=c[u])&&c.nodeType!==9;)if(c.nodeType===1){if(S&&d(c).is(p))break;g.push(c)}return g},Me=function(c,u){for(var p=[];c;c=c.nextSibling)c.nodeType===1&&c!==u&&p.push(c);return p},je=d.expr.match.needsContext,We=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function pt(c,u,p){return y(u)?d.grep(c,function(g,S){return!!u.call(g,S,g)!==p}):u.nodeType?d.grep(c,function(g){return g===u!==p}):typeof u!="string"?d.grep(c,function(g){return a.call(u,g)>-1!==p}):d.filter(u,c,p)}d.filter=function(c,u,p){var g=u[0];return p&&(c=":not("+c+")"),u.length===1&&g.nodeType===1?d.find.matchesSelector(g,c)?[g]:[]:d.find.matches(c,d.grep(u,function(S){return S.nodeType===1}))},d.fn.extend({find:function(c){var u,p,g=this.length,S=this;if(typeof c!="string")return this.pushStack(d(c).filter(function(){for(u=0;u1?d.uniqueSort(p):p},filter:function(c){return this.pushStack(pt(this,c||[],!1))},not:function(c){return this.pushStack(pt(this,c||[],!0))},is:function(c){return!!pt(this,typeof c=="string"&&je.test(c)?d(c):c||[],!1).length}});var st,Ai=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ft=d.fn.init=function(c,u,p){var g,S;if(!c)return this;if(p=p||st,typeof c=="string")if(c[0]==="<"&&c[c.length-1]===">"&&c.length>=3?g=[null,c,null]:g=Ai.exec(c),g&&(g[1]||!u))if(g[1]){if(u=u instanceof d?u[0]:u,d.merge(this,d.parseHTML(g[1],u&&u.nodeType?u.ownerDocument||u:X,!0)),We.test(g[1])&&d.isPlainObject(u))for(g in u)y(this[g])?this[g](u[g]):this.attr(g,u[g]);return this}else return S=X.getElementById(g[2]),S&&(this[0]=S,this.length=1),this;else return!u||u.jquery?(u||p).find(c):this.constructor(u).find(c);else{if(c.nodeType)return this[0]=c,this.length=1,this;if(y(c))return p.ready!==void 0?p.ready(c):c(d)}return d.makeArray(c,this)};ft.prototype=d.fn,st=d(X);var Ei=/^(?:parents|prev(?:Until|All))/,Jr={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({has:function(c){var u=d(c,this),p=u.length;return this.filter(function(){for(var g=0;g-1:p.nodeType===1&&d.find.matchesSelector(p,c))){v.push(p);break}}return this.pushStack(v.length>1?d.uniqueSort(v):v)},index:function(c){return c?typeof c=="string"?a.call(d(c),this[0]):a.call(this,c.jquery?c[0]:c):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(c,u){return this.pushStack(d.uniqueSort(d.merge(this.get(),d(c,u))))},addBack:function(c){return this.add(c==null?this.prevObject:this.prevObject.filter(c))}});function Tr(c,u){for(;(c=c[u])&&c.nodeType!==1;);return c}d.each({parent:function(c){var u=c.parentNode;return u&&u.nodeType!==11?u:null},parents:function(c){return ce(c,"parentNode")},parentsUntil:function(c,u,p){return ce(c,"parentNode",p)},next:function(c){return Tr(c,"nextSibling")},prev:function(c){return Tr(c,"previousSibling")},nextAll:function(c){return ce(c,"nextSibling")},prevAll:function(c){return ce(c,"previousSibling")},nextUntil:function(c,u,p){return ce(c,"nextSibling",p)},prevUntil:function(c,u,p){return ce(c,"previousSibling",p)},siblings:function(c){return Me((c.parentNode||{}).firstChild,c)},children:function(c){return Me(c.firstChild)},contents:function(c){return c.contentDocument!=null&&r(c.contentDocument)?c.contentDocument:(F(c,"template")&&(c=c.content||c),d.merge([],c.childNodes))}},function(c,u){d.fn[c]=function(p,g){var S=d.map(this,u,p);return c.slice(-5)!=="Until"&&(g=p),g&&typeof g=="string"&&(S=d.filter(g,S)),this.length>1&&(Jr[c]||d.uniqueSort(S),Ei.test(c)&&S.reverse()),this.pushStack(S)}});var di=/[^\x20\t\r\n\f]+/g;function Qs(c){var u={};return d.each(c.match(di)||[],function(p,g){u[g]=!0}),u}d.Callbacks=function(c){c=typeof c=="string"?Qs(c):d.extend({},c);var u,p,g,S,v=[],Q=[],R=-1,_=function(){for(S=S||c.once,g=u=!0;Q.length;R=-1)for(p=Q.shift();++R-1;)v.splice(W,1),W<=R&&R--}),this},has:function(N){return N?d.inArray(N,v)>-1:v.length>0},empty:function(){return v&&(v=[]),this},disable:function(){return S=Q=[],v=p="",this},disabled:function(){return!v},lock:function(){return S=Q=[],!p&&!u&&(v=p=""),this},locked:function(){return!!S},fireWith:function(N,ee){return S||(ee=ee||[],ee=[N,ee.slice?ee.slice():ee],Q.push(ee),u||_()),this},fire:function(){return z.fireWith(this,arguments),this},fired:function(){return!!g}};return z};function Xr(c){return c}function wn(c){throw c}function _r(c,u,p,g){var S;try{c&&y(S=c.promise)?S.call(c).done(u).fail(p):c&&y(S=c.then)?S.call(c,u,p):u.apply(void 0,[c].slice(g))}catch(v){p.apply(void 0,[v])}}d.extend({Deferred:function(c){var u=[["notify","progress",d.Callbacks("memory"),d.Callbacks("memory"),2],["resolve","done",d.Callbacks("once memory"),d.Callbacks("once memory"),0,"resolved"],["reject","fail",d.Callbacks("once memory"),d.Callbacks("once memory"),1,"rejected"]],p="pending",g={state:function(){return p},always:function(){return S.done(arguments).fail(arguments),this},catch:function(v){return g.then(null,v)},pipe:function(){var v=arguments;return d.Deferred(function(Q){d.each(u,function(R,_){var z=y(v[_[4]])&&v[_[4]];S[_[1]](function(){var N=z&&z.apply(this,arguments);N&&y(N.promise)?N.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject):Q[_[0]+"With"](this,z?[N]:arguments)})}),v=null}).promise()},then:function(v,Q,R){var _=0;function z(N,ee,W,oe){return function(){var Ve=this,ot=arguments,Ie=function(){var qt,an;if(!(N<_)){if(qt=W.apply(Ve,ot),qt===ee.promise())throw new TypeError("Thenable self-resolution");an=qt&&(typeof qt=="object"||typeof qt=="function")&&qt.then,y(an)?oe?an.call(qt,z(_,ee,Xr,oe),z(_,ee,wn,oe)):(_++,an.call(qt,z(_,ee,Xr,oe),z(_,ee,wn,oe),z(_,ee,Xr,ee.notifyWith))):(W!==Xr&&(Ve=void 0,ot=[qt]),(oe||ee.resolveWith)(Ve,ot))}},ii=oe?Ie:function(){try{Ie()}catch(qt){d.Deferred.exceptionHook&&d.Deferred.exceptionHook(qt,ii.error),N+1>=_&&(W!==wn&&(Ve=void 0,ot=[qt]),ee.rejectWith(Ve,ot))}};N?ii():(d.Deferred.getErrorHook?ii.error=d.Deferred.getErrorHook():d.Deferred.getStackHook&&(ii.error=d.Deferred.getStackHook()),i.setTimeout(ii))}}return d.Deferred(function(N){u[0][3].add(z(0,N,y(R)?R:Xr,N.notifyWith)),u[1][3].add(z(0,N,y(v)?v:Xr)),u[2][3].add(z(0,N,y(Q)?Q:wn))}).promise()},promise:function(v){return v!=null?d.extend(v,g):g}},S={};return d.each(u,function(v,Q){var R=Q[2],_=Q[5];g[Q[1]]=R.add,_&&R.add(function(){p=_},u[3-v][2].disable,u[3-v][3].disable,u[0][2].lock,u[0][3].lock),R.add(Q[3].fire),S[Q[0]]=function(){return S[Q[0]+"With"](this===S?void 0:this,arguments),this},S[Q[0]+"With"]=R.fireWith}),g.promise(S),c&&c.call(S,S),S},when:function(c){var u=arguments.length,p=u,g=Array(p),S=n.call(arguments),v=d.Deferred(),Q=function(R){return function(_){g[R]=this,S[R]=arguments.length>1?n.call(arguments):_,--u||v.resolveWith(g,S)}};if(u<=1&&(_r(c,v.done(Q(p)).resolve,v.reject,!u),v.state()==="pending"||y(S[p]&&S[p].then)))return v.then();for(;p--;)_r(S[p],Q(p),v.reject);return v.promise()}});var Dn=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;d.Deferred.exceptionHook=function(c,u){i.console&&i.console.warn&&c&&Dn.test(c.name)&&i.console.warn("jQuery.Deferred exception: "+c.message,c.stack,u)},d.readyException=function(c){i.setTimeout(function(){throw c})};var Ni=d.Deferred();d.fn.ready=function(c){return Ni.then(c).catch(function(u){d.readyException(u)}),this},d.extend({isReady:!1,readyWait:1,ready:function(c){(c===!0?--d.readyWait:d.isReady)||(d.isReady=!0,!(c!==!0&&--d.readyWait>0)&&Ni.resolveWith(X,[d]))}}),d.ready.then=Ni.then;function Jt(){X.removeEventListener("DOMContentLoaded",Jt),i.removeEventListener("load",Jt),d.ready()}X.readyState==="complete"||X.readyState!=="loading"&&!X.documentElement.doScroll?i.setTimeout(d.ready):(X.addEventListener("DOMContentLoaded",Jt),i.addEventListener("load",Jt));var pi=function(c,u,p,g,S,v,Q){var R=0,_=c.length,z=p==null;if(q(p)==="object"){S=!0;for(R in p)pi(c,u,R,p[R],!0,v,Q)}else if(g!==void 0&&(S=!0,y(g)||(Q=!0),z&&(Q?(u.call(c,g),u=null):(z=u,u=function(N,ee,W){return z.call(d(N),W)})),u))for(;R<_;R++)u(c[R],p,Q?g:g.call(c[R],R,u(c[R],p)));return S?c:z?u.call(c):_?u(c[0],p):v},Rr=/^-ms-/,Cr=/-([a-z])/g;function en(c,u){return u.toUpperCase()}function ei(c){return c.replace(Rr,"ms-").replace(Cr,en)}var or=function(c){return c.nodeType===1||c.nodeType===9||!+c.nodeType};function tn(){this.expando=d.expando+tn.uid++}tn.uid=1,tn.prototype={cache:function(c){var u=c[this.expando];return u||(u={},or(c)&&(c.nodeType?c[this.expando]=u:Object.defineProperty(c,this.expando,{value:u,configurable:!0}))),u},set:function(c,u,p){var g,S=this.cache(c);if(typeof u=="string")S[ei(u)]=p;else for(g in u)S[ei(g)]=u[g];return S},get:function(c,u){return u===void 0?this.cache(c):c[this.expando]&&c[this.expando][ei(u)]},access:function(c,u,p){return u===void 0||u&&typeof u=="string"&&p===void 0?this.get(c,u):(this.set(c,u,p),p!==void 0?p:u)},remove:function(c,u){var p,g=c[this.expando];if(g!==void 0){if(u!==void 0)for(Array.isArray(u)?u=u.map(ei):(u=ei(u),u=u in g?[u]:u.match(di)||[]),p=u.length;p--;)delete g[u[p]];(u===void 0||d.isEmptyObject(g))&&(c.nodeType?c[this.expando]=void 0:delete c[this.expando])}},hasData:function(c){var u=c[this.expando];return u!==void 0&&!d.isEmptyObject(u)}};var we=new tn,_t=new tn,Ar=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,mi=/[A-Z]/g;function Wn(c){return c==="true"?!0:c==="false"?!1:c==="null"?null:c===+c+""?+c:Ar.test(c)?JSON.parse(c):c}function qn(c,u,p){var g;if(p===void 0&&c.nodeType===1)if(g="data-"+u.replace(mi,"-$&").toLowerCase(),p=c.getAttribute(g),typeof p=="string"){try{p=Wn(p)}catch(S){}_t.set(c,u,p)}else p=void 0;return p}d.extend({hasData:function(c){return _t.hasData(c)||we.hasData(c)},data:function(c,u,p){return _t.access(c,u,p)},removeData:function(c,u){_t.remove(c,u)},_data:function(c,u,p){return we.access(c,u,p)},_removeData:function(c,u){we.remove(c,u)}}),d.fn.extend({data:function(c,u){var p,g,S,v=this[0],Q=v&&v.attributes;if(c===void 0){if(this.length&&(S=_t.get(v),v.nodeType===1&&!we.get(v,"hasDataAttrs"))){for(p=Q.length;p--;)Q[p]&&(g=Q[p].name,g.indexOf("data-")===0&&(g=ei(g.slice(5)),qn(v,g,S[g])));we.set(v,"hasDataAttrs",!0)}return S}return typeof c=="object"?this.each(function(){_t.set(this,c)}):pi(this,function(R){var _;if(v&&R===void 0)return _=_t.get(v,c),_!==void 0||(_=qn(v,c),_!==void 0)?_:void 0;this.each(function(){_t.set(this,c,R)})},null,u,arguments.length>1,null,!0)},removeData:function(c){return this.each(function(){_t.remove(this,c)})}}),d.extend({queue:function(c,u,p){var g;if(c)return u=(u||"fx")+"queue",g=we.get(c,u),p&&(!g||Array.isArray(p)?g=we.access(c,u,d.makeArray(p)):g.push(p)),g||[]},dequeue:function(c,u){u=u||"fx";var p=d.queue(c,u),g=p.length,S=p.shift(),v=d._queueHooks(c,u),Q=function(){d.dequeue(c,u)};S==="inprogress"&&(S=p.shift(),g--),S&&(u==="fx"&&p.unshift("inprogress"),delete v.stop,S.call(c,Q,v)),!g&&v&&v.empty.fire()},_queueHooks:function(c,u){var p=u+"queueHooks";return we.get(c,p)||we.access(c,p,{empty:d.Callbacks("once memory").add(function(){we.remove(c,[u+"queue",p])})})}}),d.fn.extend({queue:function(c,u){var p=2;return typeof c!="string"&&(u=c,c="fx",p--),arguments.length\x20\t\r\n\f]*)/i,nn=/^$|^module$|\/(?:java|ecma)script/i;(function(){var c=X.createDocumentFragment(),u=c.appendChild(X.createElement("div")),p=X.createElement("input");p.setAttribute("type","radio"),p.setAttribute("checked","checked"),p.setAttribute("name","t"),u.appendChild(p),b.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,u.innerHTML="",b.noCloneChecked=!!u.cloneNode(!0).lastChild.defaultValue,u.innerHTML="",b.option=!!u.lastChild})();var ti={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ti.tbody=ti.tfoot=ti.colgroup=ti.caption=ti.thead,ti.th=ti.td,b.option||(ti.optgroup=ti.option=[1,""]);function Gt(c,u){var p;return typeof c.getElementsByTagName!="undefined"?p=c.getElementsByTagName(u||"*"):typeof c.querySelectorAll!="undefined"?p=c.querySelectorAll(u||"*"):p=[],u===void 0||u&&F(c,u)?d.merge([c],p):p}function kt(c,u){for(var p=0,g=c.length;p-1){S&&S.push(v);continue}if(z=Yi(v),Q=Gt(ee.appendChild(v),"script"),z&&kt(Q),p)for(N=0;v=Q[N++];)nn.test(v.type||"")&&p.push(v)}return ee}var ws=/^([^.]*)(?:\.(.+)|)/;function lr(){return!0}function Er(){return!1}function Bn(c,u,p,g,S,v){var Q,R;if(typeof u=="object"){typeof p!="string"&&(g=g||p,p=void 0);for(R in u)Bn(c,R,p,g,u[R],v);return c}if(g==null&&S==null?(S=p,g=p=void 0):S==null&&(typeof p=="string"?(S=g,g=void 0):(S=g,g=p,p=void 0)),S===!1)S=Er;else if(!S)return c;return v===1&&(Q=S,S=function(_){return d().off(_),Q.apply(this,arguments)},S.guid=Q.guid||(Q.guid=d.guid++)),c.each(function(){d.event.add(this,u,S,g,p)})}d.event={global:{},add:function(c,u,p,g,S){var v,Q,R,_,z,N,ee,W,oe,Ve,ot,Ie=we.get(c);if(or(c))for(p.handler&&(v=p,p=v.handler,S=v.selector),S&&d.find.matchesSelector(bi,S),p.guid||(p.guid=d.guid++),(_=Ie.events)||(_=Ie.events=Object.create(null)),(Q=Ie.handle)||(Q=Ie.handle=function(ii){return typeof d!="undefined"&&d.event.triggered!==ii.type?d.event.dispatch.apply(c,arguments):void 0}),u=(u||"").match(di)||[""],z=u.length;z--;)R=ws.exec(u[z])||[],oe=ot=R[1],Ve=(R[2]||"").split(".").sort(),oe&&(ee=d.event.special[oe]||{},oe=(S?ee.delegateType:ee.bindType)||oe,ee=d.event.special[oe]||{},N=d.extend({type:oe,origType:ot,data:g,handler:p,guid:p.guid,selector:S,needsContext:S&&d.expr.match.needsContext.test(S),namespace:Ve.join(".")},v),(W=_[oe])||(W=_[oe]=[],W.delegateCount=0,(!ee.setup||ee.setup.call(c,g,Ve,Q)===!1)&&c.addEventListener&&c.addEventListener(oe,Q)),ee.add&&(ee.add.call(c,N),N.handler.guid||(N.handler.guid=p.guid)),S?W.splice(W.delegateCount++,0,N):W.push(N),d.event.global[oe]=!0)},remove:function(c,u,p,g,S){var v,Q,R,_,z,N,ee,W,oe,Ve,ot,Ie=we.hasData(c)&&we.get(c);if(!(!Ie||!(_=Ie.events))){for(u=(u||"").match(di)||[""],z=u.length;z--;){if(R=ws.exec(u[z])||[],oe=ot=R[1],Ve=(R[2]||"").split(".").sort(),!oe){for(oe in _)d.event.remove(c,oe+u[z],p,g,!0);continue}for(ee=d.event.special[oe]||{},oe=(g?ee.delegateType:ee.bindType)||oe,W=_[oe]||[],R=R[2]&&new RegExp("(^|\\.)"+Ve.join("\\.(?:.*\\.|)")+"(\\.|$)"),Q=v=W.length;v--;)N=W[v],(S||ot===N.origType)&&(!p||p.guid===N.guid)&&(!R||R.test(N.namespace))&&(!g||g===N.selector||g==="**"&&N.selector)&&(W.splice(v,1),N.selector&&W.delegateCount--,ee.remove&&ee.remove.call(c,N));Q&&!W.length&&((!ee.teardown||ee.teardown.call(c,Ve,Ie.handle)===!1)&&d.removeEvent(c,oe,Ie.handle),delete _[oe])}d.isEmptyObject(_)&&we.remove(c,"handle events")}},dispatch:function(c){var u,p,g,S,v,Q,R=new Array(arguments.length),_=d.event.fix(c),z=(we.get(this,"events")||Object.create(null))[_.type]||[],N=d.event.special[_.type]||{};for(R[0]=_,u=1;u=1)){for(;z!==this;z=z.parentNode||this)if(z.nodeType===1&&!(c.type==="click"&&z.disabled===!0)){for(v=[],Q={},p=0;p<_;p++)g=u[p],S=g.selector+" ",Q[S]===void 0&&(Q[S]=g.needsContext?d(S,this).index(z)>-1:d.find(S,this,null,[z]).length),Q[S]&&v.push(g);v.length&&R.push({elem:z,handlers:v})}}return z=this,_\s*$/g;function $s(c,u){return F(c,"table")&&F(u.nodeType!==11?u:u.firstChild,"tr")&&d(c).children("tbody")[0]||c}function Ps(c){return c.type=(c.getAttribute("type")!==null)+"/"+c.type,c}function Qo(c){return(c.type||"").slice(0,5)==="true/"?c.type=c.type.slice(5):c.removeAttribute("type"),c}function Ui(c,u){var p,g,S,v,Q,R,_;if(u.nodeType===1){if(we.hasData(c)&&(v=we.get(c),_=v.events,_)){we.remove(u,"handle events");for(S in _)for(p=0,g=_[S].length;p1&&typeof oe=="string"&&!b.checkClone&&cr.test(oe))return c.each(function(ot){var Ie=c.eq(ot);Ve&&(u[0]=oe.call(this,ot,Ie.html())),Yr(Ie,u,p,g)});if(ee&&(S=yo(u,c[0].ownerDocument,!1,c,g),v=S.firstChild,S.childNodes.length===1&&(S=v),v||g)){for(Q=d.map(Gt(S,"script"),Ps),R=Q.length;N0&&kt(Q,!_&&Gt(c,"script")),R},cleanData:function(c){for(var u,p,g,S=d.event.special,v=0;(p=c[v])!==void 0;v++)if(or(p)){if(u=p[we.expando]){if(u.events)for(g in u.events)S[g]?d.event.remove(p,g):d.removeEvent(p,g,u.handle);p[we.expando]=void 0}p[_t.expando]&&(p[_t.expando]=void 0)}}}),d.fn.extend({detach:function(c){return ks(this,c,!0)},remove:function(c){return ks(this,c)},text:function(c){return pi(this,function(u){return u===void 0?d.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=u)})},null,c,arguments.length)},append:function(){return Yr(this,arguments,function(c){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=$s(this,c);u.appendChild(c)}})},prepend:function(){return Yr(this,arguments,function(c){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=$s(this,c);u.insertBefore(c,u.firstChild)}})},before:function(){return Yr(this,arguments,function(c){this.parentNode&&this.parentNode.insertBefore(c,this)})},after:function(){return Yr(this,arguments,function(c){this.parentNode&&this.parentNode.insertBefore(c,this.nextSibling)})},empty:function(){for(var c,u=0;(c=this[u])!=null;u++)c.nodeType===1&&(d.cleanData(Gt(c,!1)),c.textContent="");return this},clone:function(c,u){return c=c==null?!1:c,u=u==null?c:u,this.map(function(){return d.clone(this,c,u)})},html:function(c){return pi(this,function(u){var p=this[0]||{},g=0,S=this.length;if(u===void 0&&p.nodeType===1)return p.innerHTML;if(typeof u=="string"&&!Zi.test(u)&&!ti[(vo.exec(u)||["",""])[1].toLowerCase()]){u=d.htmlPrefilter(u);try{for(;g=0&&(_+=Math.max(0,Math.ceil(c["offset"+u[0].toUpperCase()+u.slice(1)]-v-_-R-.5))||0),_+z}function Hl(c,u,p){var g=ke(c),S=!b.boxSizingReliable()||p,v=S&&d.css(c,"boxSizing",!1,g)==="border-box",Q=v,R=xe(c,u,g),_="offset"+u[0].toUpperCase()+u.slice(1);if(Gn.test(R)){if(!p)return R;R="auto"}return(!b.boxSizingReliable()&&v||!b.reliableTrDimensions()&&F(c,"tr")||R==="auto"||!parseFloat(R)&&d.css(c,"display",!1,g)==="inline")&&c.getClientRects().length&&(v=d.css(c,"boxSizing",!1,g)==="border-box",Q=_ in c,Q&&(R=c[_])),R=parseFloat(R)||0,R+Rs(c,u,p||(v?"border":"content"),Q,g,R)+"px"}d.extend({cssHooks:{opacity:{get:function(c,u){if(u){var p=xe(c,"opacity");return p===""?"1":p}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(c,u,p,g){if(!(!c||c.nodeType===3||c.nodeType===8||!c.style)){var S,v,Q,R=ei(u),_=Ts.test(u),z=c.style;if(_||(u=hr(R)),Q=d.cssHooks[u]||d.cssHooks[R],p!==void 0){if(v=typeof p,v==="string"&&(S=ar.exec(p))&&S[1]&&(p=In(c,u,S),v="number"),p==null||p!==p)return;v==="number"&&!_&&(p+=S&&S[3]||(d.cssNumber[R]?"":"px")),!b.clearCloneStyle&&p===""&&u.indexOf("background")===0&&(z[u]="inherit"),(!Q||!("set"in Q)||(p=Q.set(c,p,g))!==void 0)&&(_?z.setProperty(u,p):z[u]=p)}else return Q&&"get"in Q&&(S=Q.get(c,!1,g))!==void 0?S:z[u]}},css:function(c,u,p,g){var S,v,Q,R=ei(u),_=Ts.test(u);return _||(u=hr(R)),Q=d.cssHooks[u]||d.cssHooks[R],Q&&"get"in Q&&(S=Q.get(c,!0,p)),S===void 0&&(S=xe(c,u,g)),S==="normal"&&u in Xs&&(S=Xs[u]),p===""||p?(v=parseFloat(S),p===!0||isFinite(v)?v||0:S):S}}),d.each(["height","width"],function(c,u){d.cssHooks[u]={get:function(p,g,S){if(g)return on.test(d.css(p,"display"))&&(!p.getClientRects().length||!p.getBoundingClientRect().width)?A(p,Rt,function(){return Hl(p,u,S)}):Hl(p,u,S)},set:function(p,g,S){var v,Q=ke(p),R=!b.scrollboxSize()&&Q.position==="absolute",_=R||S,z=_&&d.css(p,"boxSizing",!1,Q)==="border-box",N=S?Rs(p,u,S,z,Q):0;return z&&R&&(N-=Math.ceil(p["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(Q[u])-Rs(p,u,"border",!1,Q)-.5)),N&&(v=ar.exec(g))&&(v[3]||"px")!=="px"&&(p.style[u]=g,g=d.css(p,u)),_s(p,g,N)}}}),d.cssHooks.marginLeft=mt(b.reliableMarginLeft,function(c,u){if(u)return(parseFloat(xe(c,"marginLeft"))||c.getBoundingClientRect().left-A(c,{marginLeft:0},function(){return c.getBoundingClientRect().left}))+"px"}),d.each({margin:"",padding:"",border:"Width"},function(c,u){d.cssHooks[c+u]={expand:function(p){for(var g=0,S={},v=typeof p=="string"?p.split(" "):[p];g<4;g++)S[c+gi[g]+u]=v[g]||v[g-2]||v[0];return S}},c!=="margin"&&(d.cssHooks[c+u].set=_s)}),d.fn.extend({css:function(c,u){return pi(this,function(p,g,S){var v,Q,R={},_=0;if(Array.isArray(g)){for(v=ke(p),Q=g.length;_1)}});function oi(c,u,p,g,S){return new oi.prototype.init(c,u,p,g,S)}d.Tween=oi,oi.prototype={constructor:oi,init:function(c,u,p,g,S,v){this.elem=c,this.prop=p,this.easing=S||d.easing._default,this.options=u,this.start=this.now=this.cur(),this.end=g,this.unit=v||(d.cssNumber[p]?"":"px")},cur:function(){var c=oi.propHooks[this.prop];return c&&c.get?c.get(this):oi.propHooks._default.get(this)},run:function(c){var u,p=oi.propHooks[this.prop];return this.options.duration?this.pos=u=d.easing[this.easing](c,this.options.duration*c,0,1,this.options.duration):this.pos=u=c,this.now=(this.end-this.start)*u+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),p&&p.set?p.set(this):oi.propHooks._default.set(this),this}},oi.prototype.init.prototype=oi.prototype,oi.propHooks={_default:{get:function(c){var u;return c.elem.nodeType!==1||c.elem[c.prop]!=null&&c.elem.style[c.prop]==null?c.elem[c.prop]:(u=d.css(c.elem,c.prop,""),!u||u==="auto"?0:u)},set:function(c){d.fx.step[c.prop]?d.fx.step[c.prop](c):c.elem.nodeType===1&&(d.cssHooks[c.prop]||c.elem.style[hr(c.prop)]!=null)?d.style(c.elem,c.prop,c.now+c.unit):c.elem[c.prop]=c.now}}},oi.propHooks.scrollTop=oi.propHooks.scrollLeft={set:function(c){c.elem.nodeType&&c.elem.parentNode&&(c.elem[c.prop]=c.now)}},d.easing={linear:function(c){return c},swing:function(c){return .5-Math.cos(c*Math.PI)/2},_default:"swing"},d.fx=oi.prototype.init,d.fx.step={};var w,C,k=/^(?:toggle|show|hide)$/,U=/queueHooks$/;function M(){C&&(X.hidden===!1&&i.requestAnimationFrame?i.requestAnimationFrame(M):i.setTimeout(M,d.fx.interval),d.fx.tick())}function Z(){return i.setTimeout(function(){w=void 0}),w=Date.now()}function H(c,u){var p,g=0,S={height:c};for(u=u?1:0;g<4;g+=2-u)p=gi[g],S["margin"+p]=S["padding"+p]=c;return u&&(S.opacity=S.width=c),S}function re(c,u,p){for(var g,S=(se.tweeners[u]||[]).concat(se.tweeners["*"]),v=0,Q=S.length;v1)},removeAttr:function(c){return this.each(function(){d.removeAttr(this,c)})}}),d.extend({attr:function(c,u,p){var g,S,v=c.nodeType;if(!(v===3||v===8||v===2)){if(typeof c.getAttribute=="undefined")return d.prop(c,u,p);if((v!==1||!d.isXMLDoc(c))&&(S=d.attrHooks[u.toLowerCase()]||(d.expr.match.bool.test(u)?$e:void 0)),p!==void 0){if(p===null){d.removeAttr(c,u);return}return S&&"set"in S&&(g=S.set(c,p,u))!==void 0?g:(c.setAttribute(u,p+""),p)}return S&&"get"in S&&(g=S.get(c,u))!==null?g:(g=d.find.attr(c,u),g==null?void 0:g)}},attrHooks:{type:{set:function(c,u){if(!b.radioValue&&u==="radio"&&F(c,"input")){var p=c.value;return c.setAttribute("type",u),p&&(c.value=p),u}}}},removeAttr:function(c,u){var p,g=0,S=u&&u.match(di);if(S&&c.nodeType===1)for(;p=S[g++];)c.removeAttribute(p)}}),$e={set:function(c,u,p){return u===!1?d.removeAttr(c,p):c.setAttribute(p,p),p}},d.each(d.expr.match.bool.source.match(/\w+/g),function(c,u){var p=qe[u]||d.find.attr;qe[u]=function(g,S,v){var Q,R,_=S.toLowerCase();return v||(R=qe[_],qe[_]=Q,Q=p(g,S,v)!=null?_:null,qe[_]=R),Q}});var ut=/^(?:input|select|textarea|button)$/i,Ot=/^(?:a|area)$/i;d.fn.extend({prop:function(c,u){return pi(this,d.prop,c,u,arguments.length>1)},removeProp:function(c){return this.each(function(){delete this[d.propFix[c]||c]})}}),d.extend({prop:function(c,u,p){var g,S,v=c.nodeType;if(!(v===3||v===8||v===2))return(v!==1||!d.isXMLDoc(c))&&(u=d.propFix[u]||u,S=d.propHooks[u]),p!==void 0?S&&"set"in S&&(g=S.set(c,p,u))!==void 0?g:c[u]=p:S&&"get"in S&&(g=S.get(c,u))!==null?g:c[u]},propHooks:{tabIndex:{get:function(c){var u=d.find.attr(c,"tabindex");return u?parseInt(u,10):ut.test(c.nodeName)||Ot.test(c.nodeName)&&c.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(d.propHooks.selected={get:function(c){var u=c.parentNode;return u&&u.parentNode&&u.parentNode.selectedIndex,null},set:function(c){var u=c.parentNode;u&&(u.selectedIndex,u.parentNode&&u.parentNode.selectedIndex)}}),d.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){d.propFix[this.toLowerCase()]=this});function yt(c){var u=c.match(di)||[];return u.join(" ")}function bt(c){return c.getAttribute&&c.getAttribute("class")||""}function ai(c){return Array.isArray(c)?c:typeof c=="string"?c.match(di)||[]:[]}d.fn.extend({addClass:function(c){var u,p,g,S,v,Q;return y(c)?this.each(function(R){d(this).addClass(c.call(this,R,bt(this)))}):(u=ai(c),u.length?this.each(function(){if(g=bt(this),p=this.nodeType===1&&" "+yt(g)+" ",p){for(v=0;v-1;)p=p.replace(" "+S+" "," ");Q=yt(p),g!==Q&&this.setAttribute("class",Q)}}):this):this.attr("class","")},toggleClass:function(c,u){var p,g,S,v,Q=typeof c,R=Q==="string"||Array.isArray(c);return y(c)?this.each(function(_){d(this).toggleClass(c.call(this,_,bt(this),u),u)}):typeof u=="boolean"&&R?u?this.addClass(c):this.removeClass(c):(p=ai(c),this.each(function(){if(R)for(v=d(this),S=0;S-1)return!0;return!1}});var Cs=/\r/g;d.fn.extend({val:function(c){var u,p,g,S=this[0];return arguments.length?(g=y(c),this.each(function(v){var Q;this.nodeType===1&&(g?Q=c.call(this,v,d(this).val()):Q=c,Q==null?Q="":typeof Q=="number"?Q+="":Array.isArray(Q)&&(Q=d.map(Q,function(R){return R==null?"":R+""})),u=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()],(!u||!("set"in u)||u.set(this,Q,"value")===void 0)&&(this.value=Q))})):S?(u=d.valHooks[S.type]||d.valHooks[S.nodeName.toLowerCase()],u&&"get"in u&&(p=u.get(S,"value"))!==void 0?p:(p=S.value,typeof p=="string"?p.replace(Cs,""):p==null?"":p)):void 0}}),d.extend({valHooks:{option:{get:function(c){var u=d.find.attr(c,"value");return u!=null?u:yt(d.text(c))}},select:{get:function(c){var u,p,g,S=c.options,v=c.selectedIndex,Q=c.type==="select-one",R=Q?null:[],_=Q?v+1:S.length;for(v<0?g=_:g=Q?v:0;g<_;g++)if(p=S[g],(p.selected||g===v)&&!p.disabled&&(!p.parentNode.disabled||!F(p.parentNode,"optgroup"))){if(u=d(p).val(),Q)return u;R.push(u)}return R},set:function(c,u){for(var p,g,S=c.options,v=d.makeArray(u),Q=S.length;Q--;)g=S[Q],(g.selected=d.inArray(d.valHooks.option.get(g),v)>-1)&&(p=!0);return p||(c.selectedIndex=-1),v}}}}),d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(c,u){if(Array.isArray(u))return c.checked=d.inArray(d(c).val(),u)>-1}},b.checkOn||(d.valHooks[this].get=function(c){return c.getAttribute("value")===null?"on":c.value})});var $n=i.location,Kl={guid:Date.now()},As=/\?/;d.parseXML=function(c){var u,p;if(!c||typeof c!="string")return null;try{u=new i.DOMParser().parseFromString(c,"text/xml")}catch(g){}return p=u&&u.getElementsByTagName("parsererror")[0],(!u||p)&&d.error("Invalid XML: "+(p?d.map(p.childNodes,function(g){return g.textContent}).join(` +`):c)),u};var fu=/^(?:focusinfocus|focusoutblur)$/,Jl=function(c){c.stopPropagation()};d.extend(d.event,{trigger:function(c,u,p,g){var S,v,Q,R,_,z,N,ee,W=[p||X],oe=f.call(c,"type")?c.type:c,Ve=f.call(c,"namespace")?c.namespace.split("."):[];if(v=ee=Q=p=p||X,!(p.nodeType===3||p.nodeType===8)&&!fu.test(oe+d.event.triggered)&&(oe.indexOf(".")>-1&&(Ve=oe.split("."),oe=Ve.shift(),Ve.sort()),_=oe.indexOf(":")<0&&"on"+oe,c=c[d.expando]?c:new d.Event(oe,typeof c=="object"&&c),c.isTrigger=g?2:3,c.namespace=Ve.join("."),c.rnamespace=c.namespace?new RegExp("(^|\\.)"+Ve.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,c.result=void 0,c.target||(c.target=p),u=u==null?[c]:d.makeArray(u,[c]),N=d.event.special[oe]||{},!(!g&&N.trigger&&N.trigger.apply(p,u)===!1))){if(!g&&!N.noBubble&&!P(p)){for(R=N.delegateType||oe,fu.test(R+oe)||(v=v.parentNode);v;v=v.parentNode)W.push(v),Q=v;Q===(p.ownerDocument||X)&&W.push(Q.defaultView||Q.parentWindow||i)}for(S=0;(v=W[S++])&&!c.isPropagationStopped();)ee=v,c.type=S>1?R:N.bindType||oe,z=(we.get(v,"events")||Object.create(null))[c.type]&&we.get(v,"handle"),z&&z.apply(v,u),z=_&&v[_],z&&z.apply&&or(v)&&(c.result=z.apply(v,u),c.result===!1&&c.preventDefault());return c.type=oe,!g&&!c.isDefaultPrevented()&&(!N._default||N._default.apply(W.pop(),u)===!1)&&or(p)&&_&&y(p[oe])&&!P(p)&&(Q=p[_],Q&&(p[_]=null),d.event.triggered=oe,c.isPropagationStopped()&&ee.addEventListener(oe,Jl),p[oe](),c.isPropagationStopped()&&ee.removeEventListener(oe,Jl),d.event.triggered=void 0,Q&&(p[_]=Q)),c.result}},simulate:function(c,u,p){var g=d.extend(new d.Event,p,{type:c,isSimulated:!0});d.event.trigger(g,null,u)}}),d.fn.extend({trigger:function(c,u){return this.each(function(){d.event.trigger(c,u,this)})},triggerHandler:function(c,u){var p=this[0];if(p)return d.event.trigger(c,u,p,!0)}});var uu=/\[\]$/,fa=/\r?\n/g,R1=/^(?:submit|button|image|reset|file)$/i,C1=/^(?:input|select|textarea|keygen)/i;function Ou(c,u,p,g){var S;if(Array.isArray(u))d.each(u,function(v,Q){p||uu.test(c)?g(c,Q):Ou(c+"["+(typeof Q=="object"&&Q!=null?v:"")+"]",Q,p,g)});else if(!p&&q(u)==="object")for(S in u)Ou(c+"["+S+"]",u[S],p,g);else g(c,u)}d.param=function(c,u){var p,g=[],S=function(v,Q){var R=y(Q)?Q():Q;g[g.length]=encodeURIComponent(v)+"="+encodeURIComponent(R==null?"":R)};if(c==null)return"";if(Array.isArray(c)||c.jquery&&!d.isPlainObject(c))d.each(c,function(){S(this.name,this.value)});else for(p in c)Ou(p,c[p],u,S);return g.join("&")},d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var c=d.prop(this,"elements");return c?d.makeArray(c):this}).filter(function(){var c=this.type;return this.name&&!d(this).is(":disabled")&&C1.test(this.nodeName)&&!R1.test(c)&&(this.checked||!Wt.test(c))}).map(function(c,u){var p=d(this).val();return p==null?null:Array.isArray(p)?d.map(p,function(g){return{name:u.name,value:g.replace(fa,`\r `)}}):{name:u.name,value:p.replace(fa,`\r -`)}}).get()}});var R1=/%20/g,C1=/#.*$/,A1=/([?&])_=[^&]*/,E1=/^(.*?):[ \t]*([^\r\n]*)$/mg,Y1=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Z1=/^(?:GET|HEAD)$/,U1=/^\/\//,xg={},du={},Qg="*/".concat("*"),pu=X.createElement("a");pu.href=$n.href;function wg(c){return function(u,p){typeof u!="string"&&(p=u,u="*");var g,S=0,v=u.toLowerCase().match(di)||[];if(y(p))for(;g=v[S++];)g[0]==="+"?(g=g.slice(1)||"*",(c[g]=c[g]||[]).unshift(p)):(c[g]=c[g]||[]).push(p)}}function $g(c,u,p,g){var S={},v=c===du;function Q(R){var _;return S[R]=!0,d.each(c[R]||[],function(z,B){var ee=B(u,p,g);if(typeof ee=="string"&&!v&&!S[ee])return u.dataTypes.unshift(ee),Q(ee),!1;if(v)return!(_=ee)}),_}return Q(u.dataTypes[0])||!S["*"]&&Q("*")}function mu(c,u){var p,g,S=d.ajaxSettings.flatOptions||{};for(p in u)u[p]!==void 0&&((S[p]?c:g||(g={}))[p]=u[p]);return g&&d.extend(!0,c,g),c}function z1(c,u,p){for(var g,S,v,Q,R=c.contents,_=c.dataTypes;_[0]==="*";)_.shift(),g===void 0&&(g=c.mimeType||u.getResponseHeader("Content-Type"));if(g){for(S in R)if(R[S]&&R[S].test(g)){_.unshift(S);break}}if(_[0]in p)v=_[0];else{for(S in p){if(!_[0]||c.converters[S+" "+_[0]]){v=S;break}Q||(Q=S)}v=v||Q}if(v)return v!==_[0]&&_.unshift(v),p[v]}function L1(c,u,p,g){var S,v,Q,R,_,z={},B=c.dataTypes.slice();if(B[1])for(Q in c.converters)z[Q.toLowerCase()]=c.converters[Q];for(v=B.shift();v;)if(c.responseFields[v]&&(p[c.responseFields[v]]=u),!_&&g&&c.dataFilter&&(u=c.dataFilter(u,c.dataType)),_=v,v=B.shift(),v){if(v==="*")v=_;else if(_!=="*"&&_!==v){if(Q=z[_+" "+v]||z["* "+v],!Q){for(S in z)if(R=S.split(" "),R[1]===v&&(Q=z[_+" "+R[0]]||z["* "+R[0]],Q)){Q===!0?Q=z[S]:z[S]!==!0&&(v=R[0],B.unshift(R[1]));break}}if(Q!==!0)if(Q&&c.throws)u=Q(u);else try{u=Q(u)}catch(ee){return{state:"parsererror",error:Q?ee:"No conversion from "+_+" to "+v}}}}return{state:"success",data:u}}d.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:$n.href,type:"GET",isLocal:Y1.test($n.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qg,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":d.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(c,u){return u?mu(mu(c,d.ajaxSettings),u):mu(d.ajaxSettings,c)},ajaxPrefilter:wg(xg),ajaxTransport:wg(du),ajax:function(c,u){typeof c=="object"&&(u=c,c=void 0),u=u||{};var p,g,S,v,Q,R,_,z,B,ee,W=d.ajaxSetup({},u),oe=W.context||W,Ve=W.context&&(oe.nodeType||oe.jquery)?d(oe):d.event,ot=d.Deferred(),Ie=d.Callbacks("once memory"),ii=W.statusCode||{},qt={},an={},ln="canceled",et={readyState:0,getResponseHeader:function(ct){var Yt;if(_){if(!v)for(v={};Yt=E1.exec(S);)v[Yt[1].toLowerCase()+" "]=(v[Yt[1].toLowerCase()+" "]||[]).concat(Yt[2]);Yt=v[ct.toLowerCase()+" "]}return Yt==null?null:Yt.join(", ")},getAllResponseHeaders:function(){return _?S:null},setRequestHeader:function(ct,Yt){return _==null&&(ct=an[ct.toLowerCase()]=an[ct.toLowerCase()]||ct,qt[ct]=Yt),this},overrideMimeType:function(ct){return _==null&&(W.mimeType=ct),this},statusCode:function(ct){var Yt;if(ct)if(_)et.always(ct[et.status]);else for(Yt in ct)ii[Yt]=[ii[Yt],ct[Yt]];return this},abort:function(ct){var Yt=ct||ln;return p&&p.abort(Yt),Es(0,Yt),this}};if(ot.promise(et),W.url=((c||W.url||$n.href)+"").replace(U1,$n.protocol+"//"),W.type=u.method||u.type||W.method||W.type,W.dataTypes=(W.dataType||"*").toLowerCase().match(di)||[""],W.crossDomain==null){R=X.createElement("a");try{R.href=W.url,R.href=R.href,W.crossDomain=pu.protocol+"//"+pu.host!=R.protocol+"//"+R.host}catch(ct){W.crossDomain=!0}}if(W.data&&W.processData&&typeof W.data!="string"&&(W.data=d.param(W.data,W.traditional)),$g(xg,W,u,et),_)return et;z=d.event&&W.global,z&&d.active++===0&&d.event.trigger("ajaxStart"),W.type=W.type.toUpperCase(),W.hasContent=!Z1.test(W.type),g=W.url.replace(C1,""),W.hasContent?W.data&&W.processData&&(W.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(W.data=W.data.replace(R1,"+")):(ee=W.url.slice(g.length),W.data&&(W.processData||typeof W.data=="string")&&(g+=(As.test(g)?"&":"?")+W.data,delete W.data),W.cache===!1&&(g=g.replace(A1,"$1"),ee=(As.test(g)?"&":"?")+"_="+Kl.guid+++ee),W.url=g+ee),W.ifModified&&(d.lastModified[g]&&et.setRequestHeader("If-Modified-Since",d.lastModified[g]),d.etag[g]&&et.setRequestHeader("If-None-Match",d.etag[g])),(W.data&&W.hasContent&&W.contentType!==!1||u.contentType)&&et.setRequestHeader("Content-Type",W.contentType),et.setRequestHeader("Accept",W.dataTypes[0]&&W.accepts[W.dataTypes[0]]?W.accepts[W.dataTypes[0]]+(W.dataTypes[0]!=="*"?", "+Qg+"; q=0.01":""):W.accepts["*"]);for(B in W.headers)et.setRequestHeader(B,W.headers[B]);if(W.beforeSend&&(W.beforeSend.call(oe,et,W)===!1||_))return et.abort();if(ln="abort",Ie.add(W.complete),et.done(W.success),et.fail(W.error),p=$g(du,W,u,et),!p)Es(-1,"No Transport");else{if(et.readyState=1,z&&Ve.trigger("ajaxSend",[et,W]),_)return et;W.async&&W.timeout>0&&(Q=i.setTimeout(function(){et.abort("timeout")},W.timeout));try{_=!1,p.send(qt,Es)}catch(ct){if(_)throw ct;Es(-1,ct)}}function Es(ct,Yt,Oa,bu){var cn,da,hn,Fn,Hn,fr=Yt;_||(_=!0,Q&&i.clearTimeout(Q),p=void 0,S=bu||"",et.readyState=ct>0?4:0,cn=ct>=200&&ct<300||ct===304,Oa&&(Fn=z1(W,et,Oa)),!cn&&d.inArray("script",W.dataTypes)>-1&&d.inArray("json",W.dataTypes)<0&&(W.converters["text script"]=function(){}),Fn=L1(W,Fn,et,cn),cn?(W.ifModified&&(Hn=et.getResponseHeader("Last-Modified"),Hn&&(d.lastModified[g]=Hn),Hn=et.getResponseHeader("etag"),Hn&&(d.etag[g]=Hn)),ct===204||W.type==="HEAD"?fr="nocontent":ct===304?fr="notmodified":(fr=Fn.state,da=Fn.data,hn=Fn.error,cn=!hn)):(hn=fr,(ct||!fr)&&(fr="error",ct<0&&(ct=0))),et.status=ct,et.statusText=(Yt||fr)+"",cn?ot.resolveWith(oe,[da,fr,et]):ot.rejectWith(oe,[et,fr,hn]),et.statusCode(ii),ii=void 0,z&&Ve.trigger(cn?"ajaxSuccess":"ajaxError",[et,W,cn?da:hn]),Ie.fireWith(oe,[et,fr]),z&&(Ve.trigger("ajaxComplete",[et,W]),--d.active||d.event.trigger("ajaxStop")))}return et},getJSON:function(c,u,p){return d.get(c,u,p,"json")},getScript:function(c,u){return d.get(c,void 0,u,"script")}}),d.each(["get","post"],function(c,u){d[u]=function(p,g,S,v){return y(g)&&(v=v||S,S=g,g=void 0),d.ajax(d.extend({url:p,type:u,dataType:v,data:g,success:S},d.isPlainObject(p)&&p))}}),d.ajaxPrefilter(function(c){var u;for(u in c.headers)u.toLowerCase()==="content-type"&&(c.contentType=c.headers[u]||"")}),d._evalUrl=function(c,u,p){return d.ajax({url:c,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(g){d.globalEval(g,u,p)}})},d.fn.extend({wrapAll:function(c){var u;return this[0]&&(y(c)&&(c=c.call(this[0])),u=d(c,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&u.insertBefore(this[0]),u.map(function(){for(var p=this;p.firstElementChild;)p=p.firstElementChild;return p}).append(this)),this},wrapInner:function(c){return y(c)?this.each(function(u){d(this).wrapInner(c.call(this,u))}):this.each(function(){var u=d(this),p=u.contents();p.length?p.wrapAll(c):u.append(c)})},wrap:function(c){var u=y(c);return this.each(function(p){d(this).wrapAll(u?c.call(this,p):c)})},unwrap:function(c){return this.parent(c).not("body").each(function(){d(this).replaceWith(this.childNodes)}),this}}),d.expr.pseudos.hidden=function(c){return!d.expr.pseudos.visible(c)},d.expr.pseudos.visible=function(c){return!!(c.offsetWidth||c.offsetHeight||c.getClientRects().length)},d.ajaxSettings.xhr=function(){try{return new i.XMLHttpRequest}catch(c){}};var M1={0:200,1223:204},ua=d.ajaxSettings.xhr();b.cors=!!ua&&"withCredentials"in ua,b.ajax=ua=!!ua,d.ajaxTransport(function(c){var u,p;if(b.cors||ua&&!c.crossDomain)return{send:function(g,S){var v,Q=c.xhr();if(Q.open(c.type,c.url,c.async,c.username,c.password),c.xhrFields)for(v in c.xhrFields)Q[v]=c.xhrFields[v];c.mimeType&&Q.overrideMimeType&&Q.overrideMimeType(c.mimeType),!c.crossDomain&&!g["X-Requested-With"]&&(g["X-Requested-With"]="XMLHttpRequest");for(v in g)Q.setRequestHeader(v,g[v]);u=function(R){return function(){u&&(u=p=Q.onload=Q.onerror=Q.onabort=Q.ontimeout=Q.onreadystatechange=null,R==="abort"?Q.abort():R==="error"?typeof Q.status!="number"?S(0,"error"):S(Q.status,Q.statusText):S(M1[Q.status]||Q.status,Q.statusText,(Q.responseType||"text")!=="text"||typeof Q.responseText!="string"?{binary:Q.response}:{text:Q.responseText},Q.getAllResponseHeaders()))}},Q.onload=u(),p=Q.onerror=Q.ontimeout=u("error"),Q.onabort!==void 0?Q.onabort=p:Q.onreadystatechange=function(){Q.readyState===4&&i.setTimeout(function(){u&&p()})},u=u("abort");try{Q.send(c.hasContent&&c.data||null)}catch(R){if(u)throw R}},abort:function(){u&&u()}}}),d.ajaxPrefilter(function(c){c.crossDomain&&(c.contents.script=!1)}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(c){return d.globalEval(c),c}}}),d.ajaxPrefilter("script",function(c){c.cache===void 0&&(c.cache=!1),c.crossDomain&&(c.type="GET")}),d.ajaxTransport("script",function(c){if(c.crossDomain||c.scriptAttrs){var u,p;return{send:function(g,S){u=d("