{"version":3,"sources":["src/patternarium.ts","src/canvasUI.ts","src/player.ts","src/utils.ts","src/geometry.ts","src/background.ts","src/cloudWorker.ts","src/splashscreen.ts","src/infopanel.ts","src/playlist.ts","src/helpscreen.ts","packages/assert@0.0.0","packages/fuse-box-css@0.0.1","packages/process@0.0.0","packages/tslib@1.9.3","packages/util@0.0.0"],"names":[],"mappings":"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,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,C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AAC,MAAM,CAAC;IAChC,CAAC;IACD,8BAAS,GAAT,UAAU,GAAgB,EAAE,OAAgB;QAC3C,aAAa;QACb,IAAM,CAAC,GAAG,GAAG,CAAC;QACd,OAAO,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IACD,4BAAO,GAAP,UAAQ,GAAgB,EAAE,OAAgB;QACzC,aAAa;QACb,IAAM,CAAC,GAAG,GAAG,CAAC;QACd,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YACxD,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;SACpB;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,2BAAM,GAAN,UAAO,MAAgC,EAAE,KAAa;QACrD,aAAa;QACb,IAAM,CAAC,GAAG,KAAK,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACzB;IACF,CAAC;IACF,iBAAC;AAAD,CA9BA,AA8BC,IAAA;AA9BY,gCAAU;;;;;ACjBvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"","sourcesContent":["/*\n\nrequires:\n\n\tES6 Promises\n\n\n*/\n\nimport \"./assets/patternarium.css\";\n\nimport * as assert from \"assert\";\n\nimport { UIElementCollection, ButtonCore, Button, VectorStyleCollection, Label, MouseEventToOffset, TouchEventToOffset, PopupButton, Animator } from \"./canvasUI\";\nimport { Player, PatternData, IPtnData } from \"./player\";\nimport { Background } from \"./background\";\nimport { SplashScreen } from \"./splashscreen\";\nimport { getJSON, copyToClipboard, getHTTP, SVGtoPath2D, trace } from \"./utils\";\nimport { InfoPanel, INFOPANEL_WIDTH } from './infopanel';\nimport { PlayList, ListEntry, IGenerationList } from './playlist';\nimport { HelpDimmer, HelpScreen } from './helpscreen';\n\nconst DEFAULT_FILE_URL = \"https://soniccharge.com/monkeyfiles/\";\nconst DEFAULT_API_URL = \"https://soniccharge.com/monkeyapi/\";\n\nconst VERSION: string = \"{{build.VERSION}}\";\nconst TARGET: string = \"{{build.TARGET}}\";\n\nconst BASE_CLASSNAME = \"ptn\";\nconst WINDOW_CLASSNAME = BASE_CLASSNAME + \"-win\";\nconst CANVAS_CLASSNAME = BASE_CLASSNAME + \"-gui\";\n\nconst LOCALSTORAGE_KEY = \"patternarium\";\n\nconst VIEW_BASE_SIZE = 540;\nconst PATTERNNAME_SIZE: number = 24;\nconst IDLE_SCROLL = 1 / 600;\nconst UI_SCALE = 1.0;\nconst ICON_SIZE = 100;\nconst ICON_PADDING = 6;\nconst ICON_SCALE = 0.74;\n\n\nconst STYLE_BTN_BORDER_NORMAL = { fill: \"#ffffff08\", stroke: \"#ffffff88\", width: 1 };\nconst STYLE_BTN_BORDER_NORMAL_HOVER = { fill: \"#ffffff14\", stroke: \"#ffffff99\", width: 2 };\nconst STYLE_BTN_BORDER_NORMAL_DOWN = { fill: \"#ffffff31\", stroke: \"#ffffffee\", width: 2 };\nconst STYLE_BTN_BORDER_NORMAL_DISABLED = { fill: \"#ffffff08\", stroke: \"#ffffff44\", width: 1 };\n\nconst STYLE_STROKE_ICON_NORMAL = { fill: \"#00000044\", stroke: \"#ffffffee\", width: 1.8 };\nconst STYLE_STROKE_ICON_NORMAL_HOVER = { fill: \"#00000044\", stroke: \"#ffffffee\", width: 3 };\nconst STYLE_STROKE_ICON_NORMAL_DOWN = { fill: \"#ffffffee\", stroke: \"#00000044\", width: 2 };\nconst STYLE_STROKE_ICON_NORMAL_DISABLED = { stroke: \"#ffffff33\", width: 1 };\n\nconst STYLE_FILL_ICON_NORMAL = { fill: \"#ffffffee\", stroke: \"#00000088\", width: 0 };\nconst STYLE_FILL_ICON_NORMAL_HOVER = { fill: \"#ffffffee\", stroke: \"#ffffff88\", width: 1 };\nconst STYLE_FILL_ICON_NORMAL_DOWN = { fill: \"#ffffffff\", stroke: \"#ffffffaa\", width: 1 };\nconst STYLE_FILL_ICON_NORMAL_DISABLED = { fill: \"#ffffff11\", width: 1 };\n\n\nconst STYLE_ICON_PLAY: VectorStyleCollection = {\n\tchecked: { fill: \"#ffffff44\", stroke: \"#00000044\", width: 1 },\n\tnormalHover: { fill: \"#ffffff55\", stroke: \"#00000055\", width: 1 },\n\tnormalDown: { fill: \"#ffffffee\", stroke: \"#00000088\", width: 1 }\n};\nconst STYLE_ICON_STOP: VectorStyleCollection = {\n\tnormalDown: { fill: \"#ffffffee\", stroke: \"#00000088\", width: 1 }\n};\n\nconst STYLE_BTN_NAVBUTTONS: VectorStyleCollection = {\n\tnormalHover: { fill: \"#ffffff08\" },\n\tnormalDown: { fill: \"#ffffff10\" }\n};\nconst STYLE_ICON_NAVBUTTONS: VectorStyleCollection = {\n\tnormal: { fill: \"#ffffff99\" },\n\tnormalHover: { fill: \"#ffffffee\" },\n\tnormalDown: { fill: \"#ffffffee\", stroke: \"#00000044\", width: 2 },\n\tnormalDisabled: {}\n};\nconst STYLE_ICON_FOLDBUTTON: VectorStyleCollection = {\n\tnormal: { fill: \"#ffffff55\" },\n\tnormalHover: { fill: \"#ffffffee\" },\n\tnormalDown: { fill: \"#ffffffee\", stroke: \"#00000044\", width: 2 },\n\tnormalDisabled: {}\n};\n\nconst STYLE_BTN_VOTEUP: VectorStyleCollection = {\n\tnormal: STYLE_BTN_BORDER_NORMAL,\n\tnormalDisabled: { fill: \"#00000000\", stroke: \"#ffffff22\", width: 1 },\n\tnormalHover: STYLE_BTN_BORDER_NORMAL_HOVER,\n\tnormalDown: { fill: \"#33ff3331\", stroke: \"#33ff33ee\", width: 2 },\n\tcheckedDisabled: { fill: \"#33ff3314\", stroke: \"#33ff3388\", width: 1 }\n};\nconst STYLE_ICON_VOTEUP: VectorStyleCollection = {\n\tnormal: STYLE_STROKE_ICON_NORMAL,\n\tnormalHover: STYLE_STROKE_ICON_NORMAL_HOVER,\n\tnormalDown: { fill: \"#33ff33ee\", stroke: \"#00000044\", width: 2 },\n\tnormalDisabled: { stroke: \"#ffffff22\", width: 1 },\n\tcheckedDisabled: { fill: \"#33ff3388\", stroke: \"#66ff66ee\", width: 2 }\n};\nconst STYLE_BTN_VOTEDOWN: VectorStyleCollection = {\n\tnormal: STYLE_BTN_BORDER_NORMAL,\n\tnormalDisabled: { fill: \"#00000000\", stroke: \"#ffffff22\", width: 1 },\n\tnormalHover: STYLE_BTN_BORDER_NORMAL_HOVER,\n\tnormalDown: { fill: \"#ff333331\", stroke: \"#ff3333ee\", width: 2 },\n\tcheckedDisabled: { fill: \"#ff333314\", stroke: \"#ff333388\", width: 1 }\n};\nconst STYLE_ICON_VOTEDOWN: VectorStyleCollection = {\n\tnormal: STYLE_STROKE_ICON_NORMAL,\n\tnormalHover: STYLE_STROKE_ICON_NORMAL_HOVER,\n\tnormalDown: { fill: \"#ff3333ee\", stroke: \"#00000044\", width: 2 },\n\tnormalDisabled: { stroke: \"#ffffff22\", width: 1 },\n\tcheckedDisabled: { fill: \"#ff333388\", stroke: \"#ff6666ee\", width: 2 }\n};\n\nconst STYLE_BTN_FILTER: VectorStyleCollection = {\n\tnormal: STYLE_BTN_BORDER_NORMAL,\n\tnormalDisabled: STYLE_BTN_BORDER_NORMAL_DISABLED,\n\tnormalHover: STYLE_BTN_BORDER_NORMAL_HOVER,\n\tnormalDown: STYLE_BTN_BORDER_NORMAL_DOWN,\n\tchecked: { fill: \"#3b3918ae\", stroke: \"#c9bf5aee\", width: 1 },\n\tcheckedHover: { fill: \"#4b4928ae\", stroke: \"#c9bf5af1\", width: 2 },\n\tcheckedDown: { fill: \"#5b5938e4\", stroke: \"#c9bf5af8\", width: 2 }\n};\nconst STYLE_ICON_FILTER: VectorStyleCollection = {\n\tnormal: STYLE_FILL_ICON_NORMAL,\n\tnormalHover: STYLE_FILL_ICON_NORMAL_HOVER,\n\tnormalDown: STYLE_FILL_ICON_NORMAL_DOWN,\n\tnormalDisabled: STYLE_FILL_ICON_NORMAL_DISABLED,\n\tchecked: { fill: \"#cfc86fee\", stroke: \"#00000044\", width: 1 },\n\tcheckedHover: { fill: \"#cfc86ff1\", stroke: \"#00000044\", width: 1 },\n\tcheckedDown: { fill: \"#c9bf5aff\", stroke: \"#00000044\", width: 1 }\n};\n\nconst STYLE_BTN_COPY: VectorStyleCollection = {\n\tnormal: STYLE_BTN_BORDER_NORMAL,\n\tnormalDisabled: STYLE_BTN_BORDER_NORMAL_DISABLED,\n\tnormalHover: STYLE_BTN_BORDER_NORMAL_HOVER,\n\tnormalDown: STYLE_BTN_BORDER_NORMAL_DOWN,\n\tchecked: { fill: \"#2266ff33\", stroke: \"#3388ff88\", width: 1 },\n\tcheckedHover: { fill: \"#2266ff33\", stroke: \"#3388ff88\", width: 1 },\n\tcheckedDown: { fill: \"#2266ff33\", stroke: \"#3388ff88\", width: 1 }\n};\nconst STYLE_ICON_COPY: VectorStyleCollection = {\n\tnormal: STYLE_FILL_ICON_NORMAL,\n\tnormalHover: STYLE_FILL_ICON_NORMAL_HOVER,\n\tnormalDown: STYLE_FILL_ICON_NORMAL_DOWN,\n\tnormalDisabled: STYLE_FILL_ICON_NORMAL_DISABLED,\n\tchecked: { fill: \"#3388ffcc\", stroke: \"#00000044\", width: 1 },\n\tcheckedHover: { fill: \"#4499ffdd\", stroke: \"#00000044\", width: 1 },\n\tcheckedDown: { fill: \"#55aaff44\t\", stroke: \"#00000044\", width: 1 }\n};\n\nconst STYLE_BTN_FAVORITE: VectorStyleCollection = {\n\tnormal: STYLE_BTN_BORDER_NORMAL,\n\tnormalDisabled: STYLE_BTN_BORDER_NORMAL_DISABLED,\n\tnormalHover: STYLE_BTN_BORDER_NORMAL_HOVER,\n\tnormalDown: STYLE_BTN_BORDER_NORMAL_DOWN,\n\tchecked: { fill: \"#ff662233\", stroke: \"#ff883388\", width: 1 },\n\tcheckedHover: { fill: \"#ff662233\", stroke: \"#ff883388\", width: 1 },\n\tcheckedDown: { fill: \"#ff662233\", stroke: \"#ff883388\", width: 1 }\n};\nconst STYLE_ICON_FAVORITE: VectorStyleCollection = {\n\tnormal: STYLE_STROKE_ICON_NORMAL,\n\tnormalHover: STYLE_STROKE_ICON_NORMAL_HOVER,\n\tnormalDown: STYLE_STROKE_ICON_NORMAL_DOWN,\n\tnormalDisabled: STYLE_STROKE_ICON_NORMAL_DISABLED,\n\tchecked: { fill: \"#ff8833cc\", stroke: \"#ff8866ee\", width: 1 },\n\tcheckedHover: { fill: \"#ff9944dd\", stroke: \"#ff9977ff\", width: 2 },\n\tcheckedDown: { fill: \"#ffaa5544\t\", stroke: \"#ffaa88ff\", width: 2 }\n};\nconst STYLE_ICON_HELPBUTTON: VectorStyleCollection = {\n\tnormal: { fill: \"#ffffff55\" },\n\tnormalHover: { fill: \"#ffffffee\" },\n\tnormalDown: { fill: \"#ffffffee\", stroke: \"#00000044\", width: 2 },\n\tnormalDisabled: {},\n\tchecked: { fill: \"#eeff55ee\" },\n\tcheckedHover: { fill: \"#eeff44dd\" },\n\tcheckedDown: { fill: \"#ffff5544\t\", stroke: \"#00000044\", width: 2 }\n};\n\nconst STYLE_BTN_DOWNLOAD = STYLE_BTN_COPY;\nconst STYLE_ICON_DOWNLOAD = STYLE_ICON_COPY;\n\n\nconst ICON_VOTEUP: Path2D = SVGtoPath2D(\"M34.6 19.8c0 7.4 2.2 8.9 2.7 10.1 6.8 8.6 5.5 10.4 5.5 10.4a91.7 91.7 0 0 1-8.8 3.6c-5.6.5-10.3 4.7-11 9.5.3 3.8 4.4 3.2 4.6 3.9.2.8-2.1 3.5-1.4 6.4.6 2.4 3.4 2.4 3.7 3 .3.6-1.9 3.8.3 6.2 3.1 3.4 5 1.2 5.7 1.8.7.7-1 1.2 2.2 4.8 4 2.8 4.1 1 5.5 1.3 3.3.7 7.7 3.7 19.3-1.5 3.8-1 10 1 14.2 2.6a41.7 41.7 0 0 0 13.8-26.6c-17.9-3.7-20.5-1.6-27.7-9.4-10.8-12.5-15.1-15.4-17.9-19.5-6.6-5.5-5.1-8.6-6.3-10.9-2.6-1.4-4.2 1.5-4.4 4.3z\");\nconst ICON_VOTEDOWN: Path2D = SVGtoPath2D(\"M72.3 17c-2.4 1-4.3 2-5.9 2.2-15.8-1-17.8.1-26.5 1.8-7.2 1.4-4.6 2.5-7.1 7.2-.8 1.5-1.9 1.6-2.2 3-.3 1.3.9 2.6.5 4.3-.4 1.7-2.8 3.7-2.9 5.7s2 3.1 2.2 5-1.5 2.8-.5 6.8 1 6.4 4 8.4c2 1.3 5.3-.7 7.4-.4 1.3-.4 6.3-.7 5.9 2.5-.5 3.6-5.6 8.4-8 12.6-4.6 8-1 16.3 3 14 1.2-.7.9-3.6 3.1-6.8 3.5-3.2 4.3-4.6 9.5-12 21.5-20.6 11.8-24.8 35.5-28.6a40.2 40.2 0 0 0-18-25.7z\");\nconst ICON_FAVORITE: Path2D = SVGtoPath2D(\"M50.3 33.7c15.4-18.1 30.9-5.4 30.9 6.7 0 14.5-18.3 26.8-31 37.4-18.6-15.5-31-24.6-31-36.9 0-13.9 16.8-24.6 31.1-7.2z\");\nconst ICON_COPY: Path2D = SVGtoPath2D(\"M76.1 76.2H37.2V65H24.3V24.4h38.9v12.2h12.9v39.6zm-34.9-4h30.9V40.5H41.2v31.7zM28.3 61h8.9V36.5h22v-8.2H28.3V61z\");\nconst ICON_PLAY: Path2D = SVGtoPath2D(\"M39.3 30.7l33.8 19.5-33.8 19.5v-39M37.8 28c-1 .6-1.6 1.6-1.6 2.7v38.9a3 3 0 0 0 1.6 2.7c1 .6 2.2.6 3.1 0l33.7-19.5c1-.6 1.6-1.6 1.6-2.7a3 3 0 0 0-1.6-2.7L40.9 28c-1-.5-2.2-.5-3.1 0z\");\nconst ICON_STOP: Path2D = SVGtoPath2D(\"M66.1 67.6H34.3c-.8 0-1.5-.7-1.5-1.5V34.3c0-.8.7-1.5 1.5-1.5h31.9c.8 0 1.5.7 1.5 1.5v31.9c-.1.8-.7 1.4-1.6 1.4zm-30.3-3h28.9V35.8H35.8v28.8z\");\nconst ICON_NEXT: Path2D = SVGtoPath2D(\"M39.2 17.5v6.6l25.6 26.5-25.6 26v6.5l32-32.5z\");\nconst ICON_PREV: Path2D = SVGtoPath2D(\"M61.3 83.2v-6.7L35.7 50l25.6-26v-6.5L29.3 50z\");\nconst ICON_DOWNLOAD: Path2D = SVGtoPath2D(\"M50.2 66.1l16.5-16.5H61l-8.8 8.9V22.7h-4v35.7l-8.8-8.8h-5.7l16.5 16.5zM20.9 59h4v7.8c0 3.6 2.9 6.6 6.6 6.6h37.4c3.6 0 6.6-2.9 6.6-6.6V59h4v7.8c0 5.8-4.8 10.6-10.6 10.6H31.5c-5.8 0-10.6-4.7-10.6-10.6V59z\");\nconst ICON_DOWNLOAD_FAVORITES: Path2D = SVGtoPath2D(\"M68 45.5l.9-.7 2.8-2.3c5.5-4.4 11.8-9.4 11.8-15.8 0-3.6-2.2-6.9-5.5-8.1-3.2-1.2-6.8-.1-10 2.9a10.1 10.1 0 0 0-7.3-3.4 8.7 8.7 0 0 0-8.3 8.9c0 5.8 4.9 9.8 12.4 15.9l2.2 1.8zm7.1-24.6c.6 0 1.3.1 1.9.3 2.1.8 3.6 3 3.6 5.3 0 4.9-5.7 9.5-10.7 13.5L68 41.5l-1.3-1c-6.8-5.5-11.3-9.2-11.3-13.6 0-3.2 2.4-5.9 5.3-5.9 2.1 0 4.2 1.2 6.1 3.5l1.1 1.4 1.2-1.5c2-2.3 4.1-3.4 6-3.5zM50.2 66.1l16.5-16.5H61l-8.8 8.9V36.8a16.7 16.7 0 0 1-4-9.3v31l-8.8-8.8h-5.7zM20.9 59h4v7.8c0 3.6 2.9 6.6 6.6 6.6h37.4c3.6 0 6.6-2.9 6.6-6.6V59h4v7.8c0 5.8-4.8 10.6-10.6 10.6H31.5c-5.8 0-10.6-4.7-10.6-10.6z\");\nconst ICON_FILTER: Path2D = SVGtoPath2D(\"M44.6 78.8V45.9L25 25.2h50L54.9 45.9v23.6l-10.3 9.3zM32 28.2l15.6 16.5V72l4.3-3.9V44.7l16-16.5H32z\");\nconst ICON_FILTER_UNVOTED: Path2D = SVGtoPath2D(\"M25 25.2l19.5 20.7v32.9l10.4-9.2v-7.9c-1.1-1-2.1-2.1-3-3.4v9.8L47.5 72V44.7L32 28.2h36l-6 6.1a13.3 13.3 0 0 1 4.3-.2l8.7-8.9zm39.3 15.2c-1.4 0-3 0-4.4.3-2 .3-1.7 3.4 0 3.4 4.7-.6 9.2-.5 9.3 3 .1 2.8-4 5-6.9 6.3-1.6.5-.8 3.4 1.3 2.8 4.3-1.3 9.4-4.8 9.2-9.4-.4-4.4-4.2-6.1-8.5-6.4zM62.9 61c-.8 0-1.4.5-1.4 1.4v1.3c0 .8.5 1.4 1.4 1.4h1.3c.7 0 1.4-.5 1.4-1.4v-1.3c0-.8-.6-1.4-1.4-1.4z\");\nconst ICON_FILTER_FAVORITES: Path2D = SVGtoPath2D(\"M25 25.2l19.5 20.7v32.9l10.4-9.2v-7.9c-1.1-1-2.1-2.1-3-3.4v9.8L47.5 72V44.7L32 28.2h36l-6 6.1a13.3 13.3 0 0 1 4.3-.2l8.7-8.9zm35.8 13.2a8.7 8.7 0 0 0-8.3 8.9c0 5.8 4.9 9.8 12.4 15.9l2.2 1.8 1 .8.9-.7 2.8-2.3c5.5-4.4 11.8-9.4 11.8-15.8 0-3.6-2.2-6.9-5.5-8.1-3.2-1.2-6.8-.1-10 2.9a10.1 10.1 0 0 0-7.3-3.4zm14.4 2.8c.6 0 1.3.1 1.9.3 2.1.8 3.6 3 3.6 5.3 0 4.9-5.7 9.5-10.7 13.5l-1.9 1.5-1.3-1c-6.8-5.5-11.3-9.2-11.3-13.6 0-3.2 2.4-5.9 5.3-5.9 2.1 0 4.2 1.2 6.1 3.5l1.1 1.4 1.2-1.5c2-2.3 4.1-3.4 6-3.5z\");\nconst ICON_FOLD: Path2D = SVGtoPath2D(\"M60.54 71.15l20.9-21.2-20.9-21.64v6.63l12.4 12.88h-36.1v4.46h35.9l-12.2 12.44zm-36.8-46.9h4.6v51.5h-4.6z\");\nconst ICON_UNFOLD: Path2D = SVGtoPath2D(\"M39.56 28.85l-20.9 21.2 20.9 21.64v-6.63l-12.4-12.88h36.1v-4.46h-35.9l12.2-12.44zm36.8 46.9h-4.6v-51.5h4.6z\");\nconst ICON_HELP: Path2D = SVGtoPath2D(\"M41.9 25.7l-2.5 5.1c.3-.1.7-.2 1.1-.2h5.7c3.1 0 5.5.9 7.1 2.7 1.6 1.8 2.4 4.3 2.4 7.5 0 2.9-.8 5.2-2.3 6.9a8.29 8.29 0 0 1-6.3 2.6H43v10.3h4.6V55l.9-.1c3.9-.8 7-2.3 9.1-4.6s3.1-5.5 3.1-9.4c0-4.7-1.3-8.5-3.8-11.2s-5.9-4-10.3-4h-4.7zm3.3 40.9c-1.1 0-1.9.4-2.7 1.1-.8.8-1.1 1.6-1.1 2.7s.4 2 1.1 2.8a3.73 3.73 0 0 0 5.4-.1c.8-.8 1.1-1.7 1.1-2.7s-.4-1.9-1.1-2.7c-.8-.8-1.6-1.1-2.7-1.1z\");\n\nenum FilterMode { ALL = 0, FAVORITES = 1, UNVOTED = 2 }\n\nconst LABEL_FILTER_ALL = \"Show all\";\nconst LABEL_FILTER_FAVORITES = \"Favorites\";\nconst LABEL_FILTER_UNVOTED = \"Unvoted\";\n\ninterface Memory {\n\tpatternariumID: string | undefined;\n\tshowInfo: boolean;\n\tplayPos: Array<number>;\n}\n\ninterface Anchor {\n\telement: { data: { x?: number } };\n\tx: number;\n\thorizontal: \"left\" | \"center\" | \"right\";\n}\n\nexport class Patternarium {\n\tprivate fileURL: string;\n\tprivate apiURL: string;\n\n\tprivate viewScale: number;\t\t\t\t\t// size of visual elements\n\tprivate uiScale: number; \t\t\t\t\t// size of interactive UI elements\n\tprivate canvas: HTMLCanvasElement;\n\tprivate ctx: CanvasRenderingContext2D;\n\n\tprivate memory: Memory;\n\tprivate playlist: PlayList | undefined;\n\tprivate playlistLoaded: { (): void } | undefined;\n\tprivate voted: number = 0;\n\tprivate favorites: number = 0;\n\n\tprivate player: Player;\n\tprivate background: Background;\n\n\tprivate filter: FilterMode = FilterMode.ALL;\n\tprivate nextTrackIX: number | undefined;\n\tprivate prevTrackIX: number | undefined;\n\n\t// User interface\n\tprivate uiElements: UIElementCollection;\n\tprivate anchorList: Anchor[] = [];\n\tprivate animateInfoFold: Animator | undefined;\n\tprivate firstVisit: boolean = false;\n\tprivate interfaceReady: boolean = false;\n\tprivate loadingPattern: boolean = false;\n\tprivate loadingPreset: boolean = false;\n\tprivate errorMessage: string = \"\";\n\tprivate warningMessage: string = \"\";\n\tprivate splashScreen: SplashScreen | undefined;\n\tprivate splashButton: ButtonCore | undefined;\n\tprivate buttonNext: Button | undefined;\n\tprivate buttonPrev: Button | undefined;\n\tprivate buttonVoteUp: Button | undefined;\n\tprivate buttonVoteDown: Button | undefined;\n\tprivate buttonFavorite: Button | undefined;\n\tprivate buttonCopy: Button | undefined;\n\tprivate buttonPlay: Button | undefined;\n\tprivate buttonStop: Button | undefined;\n\tprivate buttonDownload: Button | undefined;\n\tprivate buttonFilter: PopupButton | undefined;\n\tprivate buttonFilterAll: Button | undefined;\n\tprivate buttonFilterFavorites: Button | undefined;\n\tprivate buttonFilterUnvoted: Button | undefined;\n\tprivate trackLabel: Label | undefined;\n\tprivate buttonInfoFold: Button | undefined;\n\tprivate infoPanel: InfoPanel | undefined;\n\tprivate buttonHelp: Button | undefined;\n\tprivate helpDimmer: HelpDimmer | undefined;\n\tprivate helpScreen: HelpScreen | undefined;\n\n\tprivate keybind: { [index: string]: { (event: KeyboardEvent): boolean } } = {};\n\n\tpublic constructor(stage: HTMLElement, altFileURL?: string, altApiURL?: string) {\n\t\tthis.fileURL = altFileURL ? altFileURL : DEFAULT_FILE_URL;\n\t\tthis.apiURL = altApiURL ? altApiURL : DEFAULT_API_URL;\n\n\t\tif (stage.classList) {\n\t\t\tstage.classList.add(WINDOW_CLASSNAME);\n\t\t} else if (!stage.className.match(\"\\\\b\" + WINDOW_CLASSNAME + \"\\\\b\")) {\n\t\t\tstage.className += \" \" + WINDOW_CLASSNAME;\n\t\t}\n\n\t\tthis.canvas = document.createElement(\"canvas\");\n\t\tthis.canvas.className = CANVAS_CLASSNAME;\n\t\tthis.canvas.width = stage.offsetWidth * 1;\n\t\tthis.canvas.height = stage.offsetHeight * 1;\n\t\tthis.canvas.tabIndex = 0;\n\t\tthis.ctx = <CanvasRenderingContext2D>this.canvas.getContext(\"2d\", { alpha: false });\n\t\tstage.appendChild(this.canvas);\n\n\t\tthis.viewScale = Math.min(this.canvas.width, this.canvas.height) / VIEW_BASE_SIZE;\n\t\tthis.uiScale = UI_SCALE;\n\t\tassert(trace(JSON.stringify({ viewScale: this.viewScale, uiScale: this.uiScale })));\n\t\tthis.player = new Player(this.ctx.canvas.width, this.ctx.canvas.height - (110 * this.uiScale + PATTERNNAME_SIZE * this.viewScale), this.ctx, this.viewScale);\n\n\t\t// Hook up audio events\n\t\tthis.player.audio.addEventListener(\"playing\", () => {\n\t\t\tif (this.interfaceReady && !this.player.audio.paused) {\n\t\t\t\tassert(this.buttonPlay !== undefined);\n\t\t\t\tthis.buttonPlay!.uncheck();\n\t\t\t\tthis.buttonPlay!.hide();\n\t\t\t\tassert(this.buttonStop !== undefined);\n\t\t\t\tthis.buttonStop!.show();\n\t\t\t}\n\t\t});\n\t\tthis.player.audio.addEventListener(\"pause\", () => {\n\t\t\tif (this.interfaceReady) {\n\t\t\t\tassert(this.buttonPlay !== undefined);\n\t\t\t\tthis.buttonPlay!.show();\n\t\t\t\tassert(this.buttonStop !== undefined);\n\t\t\t\tthis.buttonStop!.hide();\n\t\t\t}\n\t\t});\n\t\tthis.player.audio.addEventListener(\"error\", () => {\n\t\t\tassert(trace(\"event player.audio.error \" + this.player.audio.error));\n\t\t\tif (this.player.audio.error) {\n\t\t\t\tthis.error(\"Error loading track, try reloading\");\n\t\t\t}\n\t\t});\n\n\t\tthis.player.audio.addEventListener(\"abort\", () => {\n\t\t\tassert(trace(\"event player.audio.abort\"));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"canplay\", () => {\n\t\t\tassert(trace(\"event player.audio.canplay \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"canplaythrough\", () => {\n\t\t\tassert(trace(\"event player.audio.canplaythrough \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"durationchange\", () => {\n\t\t\tassert(trace(\"event player.audio.durationchange \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"emptied\", () => {\n\t\t\tassert(trace(\"event player.audio.emptied \"));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"ended\", () => {\n\t\t\tassert(trace(\"event player.audio.ended \" + JSON.stringify({ paused: this.player.audio.paused, ended: this.player.audio.ended })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"error\", () => {\n\t\t\tassert(trace(\"event player.audio.error \" + this.player.audio.error));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"interruptbegin\", () => {\n\t\t\tassert(trace(\"event player.audio.interruptbegin \" + JSON.stringify({ paused: this.player.audio.paused, ended: this.player.audio.ended })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"interruptend\", () => {\n\t\t\tassert(trace(\"event player.audio.interruptend \" + JSON.stringify({ paused: this.player.audio.paused, ended: this.player.audio.ended })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"loadeddata\", () => {\n\t\t\tassert(trace(\"event player.audio.loadeddata \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"loadedmetadata\", () => {\n\t\t\tassert(trace(\"event player.audio.loadedmetadata \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"loadstart\", () => {\n\t\t\tassert(trace(\"event player.audio.loadstart \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"pause\", () => {\n\t\t\tassert(trace(\"event player.audio.pause \" + JSON.stringify({ paused: this.player.audio.paused, ended: this.player.audio.ended })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"play\", () => {\n\t\t\tassert(trace(\"event player.audio.play \" + JSON.stringify({ src: this.player.audio.src })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"playing\", () => {\n\t\t\tassert(trace(\"event player.audio.playing \" + JSON.stringify({ paused: this.player.audio.paused, ended: this.player.audio.ended })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"ratechange\", () => {\n\t\t\tassert(trace(\"event player.audio.ratechange \" + this.player.audio.playbackRate));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"seeked\", () => {\n\t\t\tassert(trace(\"event player.audio.seeked \" + JSON.stringify({ seeking: this.player.audio.seeking })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"seeking\", () => {\n\t\t\tassert(trace(\"event player.audio.seeking \" + JSON.stringify({ seeking: this.player.audio.seeking })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"stalled\", () => {\n\t\t\tassert(trace(\"event player.audio.stalled \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"suspend\", () => {\n\t\t\tassert(trace(\"event player.audio.suspend \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"timeupdate\", () => {\n\t\t\tassert(trace(\"event player.audio.timeupdate \" + JSON.stringify({ currentTime: this.player.audio.currentTime, duration: this.player.audio.duration })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"volumechange\", () => {\n\t\t\tassert(trace(\"event player.audio.volumechange \" + JSON.stringify({ muted: this.player.audio.muted, volume: this.player.audio.volume })));\n\t\t});\n\t\tthis.player.audio.addEventListener(\"waiting\", () => {\n\t\t\tassert(trace(\"event player.audio.waiting \" + JSON.stringify({ readyState: this.player.audio.readyState, networkState: this.player.audio.networkState, duration: this.player.audio.duration })));\n\t\t});\n\n\t\tthis.background = new Background(this.ctx, this.viewScale);\n\t\tthis.uiElements = new UIElementCollection();\n\n\t\tdocument.addEventListener(\"mousedown\", (event: MouseEvent) => {\n\t\t\tassert(trace(\"event mouse down\"));\n\t\t\tif (event.button !== 0) return; // TODO: handle more than primary click?\n\t\t\tconst pos = MouseEventToOffset(event, this.canvas);\n\t\t\tif (this.uiElements.mouseDown(pos)) {\n\t\t\t\tthis.canvas.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}, { capture: true, passive: false });\n\t\tdocument.addEventListener(\"mousemove\", (event: MouseEvent) => {\n\t\t\tconst pos = MouseEventToOffset(event, this.canvas);\n\t\t\tthis.setCursor(this.uiElements.mouseMove(pos));\n\t\t}, { capture: true, passive: false });\n\t\tdocument.addEventListener(\"mouseup\", (event: MouseEvent) => {\n\t\t\tassert(trace(\"event mouse up\"));\n\t\t\tif (event.button !== 0) return; // TODO: handle more than primary click?\n\t\t\tconst pos = MouseEventToOffset(event, this.canvas);\n\t\t\tif (this.uiElements.mouseUp(pos)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}, { capture: true, passive: false });\n\n\t\tdocument.addEventListener(\"touchstart\", (event: TouchEvent) => {\n\t\t\tassert(trace(\"event touchstart\"));\n\t\t\tconst pos = TouchEventToOffset(event, this.canvas);\n\t\t\tif (this.uiElements.mouseDown(pos)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}, { capture: true, passive: false });\n\t\tdocument.addEventListener(\"touchmove\", (event: TouchEvent) => {\n\t\t\tconst pos = TouchEventToOffset(event, this.canvas);\n\t\t\tthis.setCursor(this.uiElements.mouseMove(pos));\n\t\t}, { capture: true, passive: false });\n\t\tdocument.addEventListener(\"touchend\", (event: TouchEvent) => {\n\t\t\tassert(trace(\"event touchend\"));\n\t\t\tconst pos = TouchEventToOffset(event, this.canvas);\n\t\t\tif (this.uiElements.mouseUp(pos)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}, { capture: true, passive: false });\n\n\t\tthis.canvas.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n\t\t\tconst handler = this.keybind[event.key];\n\t\t\tif (handler !== undefined) {\n\t\t\t\tevent.preventDefault(); // Gotta catch em all\n\t\t\t\tif (!event.repeat) {\n\t\t\t\t\thandler(event);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet e:any = event;\n\t\t\t\tassert(trace(\"Unhandled keyboard event: \" + JSON.stringify({ key: e.key, keyCode: e.keyCode, altKey: e.altKey, ctrlKey: e.ctrlKey, metaKey: e.metaKey, location: e.location, repeat: e.repeat, char: e.char, charCode: e.charCode, type: e.type, which: e.which })));\n\t\t\t}\n\t\t});\n\n\t\tthis.memory = {\n\t\t\tpatternariumID: undefined,\n\t\t\tshowInfo: false,\n\t\t\tplayPos: []\n\t\t};\n\t\t{\n\t\t\ttry {\n\t\t\t\tconst data = localStorage.getItem(LOCALSTORAGE_KEY);\n\t\t\t\tif (data === null || data === \"\") {\n\t\t\t\t\tthis.save();\n\t\t\t\t\tthis.firstVisit = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.memory = JSON.parse(data);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tthis.error(\"Error accessing local storage\");\n\t\t\t}\n\t\t}\n\n\t\twindow.addEventListener(\"hashchange\", () => {\n\t\t\tlet location = Patternarium.hashToTrack(window.location.hash);\n\t\t\tif (!location) return;\n\n\t\t\tassert(this.playlist !== undefined);\n\t\t\tconst current = this.currentTrack();\n\n\t\t\tif (location.generation !== this.playlist!.generation ||\n\t\t\t\tlocation.directname !== current.directname) {\n\t\t\t\tthis.navigate(location.generation, location.directname);\n\t\t\t}\n\t\t});\n\t\tthis.setupSplash();\n\t\tconst location = Patternarium.hashToTrack(window.location.hash);\n\t\tthis.loadPlaylist(location && location.generation).then(() => {\n\t\t\tassert(this.playlist !== undefined);\n\t\t\tassert(this.playlist!.length() > 0);\n\t\t\tif (location !== undefined) {\n\t\t\t\t// Entered site with a direct link\n\t\t\t\tthis.navigate(location.generation, location.directname);\n\t\t\t} else {\n\t\t\t\t// Entered site with no link, pre-load first track\n\t\t\t\tconst startIX = this.currentTrackIX();\n\t\t\t\tthis.changeTrack(startIX).then(() => {\n\t\t\t\t\tassert(this.splashButton !== undefined);\n\t\t\t\t\tthis.splashButton!.enable();\n\t\t\t\t\tassert(this.splashScreen !== undefined);\n\t\t\t\t\tthis.splashScreen!.loading = false;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// start animation by animating a frame manually\n\t\tthis.animationFrame(0);\n\t\tconsole.log(`*** Started Patternarium v${VERSION}-${TARGET}`);\n\t}\n\n\tpublic save() {\n\t\tlet err = false;\n\t\ttry {\n\t\t\tconst data = JSON.stringify(this.memory);\n\t\t\tlocalStorage.setItem(LOCALSTORAGE_KEY, data);\n\t\t\tconst verify = localStorage.getItem(LOCALSTORAGE_KEY);\n\t\t\terr = (data !== verify);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\terr = true;\n\t\t}\n\t\tif (err) {\n\t\t\tthis.error(\"Error while saving to local storage\");\n\t\t}\n\t}\n\n\tpublic realignMain() {\n\t\tfor (let i = 0; i < this.anchorList.length; ++i) {\n\t\t\tconst a = this.anchorList[i];\n\t\t\ta.element.data.x = a.horizontal === \"left\" ? a.x : a.horizontal === \"right\" ? this.player.width - a.x : Math.round(this.player.width / 2 + a.x);\n\t\t}\n\t}\n\n\tpublic setupMain() {\n\t\tassert(this.splashScreen !== undefined);\n\t\tthis.uiElements.removeElement(this.splashScreen!);\n\t\tthis.splashScreen = undefined;\n\t\tassert(this.splashButton !== undefined);\n\t\tthis.uiElements.removeElement(this.splashButton!);\n\t\tthis.splashButton = undefined;\n\t\tdelete this.keybind[\" \"];\n\t\tdelete this.keybind[\"Spacebar\"];\n\n\t\tthis.trackLabel = new Label({\n\t\t\tx: 0,\n\t\t\ty: this.ctx.canvas.height / 2 + 160 * this.viewScale,\n\t\t\tfontFamily: \"FinalFrontierSC\",\n\t\t\tfontSize: (PATTERNNAME_SIZE * this.viewScale),\n\t\t\ttextAlign: \"center\",\n\t\t\ttextStyle: { fill: \"#ffffffcc\", stroke: \"black\" }\n\t\t});\n\t\tthis.anchorList.push({ element: this.trackLabel, horizontal: \"center\", x: 0 });\n\t\tthis.uiElements.addElement(this.trackLabel);\n\n\t\tthis.helpDimmer = new HelpDimmer();\n\t\tthis.uiElements.addElement(this.helpDimmer);\n\n\t\tconst discSize = 400 * this.viewScale;\n\t\tconst discHeightOffset = 15 * this.viewScale;\n\t\tthis.buttonPlay = new Button({\n\t\t\tx: 0,\n\t\t\ty: discHeightOffset + this.player.height / 2 - discSize / 2, width: discSize, height: discSize, radius: discSize,\n\t\t\ticon: { path: ICON_PLAY, scale: discSize / 100, width: ICON_SIZE, height: ICON_SIZE, y: -3, style: STYLE_ICON_PLAY }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonPlay, horizontal: \"center\", x: -discSize / 2 });\n\t\tthis.buttonPlay.click = (): boolean => {\n\t\t\tassert(trace(\"Called buttonPlay.click()\"));\n\t\t\tthis.player.rewind();\n\t\t\tconst playpromise = this.player.play();\n\t\t\tif (playpromise !== undefined) {\n\t\t\t\tplaypromise.then(_ => {\n\t\t\t\t\tthis.updateInterface();\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error(\"player.replay() Promise returned: \" + error.name);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error Audio.play() did not return a Promise\");\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tthis.buttonPlay.enable();\n\t\tthis.uiElements.addElement(this.buttonPlay);\n\t\tthis.buttonStop = new Button({\n\t\t\tx: 0, y: discHeightOffset + this.player.height / 2 - discSize / 2, width: discSize, height: discSize, radius: discSize,\n\t\t\ticon: { path: ICON_STOP, scale: discSize / 100, width: ICON_SIZE, height: ICON_SIZE, y: -3, style: STYLE_ICON_STOP }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonStop, horizontal: \"center\", x: -discSize / 2 });\n\t\tthis.buttonStop.click = (): boolean => {\n\t\t\tassert(trace(\"Called buttonStop.click()\"));\n\t\t\tthis.player.stop(false);\n\t\t\tthis.updateInterface();\n\t\t\treturn true;\n\t\t};\n\t\tthis.buttonStop.enable();\n\t\tthis.uiElements.addElement(this.buttonStop);\n\t\tthis.keybind[\" \"] = this.keybind[\"Spacebar\"] = (/*event: KeyboardEvent*/): boolean => {\n\t\t\tassert(this.buttonPlay !== undefined);\n\t\t\tassert(this.buttonStop !== undefined);\n\t\t\tif (this.buttonPlay!.isEnabled() && !this.buttonPlay!.isHidden()) {\n\t\t\t\tassert(this.buttonPlay!.click !== undefined);\n\t\t\t\treturn this.buttonPlay!.click!();\n\t\t\t} else if (this.buttonStop!.isEnabled() && !this.buttonStop!.isHidden()) {\n\t\t\t\tassert(this.buttonStop!.click !== undefined);\n\t\t\t\treturn this.buttonStop!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst buttonMargin = 8 * this.uiScale;\n\t\tconst buttonSize = (ICON_SIZE + ICON_PADDING) * ICON_SCALE * this.uiScale;\n\t\tconst buttonTop = this.canvas.height - buttonMargin - buttonSize;\n\n\t\tconst edgeGridHeight = this.canvas.height / 6;\n\t\tconst edgeGridWidth = buttonSize * 0.8;\n\n\t\tthis.buttonPrev = new Button({\n\t\t\tx: 0, y: edgeGridHeight, width: edgeGridWidth, height: edgeGridHeight * 4, radius: 0, style: STYLE_BTN_NAVBUTTONS,\n\t\t\ticon: { path: ICON_PREV, scale: ICON_SCALE * this.uiScale, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_NAVBUTTONS }\n\t\t});\n\t\tthis.buttonPrev.click = (): boolean => {\n\t\t\tthis.prevTrack();\n\t\t\treturn true;\n\t\t};\n\t\tthis.uiElements.addElement(this.buttonPrev);\n\t\tthis.keybind[\"ArrowLeft\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonPrev !== undefined);\n\t\t\tif (this.buttonPrev!.isEnabled()) {\n\t\t\t\tassert(this.buttonPrev!.click !== undefined);\n\t\t\t\treturn this.buttonPrev!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.buttonNext = new Button({\n\t\t\tx: 0, y: edgeGridHeight, width: edgeGridWidth, height: edgeGridHeight * 4, radius: 0, style: STYLE_BTN_NAVBUTTONS,\n\t\t\ticon: { path: ICON_NEXT, scale: ICON_SCALE * this.uiScale, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_NAVBUTTONS }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonNext, horizontal: \"right\", x: edgeGridWidth });\n\t\t// this.buttonNext.iconX = -4;\n\t\tthis.buttonNext.click = (): boolean => {\n\t\t\tthis.nextTrack();\n\t\t\treturn true;\n\t\t};\n\t\tthis.uiElements.addElement(this.buttonNext);\n\t\tthis.keybind[\"ArrowRight\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonNext !== undefined);\n\t\t\tif (this.buttonNext!.isEnabled()) {\n\t\t\t\tassert(this.buttonNext!.click !== undefined);\n\t\t\t\treturn this.buttonNext!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst voteSpacing = buttonSize * 2;\n\n\t\tthis.buttonVoteDown = new Button({\n\t\t\tx: 0, y: buttonTop, width: buttonSize, height: buttonSize, radius: buttonSize, style: STYLE_BTN_VOTEDOWN,\n\t\t\ticon: { path: ICON_VOTEDOWN, scale: ICON_SCALE * this.uiScale, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_VOTEDOWN }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonVoteDown, horizontal: \"center\", x: - voteSpacing - buttonSize });\n\t\tthis.buttonVoteDown.click = (): boolean => {\n\t\t\tthis.dislikeTrack();\n\t\t\treturn true;\n\t\t};\n\t\tthis.uiElements.addElement(this.buttonVoteDown);\n\t\tthis.keybind[\"ArrowDown\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonVoteDown !== undefined);\n\t\t\tif (this.buttonVoteDown!.isEnabled()) {\n\t\t\t\tassert(this.buttonVoteDown!.click !== undefined);\n\t\t\t\treturn this.buttonVoteDown!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.buttonVoteUp = new Button({\n\t\t\tx: 0, y: buttonTop, width: buttonSize, height: buttonSize, radius: buttonSize, style: STYLE_BTN_VOTEUP,\n\t\t\ticon: { path: ICON_VOTEUP, scale: ICON_SCALE * this.uiScale, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_VOTEUP }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonVoteUp, horizontal: \"center\", x: voteSpacing });\n\t\tthis.buttonVoteUp.click = (): boolean => {\n\t\t\tthis.likeTrack();\n\t\t\treturn true;\n\t\t};\n\t\tthis.uiElements.addElement(this.buttonVoteUp);\n\t\tthis.keybind[\"ArrowUp\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonVoteUp !== undefined);\n\t\t\tif (this.buttonVoteUp!.isEnabled()) {\n\t\t\t\tassert(this.buttonVoteUp!.click !== undefined);\n\t\t\t\treturn this.buttonVoteUp!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst bottomButtonFactor = 0.5;\n\t\tconst bottomGridCount = 4;\n\t\tconst bottomGridCell = bottomButtonFactor * buttonSize;\n\t\tconst bottomGridPadding = bottomGridCell * 0.4;\n\t\tconst bottomGridWidth = bottomGridCell + bottomGridPadding;\n\t\tconst bottomGridTop = (this.canvas.height - buttonTop - bottomGridCell) / 2 + buttonTop;\n\t\tconst bottomGridLeft = (0 - bottomGridWidth * bottomGridCount + bottomGridPadding) / 2; // offset from center\n\n\t\t{\n\t\t\t// Setup buttonFilter popup buttons\n\t\t\tconst bottom = bottomGridTop - 7 * this.uiScale;\n\t\t\tconst fontFamily = \"Mono\";\n\t\t\tconst iconpad = 1 * this.uiScale;\n\t\t\tconst iconSize = bottomButtonFactor * this.uiScale * ICON_SIZE * ICON_SCALE;\n\t\t\tconst fontSize = 10 * this.uiScale;\n\t\t\tconst width = iconpad + iconSize + iconpad + 102 * this.uiScale;\n\t\t\tconst height = bottomGridCell;\n\t\t\tconst spacing = height + 6 * this.uiScale;\n\t\t\tconst buttonStyle: VectorStyleCollection = {\n\t\t\t\tnormal: { fill: \"#151413f9\", stroke: \"#ffffffee\", width: 1 },\n\t\t\t\tnormalHover: { fill: \"#252423f9\", stroke: \"#ffffffee\", width: 2 },\n\t\t\t\tnormalDown: { fill: \"#454443f9\", stroke: \"#ffffffee\", width: 2 },\n\t\t\t\tnormalDisabled: { fill: \"#1a1a1af9\", stroke: \"#606060ee\", width: 1 },\n\t\t\t\tcheckedDisabled: { fill: \"#3b3918f4\", stroke: \"#c9bf5aee\", width: 1 }\n\t\t\t};\n\t\t\tconst iconStyle: VectorStyleCollection = {\n\t\t\t\tnormal: { fill: \"#ffffffee\", stroke: \"#00000088\", width: 0 },\n\t\t\t\tnormalHover: { fill: \"#ffffffee\", stroke: \"#ffffff88\", width: 1 },\n\t\t\t\tnormalDown: { fill: \"#ffffffff\", stroke: \"#ffffffaa\", width: 1 },\n\t\t\t\tnormalDisabled: { fill: \"#ffffff11\", width: 1 },\n\t\t\t\tcheckedDisabled: { fill: \"#c9bf5a\", stroke: \"#00000044\", width: 1 },\n\t\t\t};\n\t\t\tconst labelStyle: VectorStyleCollection = {\n\t\t\t\tnormal: { fill: \"#dddddd\" },\n\t\t\t\tnormalHover: { fill: \"#ffffffee\" },\n\t\t\t\tnormalDown: { fill: \"#ffffffff\" },\n\t\t\t\tnormalDisabled: { fill: \"#ffffff11\" },\n\t\t\t\tcheckedDisabled: { fill: \"#c9bf5a\" },\n\t\t\t};\n\n\t\t\tthis.buttonFilterAll = new Button({\n\t\t\t\tx: 0, y: bottom - height - spacing * 2, width: width, height: height, radius: 2,\n\t\t\t\tstyle: buttonStyle,\n\t\t\t\ticon: { path: ICON_FILTER, align: \"left\", x: iconpad, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: iconStyle },\n\t\t\t\tlabel: { text: LABEL_FILTER_ALL, textAlign: \"left\", x: iconpad * 2 + iconSize, fontFamily: fontFamily, fontSize: fontSize, style: labelStyle }\n\t\t\t});\n\t\t\tthis.anchorList.push({ element: this.buttonFilterAll, horizontal: \"center\", x: bottomGridLeft });\n\t\t\tthis.buttonFilterFavorites = new Button({\n\t\t\t\tx: 0, y: bottom - height - spacing * 1, width: width, height: height, radius: 2,\n\t\t\t\tstyle: buttonStyle,\n\t\t\t\ticon: { path: ICON_FILTER_FAVORITES, align: \"left\", x: iconpad, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: iconStyle },\n\t\t\t\tlabel: { text: LABEL_FILTER_FAVORITES, textAlign: \"left\", x: iconpad * 2 + iconSize, fontFamily: fontFamily, fontSize: fontSize, style: labelStyle }\n\t\t\t});\n\t\t\tthis.anchorList.push({ element: this.buttonFilterFavorites, horizontal: \"center\", x: bottomGridLeft });\n\t\t\tthis.buttonFilterUnvoted = new Button({\n\t\t\t\tx: 0, y: bottom - height - spacing * 0, width: width, height: height, radius: 2,\n\t\t\t\tstyle: buttonStyle,\n\t\t\t\ticon: { path: ICON_FILTER_UNVOTED, align: \"left\", x: iconpad, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: iconStyle },\n\t\t\t\tlabel: { text: LABEL_FILTER_UNVOTED, textAlign: \"left\", x: iconpad * 2 + iconSize, fontFamily: fontFamily, fontSize: fontSize, style: labelStyle }\n\t\t\t});\n\t\t\tthis.anchorList.push({ element: this.buttonFilterUnvoted, horizontal: \"center\", x: bottomGridLeft });\n\n\t\t\tthis.buttonFilterAll.click = (): boolean => {\n\t\t\t\tthis.log(\"filter\", \"ALL\");\n\t\t\t\tthis.setFilterMode(FilterMode.ALL); return true;\n\t\t\t};\n\t\t\tthis.buttonFilterFavorites.click = (): boolean => {\n\t\t\t\tthis.log(\"filter\", \"FAVORITES\");\n\t\t\t\tthis.setFilterMode(FilterMode.FAVORITES); return true;\n\t\t\t};\n\t\t\tthis.buttonFilterUnvoted.click = (): boolean => {\n\t\t\t\tthis.log(\"filter\", \"UNVOTED\");\n\t\t\t\tthis.setFilterMode(FilterMode.UNVOTED); return true;\n\t\t\t};\n\n\t\t\tthis.buttonFilterAll.enable();\n\t\t\tthis.buttonFilterFavorites.enable();\n\t\t\tthis.buttonFilterUnvoted.enable();\n\n\t\t\tthis.buttonFilter = new PopupButton({\n\t\t\t\tx: 0, y: bottomGridTop, width: bottomGridCell, height: bottomGridCell, radius: 3, style: STYLE_BTN_FILTER,\n\t\t\t\ticon: { path: ICON_FILTER, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_FILTER },\n\t\t\t\titems: [this.buttonFilterAll, this.buttonFilterFavorites, this.buttonFilterUnvoted]\n\t\t\t});\n\t\t\tthis.anchorList.push({ element: this.buttonFilter, horizontal: \"center\", x: bottomGridLeft + bottomGridWidth * 0 });\n\t\t\tthis.buttonFilter.enable();\n\t\t\t//\t\t\tthis.buttonFilter.click = (): boolean => { this.setFilterMode((this.filter + 1) % 3); return true; }\n\t\t\tthis.uiElements.addElement(this.buttonFilter);\n\n\t\t\t//his.uiElements.addElement(btnAll);\n\t\t\t//his.uiElements.addElement(btnFavorites);\n\t\t\t//his.uiElements.addElement(btnUnvoted);\n\t\t}\n\n\t\tthis.buttonCopy = new Button({\n\t\t\tx: 0, y: bottomGridTop, width: bottomGridCell, height: bottomGridCell, radius: 5, style: STYLE_BTN_COPY,\n\t\t\ticon: { path: ICON_COPY, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_COPY }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonCopy, horizontal: \"center\", x: bottomGridLeft + bottomGridWidth * 1 });\n\t\tthis.buttonCopy.click = (): boolean => { this.copyTrack(); return true; };\n\t\tthis.uiElements.addElement(this.buttonCopy);\n\t\tthis.keybind[\"c\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonCopy !== undefined);\n\t\t\tif (this.buttonCopy!.isEnabled()) {\n\t\t\t\tassert(this.buttonCopy!.click !== undefined);\n\t\t\t\treturn this.buttonCopy!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.buttonFavorite = new Button({\n\t\t\tx: 0, y: bottomGridTop, width: bottomGridCell, height: bottomGridCell, radius: 5, style: STYLE_BTN_FAVORITE,\n\t\t\ticon: { path: ICON_FAVORITE, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_FAVORITE }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonFavorite, horizontal: \"center\", x: bottomGridLeft + bottomGridWidth * 2 });\n\t\tthis.buttonFavorite.click = (): boolean => { this.favoriteTrack(); return true; };\n\t\tthis.uiElements.addElement(this.buttonFavorite);\n\t\tthis.keybind[\"f\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonFavorite !== undefined);\n\t\t\tif (this.buttonFavorite!.isEnabled()) {\n\t\t\t\tassert(this.buttonFavorite!.click !== undefined);\n\t\t\t\treturn this.buttonFavorite!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.buttonDownload = new Button({\n\t\t\tx: 0, y: bottomGridTop, width: bottomGridCell, height: bottomGridCell, radius: 5, style: STYLE_BTN_DOWNLOAD,\n\t\t\ticon: { path: ICON_DOWNLOAD, scale: bottomButtonFactor * this.uiScale * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_DOWNLOAD }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonDownload, horizontal: \"center\", x: bottomGridLeft + bottomGridWidth * 3 });\n\t\tthis.buttonDownload.click = (): boolean => {\n\t\t\tlet url = this.apiURL + \"download/\";\n\t\t\tif (this.filter === FilterMode.FAVORITES) {\n\t\t\t\tassert(this.memory.patternariumID !== undefined);\n\t\t\t\tassert(this.playlist !== undefined);\n\t\t\t\twindow.location.href = url + \"favourites/\" + encodeURIComponent(this.memory.patternariumID!) + \"/\" + encodeURIComponent(\"Patternarium Generation \" + this.playlist!.generation + \" Favorites.zip\");\n\t\t\t\tthis.log(\"download\", \"Patternarium Generation \" + this.playlist!.generation + \" Favorites.zip\");\n\t\t\t} else {\n\t\t\t\tconst current = this.currentTrack();\n\t\t\t\twindow.location.href = url + \"track/\" + current.path + \".mtpreset\";\n\t\t\t\tassert(this.playlist !== undefined);\n\t\t\t\tthis.log(\"download\", this.playlist!.generation + \"/\" + current.directname);\n\t\t\t}\n\t\t\tthis.buttonDownload!.check();\n\t\t\tsetTimeout(() => this.buttonDownload!.uncheck(), 500);\n\t\t\treturn true;\n\t\t};\n\t\tthis.buttonDownload.enable();\n\t\tthis.uiElements.addElement(this.buttonDownload);\n\t\tthis.keybind[\"d\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonDownload !== undefined);\n\t\t\tif (this.buttonDownload!.isEnabled()) {\n\t\t\t\tassert(this.buttonDownload!.click !== undefined);\n\t\t\t\treturn this.buttonDownload!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst foldButtonFactor = 0.5;\n\t\tconst foldButtonSize = buttonSize * foldButtonFactor;\n\t\tthis.buttonInfoFold = new Button({\n\t\t\tx: 0, y: 0, width: foldButtonSize, height: foldButtonSize, radius: 0, style: STYLE_BTN_NAVBUTTONS,\n\t\t\ticon: { path: ICON_UNFOLD, scale: this.uiScale * foldButtonFactor * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_FOLDBUTTON }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonInfoFold, horizontal: \"right\", x: foldButtonSize });\n\t\tthis.buttonInfoFold.click = (): boolean => {\n\t\t\tassert(this.buttonInfoFold !== undefined);\n\t\t\tassert(this.buttonInfoFold!.data.icon !== undefined);\n\t\t\tassert(this.infoPanel !== undefined);\n\t\t\tif (this.buttonInfoFold!.isChecked()) {\n\t\t\t\tthis.foldInfo(0.2);\n\t\t\t} else {\n\t\t\t\tthis.unfoldInfo(0.2);\n\t\t\t}\n\t\t\tthis.memory.showInfo = this.buttonInfoFold!.isChecked();\n\t\t\tthis.save();\n\t\t\treturn true;\n\t\t};\n\t\tthis.buttonInfoFold.enable();\n\t\tthis.uiElements.addElement(this.buttonInfoFold);\n\t\tthis.keybind[\"i\"] = (event: KeyboardEvent): boolean => {\n\t\t\tassert(!event.repeat);\n\t\t\tassert(this.interfaceReady);\n\t\t\tassert(this.buttonInfoFold !== undefined);\n\t\t\tif (this.buttonInfoFold!.isEnabled()) {\n\t\t\t\tassert(this.buttonInfoFold!.click !== undefined);\n\t\t\t\treturn this.buttonInfoFold!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tthis.infoPanel = new InfoPanel({ x: 0, y: 0, width: INFOPANEL_WIDTH, height: this.canvas.height, scale: this.viewScale });\n\t\tthis.anchorList.push({ element: this.infoPanel, horizontal: \"right\", x: 0 });\n\t\tthis.uiElements.addElement(this.infoPanel);\n\n\t\tthis.helpScreen = new HelpScreen();\n\t\tthis.helpScreen.click = (): boolean => {\n\t\t\tthis.hideHelp();\n\t\t\treturn true;\n\t\t};\n\t\tthis.uiElements.addElement(this.helpScreen);\n\n\t\tconst helpButtonFactor = 0.5;\n\t\tconst helpButtonSize = buttonSize * helpButtonFactor;\n\t\tthis.buttonHelp = new Button({\n\t\t\tx: 0, y: 0, width: helpButtonSize, height: helpButtonSize, radius: 0, style: STYLE_BTN_NAVBUTTONS,\n\t\t\ticon: { path: ICON_HELP, scale: this.uiScale * helpButtonFactor * ICON_SCALE, width: ICON_SIZE, height: ICON_SIZE, style: STYLE_ICON_HELPBUTTON }\n\t\t});\n\t\tthis.anchorList.push({ element: this.buttonHelp, horizontal: \"left\", x: 0 });\n\t\tthis.buttonHelp.click = (): boolean => {\n\t\t\tassert(this.buttonHelp !== undefined);\n\t\t\tassert(this.buttonHelp!.data.icon !== undefined);\n\t\t\tassert(this.infoPanel !== undefined);\n\t\t\tif (this.buttonHelp!.isChecked()) {\n\t\t\t\tthis.hideHelp();\n\t\t\t} else {\n\t\t\t\tthis.showHelp();\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tthis.buttonHelp.enable();\n\t\tthis.uiElements.addElement(this.buttonHelp);\n\n\t\tif (this.firstVisit) {\n\t\t\tthis.showHelp();\n\t\t} else if (this.memory.showInfo) {\n\t\t\tthis.unfoldInfo(0);\n\t\t}\n\n\t\tthis.realignMain();\n\n\t\t// Legacy bindings\n\t\tthis.keybind[\"s\"] = this.keybind[\"d\"];\t\t\t// legacy save\n\t\tthis.keybind[\"n\"] = this.keybind[\"ArrowRight\"];\t// legacy next\n\t\tthis.keybind[\"p\"] = this.keybind[\"ArrowLeft\"];\t// legacy previous\n\t\tthis.keybind[\"+\"] = this.keybind[\"ArrowUp\"]; \t// legacy vote up\n\t\tthis.keybind[\"-\"] = this.keybind[\"ArrowDown\"]; \t// legacy vote down\n\n\t\t/*switch (event.key) {\n\t\t\t\tcase \"u\": // legacy next unvoted\n\t\t\t\tcase \"i\": // legacy info window\n\t\t\t}*/\n\n\t\tthis.interfaceReady = true;\n\n\t\tthis.playlistLoaded = function playlistLoaded() {\n\t\t\tassert(this.playlist !== undefined);\n\t\t\tassert(trace(\"Playlist \" + this.playlist!.generation + \" loaded!\"));\n\n\t\t\tthis.voted = 0;\n\t\t\tthis.favorites = 0;\n\t\t\tfor (let i = 0; i < this.playlist!.length(); ++i) {\n\t\t\t\tconst entry = this.playlist!.list[i];\n\t\t\t\tassert(entry.favorite === 0 || entry.favorite === 1);\n\t\t\t\tassert(entry.voted === -1 || entry.voted === 0 || entry.voted === +1);\n\t\t\t\tif (this.playlist!.list[i].voted !== 0) {\n\t\t\t\t\tthis.voted++;\n\t\t\t\t}\n\t\t\t\tif (this.playlist!.list[i].favorite !== 0) {\n\t\t\t\t\tthis.favorites++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tassert(trace(this.voted + \" votes, \" + this.favorites + \" favorites\"));\n\n\t\t\tthis.setFilterMode(FilterMode.ALL);\n\t\t};\n\t\tthis.playlistLoaded();\n\t}\n\tpublic setupSplash() {\n\t\tthis.splashScreen = new SplashScreen(this.canvas.width, this.canvas.height, this.viewScale);\n\t\tthis.uiElements.addElement(this.splashScreen);\n\t\tthis.splashButton = new ButtonCore(0, 0, this.canvas.width, this.canvas.height);\n\t\tthis.splashButton.click = (): boolean => {\n\t\t\tthis.setupMain();\n\t\t\tthis.changeTrack(this.currentTrackIX());\n\t\t\treturn true;\n\t\t};\n\t\tthis.keybind[\" \"] = this.keybind[\"Spacebar\"] = (/*event: KeyboardEvent*/): boolean => {\n\t\t\tassert(this.splashButton !== undefined);\n\t\t\tif (this.splashButton!.isEnabled()) {\n\t\t\t\tassert(this.splashButton!.click !== undefined);\n\t\t\t\treturn this.splashButton!.click!();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tthis.uiElements.addElement(this.splashButton);\n\t}\n\n\tprivate setCursor(cursor?: string) {\n\t\tconst c = (cursor ? cursor :\n\t\t\tthis.errorMessage !== \"\" ? \"not-allowed\" :\n\t\t\t\tthis.loadingPattern || this.loadingPreset ? \"progress\" : \"default\"\n\t\t);\n\t\tif (this.canvas.style.cursor !== c) {\n\t\t\tthis.canvas.style.cursor = c;\n\t\t}\n\t}\n\n\tprivate lastFrame: number = 0;\n\tprivate avgDelta: number = 0;\n\tprivate avgTime: number = 0;\n\tprivate animationFrame(timestamp: number) {\n\t\tconst t0 = performance.now();\n\n\t\tlet delta: number = timestamp - this.lastFrame;\n\t\tif (delta > 2000) delta = 1000 / 60;\t// Most likely paused, so prevent big jumps\n\n\t\tthis.lastFrame = timestamp;\n\n\t\tthis.background.scroll(IDLE_SCROLL * delta);\n\t\tthis.background.refresh();\n\n\t\t// animate folding transition\n\t\tif (this.animateInfoFold !== undefined) {\n\t\t\tconst active = this.animateInfoFold.animate(delta);\n\t\t\tthis.player.width = this.animateInfoFold.value;\n\t\t\tthis.realignMain();\n\t\t\tif (!active) {\n\t\t\t\tthis.animateInfoFold = undefined;\n\t\t\t}\n\t\t}\n\n\t\tthis.ctx.globalCompositeOperation = \"source-over\";\n\t\tthis.player.animate(delta);\n\n\t\tthis.uiElements.render(this.ctx, delta);\n\n\t\tif (this.playlist && this.playlist.closed) {\n\t\t\tconst ctx = this.ctx;\n\t\t\tctx.font = '12px \"Lucida Console\", Monaco, monospace';\n\t\t\tctx.fillStyle = \"#cc9944\";\n\t\t\tctx.textAlign = \"center\";\n\t\t\tctx.fillText(\"Voting is closed for this generation\", this.player.width / 2, ctx.canvas.height - 9);\n\t\t}\n\n\t\tif (this.errorMessage !== \"\") {\n\t\t\tconst ctx = this.ctx;\n\t\t\tctx.fillStyle = \"#ff0000\";\n\t\t\tctx.font = \"200% sans-serif\";\n\t\t\tctx.textAlign = \"center\";\n\t\t\tctx.fillText(this.errorMessage, this.player.width / 2, ctx.canvas.height / 8);\n\t\t} else if (this.warningMessage !== \"\") {\n\t\t\tconst ctx = this.ctx;\n\t\t\tctx.fillStyle = \"#ffaa00\";\n\t\t\tctx.font = \"150% sans-serif\";\n\t\t\tctx.textAlign = \"center\";\n\t\t\tctx.fillText(this.warningMessage, this.player.width / 2, ctx.canvas.height / 8);\n\t\t}\n\n\t\tif (TARGET === \"development\") {\n\t\t\t// show version\n\t\t\t{\n\t\t\t\tthis.ctx.font = '9px \"Lucida Console\", Monaco, monospace';\n\t\t\t\tconst v = \"version \" + VERSION;\n\t\t\t\tconst mv = this.ctx.measureText(v);\n\t\t\t\tthis.ctx.fillStyle = \"#ff000066\";\n\t\t\t\tthis.ctx.fillRect(0, this.ctx.canvas.height - 13, mv.width + 6, 13);\n\t\t\t\tthis.ctx.fillStyle = \"white\";\n\t\t\t\tthis.ctx.textAlign = \"left\";\n\t\t\t\tthis.ctx.fillText(v, 0 + 3, this.ctx.canvas.height - 4);\n\t\t\t}\n\t\t\t// show FPS\n\t\t\t{\n\t\t\t\tif (delta > 0) {\n\t\t\t\t\tthis.avgDelta = this.avgDelta * 0.9 + delta;\n\t\t\t\t}\n\t\t\t\tthis.ctx.font = '10px \"Lucida Console\", Monaco, monospace';\n\t\t\t\tconst s = (10000 / this.avgDelta).toFixed(1) +\n\t\t\t\t\t\" fps \" +\n\t\t\t\t\t(\" (\" + (this.avgTime / 10).toFixed(0)).substr(-4) +\n\t\t\t\t\t\" ms)\";\n\t\t\t\tconst mv = this.ctx.measureText(s);\n\t\t\t\tthis.ctx.fillStyle = \"#ff000066\";\n\t\t\t\tthis.ctx.fillRect(this.ctx.canvas.width - mv.width - 5, this.ctx.canvas.height - 13, mv.width + 6, 13);\n\t\t\t\tthis.ctx.fillStyle = \"white\";\n\t\t\t\tthis.ctx.textAlign = \"left\";\n\t\t\t\tthis.ctx.fillText(s, this.ctx.canvas.width - mv.width - 2, this.ctx.canvas.height - 4);\n\t\t\t}\n\t\t}\n\n\t\twindow.requestAnimationFrame(this.animationFrame.bind(this));\n\n\t\tconst timing = performance.now() - t0;\n\t\tif (timing > 0) {\n\t\t\tthis.avgTime = this.avgTime * 0.9 + timing;\n\t\t}\n\t}\n\n\tpublic static stripBPM(name: string): string {\n\t\treturn name.replace(/ \\([0-9]*\\)/, \"\");\n\t}\n\n\tpublic static directName(name: string): string {\n\t\treturn encodeURI(this.stripBPM(name).replace(/ /g, \"-\"));\n\t}\n\n\tprivate currentTrackIX(): number {\n\t\tassert(this.playlist !== undefined);\n\t\tassert(this.playlist!.length() > 0);\n\t\tconst pos = this.memory.playPos[this.playlist!.generation] || 0;\n\t\tassert(pos >= 0 && pos < this.playlist!.length());\t\t\t\t\t\t\t\t// sanity bounds check\n\t\treturn pos;\n\t}\n\tprivate currentTrack(): ListEntry {\n\t\treturn this.playlist!.list[this.currentTrackIX()];\n\t}\n\n\tprivate navigate(generation: number, wanted: string) {\n\t\tassert(trace('navigate(' + generation + ', \"' + wanted + '\")'));\n\t\tif (!this.interfaceReady) {\n\t\t\tthis.setupMain();\n\t\t}\n\t\tthis.loadPlaylist(generation).then(() => {\n\t\t\tlet trackIX = wanted !== undefined ? this.playlist!.indexOf(wanted) : this.currentTrackIX();\n\t\t\tif (trackIX >= 0) {\n\t\t\t\tthis.changeTrack(trackIX);\n\t\t\t} else {\n\t\t\t\tthis.log(\"404\", generation + \"/\" + wanted);\n\t\t\t\tconsole.error(\"Direct url to non-existing pattern\");\n\t\t\t\tthis.warning(\"Pattern does not exist\");\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate loadPlaylist(generation: number | undefined) {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tif (this.playlist !== undefined && this.playlist.generation === generation) {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tlet url = this.apiURL + \"list?\";\n\t\t\t\tif (this.memory.patternariumID !== undefined) {\n\t\t\t\t\turl += \"id=\" + encodeURIComponent(this.memory.patternariumID) + \"&\";\n\t\t\t\t}\n\t\t\t\tif (generation !== undefined) {\n\t\t\t\t\turl += \"gen=\" + encodeURIComponent(generation.toString()) + \"&\";\n\t\t\t\t}\n\t\t\t\turl = url.slice(0, -1);\t// slice to remove last ?/&\n\n\t\t\t\tgetJSON(url).then((data: any) => {\n\t\t\t\t\tconst list = <IGenerationList>data;\n\t\t\t\t\tthis.memory.patternariumID = list.id;\n\t\t\t\t\t// removed save here since it is always saved when changing tracks (which happens after playlist load)\n\t\t\t\t\t// this.save();\n\t\t\t\t\tthis.playlist = new PlayList(list);\n\t\t\t\t\tif (this.playlistLoaded !== undefined) {\n\t\t\t\t\t\tthis.playlistLoaded();\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch((error) => {\n\t\t\t\t\tthis.log(\"playlist error\", generation + \":\" + error);\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthis.error(\"Error loading playlist, try reloading\");\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate loadPattern(track: ListEntry): Promise<PatternData> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (track.pattern) {\n\t\t\t\tresolve(track.pattern);\n\t\t\t} else {\n\t\t\t\tPromise.all([\n\t\t\t\t\tgetJSON(this.fileURL + track.path + \".ptn\"),\n\t\t\t\t\tgetHTTP(this.fileURL + track.path + \".mtpreset\")\n\t\t\t\t]).then(([pattern, preset]) => {\n\t\t\t\t\ttrack.pattern = new PatternData(pattern as IPtnData);\n\t\t\t\t\ttrack.preset = preset;\n\t\t\t\t\tresolve(track.pattern);\n\t\t\t\t}).catch((error) => {\n\t\t\t\t\tthis.log(\"track error\", track.path + \":\" + error);\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthis.error(\"Error loading pattern, try reloading\");\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate loadTrack(track: ListEntry): Promise<any> {\n\t\tassert(track.pattern !== undefined);\n\t\tassert(trace(\"loadTrack() for \" + track.directname));\n\t\tthis.player.load(this.fileURL + track.path + \".mp3\", track.pattern!);\n\n\t\t// if main interface is up, we should autoplay\n\t\tif (this.interfaceReady) {\n\t\t\tconst playpromise = this.player.play();\n\t\t\tif (playpromise !== undefined) {\n\t\t\t\treturn playpromise.then(_ => {\n\t\t\t\t\tassert(this.playlist !== undefined);\n\t\t\t\t\tthis.log(\"play\", this.playlist!.generation + \"/\" + track.directname);\n\t\t\t\t\tthis.warningMessage = \"\";\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tthis.log(\"play error\", error.name);\n\t\t\t\t\tconsole.error(\"player.play() Promise returned: \" + error.name);\n\t\t\t\t\tif (error.name === \"NotSupportedError\") {\n\t\t\t\t\t\tthis.error(\"Browser not supported\");\n\t\t\t\t\t}\n\t\t\t\t\tassert(this.buttonStop !== undefined);\n\t\t\t\t\tthis.buttonStop!.hide();\n\t\t\t\t\tassert(this.buttonPlay !== undefined);\n\t\t\t\t\tthis.buttonPlay!.show();\n\t\t\t\t\tthis.buttonPlay!.check();\t// checked button is always shown\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tthis.loadingPattern = false;\n\t\t\t\t\tthis.updateInterface();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.log(\"play error\", \"no promise\");\n\t\t\t\tconsole.error(\"Error Audio.play() did not return a Promise\");\n\t\t\t\tthis.error(\"Browser not supported\");\n\t\t\t\treturn Promise.reject();\n\t\t\t}\n\t\t} else {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\n\tprivate changeTrack(trackIX: number): Promise<any> {\n\t\tassert(this.playlist !== undefined);\t\t\t\t// function should never be called if no playlist is loaded\n\t\tassert(this.playlist!.length() > 0);\n\t\tassert(trackIX >= 0 && trackIX < this.playlist!.length());\t// sanity bounds check\n\n\t\tthis.player.stop(true);\n\t\tif (this.memory.playPos[this.playlist!.generation] !== trackIX) {\n\t\t\tthis.memory.playPos[this.playlist!.generation] = trackIX;\n\t\t\tthis.save();\n\t\t}\n\n\t\tconst track = this.playlist!.list[trackIX];\n\n\t\tthis.loadingPattern = true;\n\t\tif (this.interfaceReady) {\n\t\t\tthis.updateNavigation();\n\t\t\tthis.updateInterface();\n\t\t\twindow.location.hash = Patternarium.trackToHash(this.playlist!.generation, track.directname);\n\t\t}\n\n\t\tif (track.pattern !== undefined) {\n\t\t\treturn this.loadTrack(track);\n\t\t} else {\n\t\t\treturn this.loadPattern(track).then((pattern: PatternData) => {\n\t\t\t\tassert(track.pattern === pattern);\n\t\t\t\tif (track.pattern === undefined) {\n\t\t\t\t\tassert(false);\t// what the funk man?!\n\t\t\t\t\ttrack.pattern = pattern;\n\t\t\t\t}\n\t\t\t\tthis.loadTrack(track);\n\t\t\t});\n\t\t}\n\n\t\t// TODO: add audio preloading\n\t}\n\n\tprivate updateInterface() {\n\t\tthis.setCursor();\n\t\tif (this.errorMessage !== \"\") {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(this.buttonPlay !== undefined);\n\t\tassert(this.buttonStop !== undefined);\n\t\tif (this.loadingPattern && !this.buttonPlay!.isHidden()) {\n\t\t\tthis.buttonPlay!.hide();\n\t\t}\n\t\tif (this.loadingPattern && !this.buttonStop!.isHidden()) {\n\t\t\tthis.buttonStop!.hide();\n\t\t}\n\n\t\tassert(this.playlist !== undefined);\t\t\t\t\t\t\t\t\t\t// only called if a track is loaded\n\t\tconst track = this.currentTrack();\n\n\t\tassert(this.trackLabel !== undefined);\n\t\tthis.trackLabel!.data.text = Patternarium.stripBPM(track.name);\n\t\tassert(this.infoPanel !== undefined);\n\t\tif (track.pattern !== undefined) {\n\t\t\tthis.infoPanel!.setInfo(this.playlist!.generation, track);\n\t\t}\n\n\t\tassert(this.buttonVoteUp !== undefined);\n\t\tassert(this.buttonVoteDown !== undefined);\n\n\t\tif (track.voted > 0) {\n\t\t\tthis.buttonVoteUp!.check();\n\t\t\tthis.buttonVoteUp!.disable();\n\t\t} else {\n\t\t\tthis.buttonVoteUp!.uncheck();\n\t\t\tif (this.playlist!.closed) {\n\t\t\t\tthis.buttonVoteUp!.disable();\n\t\t\t} else {\n\t\t\t\tthis.buttonVoteUp!.enable();\n\t\t\t}\n\t\t}\n\n\t\tif (track.voted < 0) {\n\t\t\tthis.buttonVoteDown!.check();\n\t\t\tthis.buttonVoteDown!.disable();\n\t\t} else {\n\t\t\tthis.buttonVoteDown!.uncheck();\n\t\t\tif (this.playlist!.closed) {\n\t\t\t\tthis.buttonVoteDown!.disable();\n\t\t\t} else {\n\t\t\t\tthis.buttonVoteDown!.enable();\n\t\t\t}\n\t\t}\n\n\t\tassert(this.buttonFavorite !== undefined);\n\t\tthis.buttonFavorite!.enable();\n\t\tif (track.favorite > 0) {\n\t\t\tthis.buttonFavorite!.check();\n\t\t} else {\n\t\t\tthis.buttonFavorite!.uncheck();\n\t\t}\n\n\t\tassert(this.buttonCopy !== undefined);\n\t\tif (track.pattern) {\n\t\t\tthis.buttonCopy!.enable();\n\t\t\tthis.buttonCopy!.uncheck();\n\t\t}\n\n\t\tassert(this.buttonFilterFavorites !== undefined);\n\t\tassert(this.buttonFilterFavorites!.data.label !== undefined);\n\t\tif (this.favorites > 0) {\n\t\t\tthis.buttonFilterFavorites!.data.label!.text = LABEL_FILTER_FAVORITES + \" (\" + (this.favorites) + \")\";\n\t\t\tthis.buttonFilterFavorites!.enable();\n\t\t} else {\n\t\t\tthis.buttonFilterFavorites!.data.label!.text = LABEL_FILTER_FAVORITES;\n\t\t\tthis.buttonFilterFavorites!.disable();\n\t\t}\n\t\tassert(this.buttonFilterUnvoted !== undefined);\n\t\tassert(this.buttonFilterUnvoted!.data.label !== undefined);\n\t\tassert(this.voted <= this.playlist!.length());\n\t\tif (this.voted < this.playlist!.length()) {\n\t\t\tthis.buttonFilterUnvoted!.data.label!.text = LABEL_FILTER_UNVOTED + \" (\" + (this.playlist!.length() - this.voted) + \")\";\n\t\t\tthis.buttonFilterUnvoted!.enable();\n\t\t} else {\n\t\t\tthis.buttonFilterUnvoted!.data.label!.text = LABEL_FILTER_UNVOTED;\n\t\t\tthis.buttonFilterUnvoted!.disable();\n\t\t}\n\t}\n\n\tprivate voteTrack(direction: number, favorite: number) {\n\t\treturn new Promise<void>((resolve, reject) => {\n\n\t\t\tlet url = this.apiURL + \"vote?\";\n\t\t\tassert(this.memory.patternariumID !== undefined);\n\t\t\turl += \"id=\" + encodeURIComponent(this.memory.patternariumID!);\n\t\t\tassert(this.playlist !== undefined);\n\t\t\turl += \"&gen=\" + encodeURIComponent(this.playlist!.generation.toString());\n\t\t\tconst current = this.currentTrack();\n\t\t\turl += \"&name=\" + encodeURIComponent(current.name);\n\n\t\t\tif (direction !== 0) {\n\t\t\t\turl += \"&vote=\" + encodeURIComponent(direction.toString());\n\t\t\t\tassert(current.voted !== direction);\n\t\t\t\tcurrent.voted = direction;\n\t\t\t}\n\t\t\tif (favorite !== 0) {\n\t\t\t\turl += \"&favorite=\" + encodeURIComponent(favorite.toString());\n\t\t\t\tassert(current.favorite !== favorite);\n\t\t\t\tcurrent.favorite = favorite > 0 ? 1 : 0;\n\t\t\t}\n\n\t\t\tgetJSON(url).then((data: any) => {\n\t\t\t\tif (data.error === \"CLOSED\") {\n\t\t\t\t\t// should not happen normally as voting should be disabled in the interface\n\t\t\t\t\tlet error = \"This generation is closed for voting, please reload\";\n\t\t\t\t\tthis.error(error);\n\t\t\t\t\treject(error);\n\t\t\t\t} else {\n\t\t\t\t\tassert(data.id === this.memory.patternariumID);\n\t\t\t\t\tassert(data.voted !== undefined);\n\t\t\t\t\tassert(data.voted.length === 3);\n\t\t\t\t\tassert(this.playlist !== undefined);\n\t\t\t\t\tconst found = this.playlist!.indexOfName(data.voted[0]);\n\t\t\t\t\tif (found >= 0) {\t// could actually have switched generation before this callback\n\t\t\t\t\t\tassert(this.playlist!.list[found].voted === data.voted[1]);\n\t\t\t\t\t\tassert(this.playlist!.list[found].favorite === data.voted[2]);\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tthis.log(\"vote error\", error);\n\t\t\t\tconsole.error(error);\n\t\t\t\tthis.error(\"An error occured while voting\");\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate nextTrack() {\n\t\tassert(this.nextTrackIX !== undefined);\n\t\tthis.changeTrack(this.nextTrackIX!);\n\t}\n\tprivate prevTrack() {\n\t\tassert(this.prevTrackIX !== undefined);\n\t\tthis.changeTrack(this.prevTrackIX!);\n\t}\n\tprivate likeTrack() {\n\t\tassert(this.buttonVoteUp !== undefined);\n\t\tassert(this.buttonVoteUp!.isChecked() === false);\n\t\t// TODO: decide if this is where we check or if we assume?\n\n\t\tif (this.buttonVoteUp!.isChecked() === false) {\n\t\t\tconst current = this.currentTrack();\n\t\t\tconst firstInteraction = current.voted === 0;\n\t\t\tif (current.voted === 0) {\t// previously unvoted?\n\t\t\t\tthis.voted++;\n\t\t\t}\n\t\t\tthis.voteTrack(+1, 0);\n\t\t\tassert(this.playlist !== undefined);\n\t\t\tthis.log(\"like\", this.playlist!.generation + \"/\" + current.directname);\n\t\t\tthis.updateInterface();\n\t\t\tif (true || firstInteraction) {\n\t\t\t\tif (this.nextTrackIX) {\n\t\t\t\t\tsetTimeout(() => this.nextTrack(), 300);\n\t\t\t\t} else if (this.prevTrackIX) {\n\t\t\t\t\tsetTimeout(() => this.prevTrack(), 300);\n\t\t\t\t} else {\n\t\t\t\t\tassert(this.buttonFilterUnvoted !== undefined);\n\t\t\t\t\tassert(this.buttonFilterUnvoted!.isEnabled() === false);\t// should be set by updateInterface()\n\t\t\t\t\tif (this.filter === FilterMode.UNVOTED) {\n\t\t\t\t\t\tthis.setFilterMode(FilterMode.ALL);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tprivate dislikeTrack() {\n\t\tassert(this.buttonVoteDown !== undefined);\n\t\tassert(this.buttonVoteDown!.isChecked() === false);\n\t\t// TODO: decide if this is where we check or if we assume?\n\n\t\tif (this.buttonVoteDown!.isChecked() === false) {\n\t\t\tconst current = this.currentTrack();\n\t\t\tconst firstInteraction = current.voted === 0;\n\t\t\tif (current.voted === 0) {\t// previously unvoted?\n\t\t\t\tthis.voted++;\n\t\t\t}\n\t\t\tthis.voteTrack(-1, 0);\n\t\t\tassert(this.playlist !== undefined);\n\t\t\tthis.log(\"dislike\", this.playlist!.generation + \"/\" + current.directname);\n\t\t\tthis.updateInterface();\n\t\t\tif (true || firstInteraction) {\n\t\t\t\tif (this.nextTrackIX) {\n\t\t\t\t\tsetTimeout(() => this.nextTrack(), 300);\n\t\t\t\t} else if (this.prevTrackIX) {\n\t\t\t\t\tsetTimeout(() => this.prevTrack(), 300);\n\t\t\t\t} else {\n\t\t\t\t\tassert(this.buttonFilterUnvoted !== undefined);\n\t\t\t\t\tassert(this.buttonFilterUnvoted!.isEnabled() === false);\t// should be set by updateInterface()\n\t\t\t\t\tif (this.filter !== FilterMode.UNVOTED) {\n\t\t\t\t\t\tthis.setFilterMode(FilterMode.ALL);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tprivate favoriteTrack() {\n\t\tassert(this.buttonFavorite !== undefined);\n\t\tconst set = this.buttonFavorite!.isChecked() === false;\n\t\tassert(this.playlist !== undefined);\n\t\tthis.voteTrack(0, set ? 1 : -1);\n\t\tthis.favorites += (set ? 1 : -1);\n\t\tassert(this.favorites >= 0);\n\t\tthis.log(set ? \"favorite\" : \"unfavorite\", this.playlist!.generation + \"/\" + this.currentTrack().directname);\n\t\tif (this.filter === FilterMode.FAVORITES && this.favorites === 0) {\n\t\t\tthis.setFilterMode(FilterMode.ALL);\n\t\t}\n\t\tthis.updateInterface();\n\t}\n\tprivate copyTrack() {\n\t\tassert(this.playlist !== undefined);\n\t\tconst current = this.currentTrack();\n\t\tassert(current.preset !== undefined);\n\n\t\tconst fallback = () => {\n\t\t\twindow.prompt(\"Please copy the text below and paste into Microtonic\", current.preset!.replace(/\\t/g, \"\").replace(/\\r/g, \"\"));\n\t\t\tthis.log(\"copy\", this.playlist!.generation + \"/\" + current.directname + \":fallback\");\n\t\t};\n\n\t\tif (navigator && (navigator as any).clipboard) {\n\t\t\t(navigator as any).clipboard.writeText(current.preset).then(() => {\n\t\t\t\tthis.log(\"copy\", this.playlist!.generation + \"/\" + current.directname + \":clipboard\");\n\t\t\t\tassert(this.buttonCopy !== undefined);\n\t\t\t\tthis.buttonCopy!.check();\n\t\t\t\tsetTimeout(() => this.buttonCopy!.uncheck(), 500);\n\t\t\t}, () => {\n\t\t\t\tfallback();\n\t\t\t});\n\t\t} else {\n\t\t\tif (copyToClipboard(current.preset!)) {\n\t\t\t\tthis.log(\"copy\", this.playlist!.generation + \"/\" + current.directname + \":execCommand\");\n\t\t\t\tassert(this.buttonCopy !== undefined);\n\t\t\t\tthis.buttonCopy!.check();\n\t\t\t\tsetTimeout(() => this.buttonCopy!.uncheck(), 500);\n\t\t\t} else {\n\t\t\t\tfallback();\n\t\t\t}\n\t\t}\n\t}\n\t// private toggleInfo(event: Event) {\n\t// \tconst _ = event;\n\t// }\n\n\tpublic error(message: string) {\n\t\tfor (let i = 0; i < this.uiElements.elements.length; ++i) {\n\t\t\tif (this.uiElements.elements[i] instanceof Button) {\n\t\t\t\t(this.uiElements.elements[i] as Button).disable();\n\t\t\t}\n\t\t}\n\t\tthis.errorMessage = message;\n\t\tthis.player.stop(false);\n\t\tif (this.interfaceReady) {\n\t\t\tthis.updateInterface();\n\t\t}\n\t}\n\tpublic warning(message: string) {\n\t\tthis.warningMessage = message;\n\t\tif (this.interfaceReady) {\n\t\t\tthis.updateInterface();\n\t\t}\n\t}\n\n\tpublic static hashToTrack(hash: string): { generation: number, directname: string } | undefined {\n\t\tconst match = hash.match(\"#/([0-9]+)(/(.*))?\");\n\t\treturn match === null ? undefined : {\n\t\t\tgeneration: parseInt(match[1]),\n\t\t\tdirectname: match[3]\n\t\t};\n\t}\n\tpublic static trackToHash(generation: number, directname: string) {\n\t\treturn \"#/\" + generation + \"/\" + directname;\n\t}\n\n\tprivate trackStep(start: number, direction: number, filter: FilterMode): number | undefined {\n\t\tlet pos = start + direction;\n\n\t\tif (filter === FilterMode.ALL) {\n\t\t\t// Wrap navigation\n\t\t\twhile (pos < 0) pos += this.playlist!.length();\n\t\t\twhile (pos >= this.playlist!.length()) pos -= this.playlist!.length();\n\t\t\treturn pos;\n\t\t} else {\n\t\t\twhile (pos >= 0 && pos < this.playlist!.length()) {\n\t\t\t\tconst track = this.playlist!.list[pos];\n\t\t\t\tif ((filter === FilterMode.FAVORITES && track.favorite > 0) ||\n\t\t\t\t\t(filter === FilterMode.UNVOTED && track.voted === 0)) {\n\t\t\t\t\treturn pos;\n\t\t\t\t}\n\t\t\t\tpos += direction;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate updateNavigation() {\n\t\tassert(this.playlist !== undefined);\t\t\t\t// function should never be called if no playlist is loaded\n\t\tassert(this.playlist!.length() > 0);\n\t\tconst pos = this.currentTrackIX();\n\n\t\tthis.nextTrackIX = this.trackStep(pos, +1, this.filter);\n\t\tassert(this.buttonNext !== undefined);\n\t\tif (this.nextTrackIX === undefined) {\n\t\t\tthis.buttonNext!.disable();\n\t\t} else {\n\t\t\tthis.buttonNext!.enable();\n\t\t}\n\n\t\tthis.prevTrackIX = this.trackStep(pos, -1, this.filter);\n\t\tassert(this.buttonPrev !== undefined);\n\t\tif (this.prevTrackIX === undefined) {\n\t\t\tthis.buttonPrev!.disable();\n\t\t} else {\n\t\t\tthis.buttonPrev!.enable();\n\t\t}\n\t}\n\n\tpublic setFilterMode(mode: FilterMode) {\n\t\tthis.filter = mode;\n\t\tassert(this.buttonFilter !== undefined);\n\t\tassert(this.buttonFilter!.data.icon !== undefined);\n\n\t\tconst firstFavorite = this.trackStep(-1, +1, FilterMode.FAVORITES);\n\t\tconst firstUnvoted = this.trackStep(-1, +1, FilterMode.UNVOTED);\n\n\t\tassert(this.buttonFilterAll !== undefined);\n\t\tif (mode === FilterMode.ALL) {\n\t\t\tthis.buttonFilter!.data.icon!.path = ICON_FILTER;\n\t\t\tthis.buttonFilter!.uncheck();\n\t\t\tthis.buttonFilterAll!.check();\n\t\t\tthis.buttonFilterAll!.disable();\n\t\t} else {\n\t\t\tthis.buttonFilterAll!.uncheck();\n\t\t\tthis.buttonFilterAll!.enable();\n\t\t}\n\n\t\tassert(this.buttonFilterFavorites !== undefined);\n\t\tif (mode === FilterMode.FAVORITES) {\n\t\t\tassert(this.buttonDownload !== undefined);\n\t\t\tthis.buttonDownload!.data.icon!.path = ICON_DOWNLOAD_FAVORITES;\n\n\t\t\tthis.buttonFilter!.data.icon!.path = ICON_FILTER_FAVORITES;\n\t\t\tthis.buttonFilter!.check();\n\t\t\tthis.buttonFilterFavorites!.check();\n\t\t\tthis.buttonFilterFavorites!.disable();\n\n\t\t\tassert(firstFavorite !== undefined);\n\t\t\tconst current = this.currentTrack();\n\t\t\tif (current.favorite === 0) {\n\t\t\t\tthis.changeTrack(firstFavorite!);\n\t\t\t}\n\t\t} else {\n\t\t\tassert(this.buttonDownload !== undefined);\n\t\t\tthis.buttonDownload!.data.icon!.path = ICON_DOWNLOAD;\n\n\t\t\tthis.buttonFilterFavorites!.uncheck();\n\t\t\tif (firstFavorite !== undefined) {\n\t\t\t\tthis.buttonFilterFavorites!.enable();\n\t\t\t} else {\n\t\t\t\tthis.buttonFilterFavorites!.disable();\n\t\t\t}\n\t\t}\n\n\t\tassert(this.buttonFilterUnvoted !== undefined);\n\t\tif (mode === FilterMode.UNVOTED) {\n\t\t\tthis.buttonFilter!.data.icon!.path = ICON_FILTER_UNVOTED;\n\t\t\tthis.buttonFilter!.check();\n\t\t\tthis.buttonFilterUnvoted!.check();\n\t\t\tthis.buttonFilterUnvoted!.disable();\n\n\t\t\tassert(firstUnvoted !== undefined);\n\t\t\tconst current = this.currentTrack();\n\t\t\tif (current.voted !== 0) {\n\t\t\t\tthis.changeTrack(firstUnvoted!);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.buttonFilterUnvoted!.uncheck();\n\t\t\tif (firstUnvoted !== undefined) {\n\t\t\t\tthis.buttonFilterUnvoted!.enable();\n\t\t\t} else {\n\t\t\t\tthis.buttonFilterUnvoted!.disable();\n\t\t\t}\n\t\t}\n\n\t\tthis.updateNavigation();\n\t}\n\n\tpublic log(what: string, param?: string) {\n\t\tlet url = this.apiURL + \"log?\";\n\t\tassert(this.memory.patternariumID !== undefined);\n\t\turl += \"id=\" + encodeURIComponent(this.memory.patternariumID!);\n\t\turl += \"&what=\" + encodeURIComponent(what);\n\t\tif (param) {\n\t\t\turl += \"¶m=\" + encodeURIComponent(param);\n\t\t}\n\n\t\tgetJSON(url).then((data: any) => {\n\t\t\tassert(trace(\"logged \" + what + \" \" + param + \" = \" + JSON.stringify(data)));\n\t\t}).catch((error) => {\n\t\t\tconsole.error(error);\n\t\t});\n\t}\n\n\tpublic foldInfo(speed: number) {\n\t\tassert(this.buttonInfoFold !== undefined);\n\t\tassert(this.buttonInfoFold!.isChecked() === true);\n\t\tthis.animateInfoFold = new Animator(1.8, 0, this.player.width, speed, this.canvas.width);\n\t\tthis.buttonInfoFold!.data.icon!.path = ICON_UNFOLD;\n\t\tthis.buttonInfoFold!.uncheck();\n\t}\n\tpublic unfoldInfo(speed: number) {\n\t\tassert(this.buttonHelp !== undefined);\n\t\tif (this.buttonHelp!.isChecked()) {\n\t\t\tthis.hideHelp();\n\t\t}\n\n\t\tassert(this.buttonInfoFold !== undefined);\n\t\tassert(this.buttonInfoFold!.isChecked() === false);\n\t\tthis.animateInfoFold = new Animator(1.8, 0, this.player.width, speed, this.canvas.width - this.infoPanel!.data.width);\n\t\tthis.buttonInfoFold!.data.icon!.path = ICON_FOLD;\n\t\tthis.buttonInfoFold!.check();\n\t}\n\tpublic hideHelp() {\n\t\tassert(this.buttonHelp !== undefined);\n\t\tassert(this.buttonHelp!.isChecked() === true);\n\t\tassert(this.helpDimmer !== undefined);\n\t\tthis.helpDimmer!.hidden = true;\n\t\tassert(this.helpScreen !== undefined);\n\t\tthis.helpScreen!.hidden = true;\n\t\tthis.buttonHelp!.uncheck();\n\t}\n\tpublic showHelp() {\n\t\tassert(this.buttonInfoFold !== undefined);\n\t\tif (this.buttonInfoFold!.isChecked()) {\n\t\t\tthis.foldInfo(0);\n\t\t}\n\n\t\tassert(this.buttonHelp !== undefined);\n\t\tassert(this.buttonHelp!.isChecked() === false);\n\t\tassert(this.helpDimmer !== undefined);\n\t\tthis.helpDimmer!.hidden = false;\n\t\tassert(this.helpScreen !== undefined);\n\t\tthis.helpScreen!.hidden = false;\n\t\tthis.buttonHelp!.check();\n\t}\n}","import * as assert from \"assert\";\n\n// each stop is two entries in the array [time,value] and the Animator requires at least 2 stops\nexport class Animator {\n\tprivate time: number = 0;\n\tpublic value: number = 0;\n\tprivate currentStep: number = -2;\n\tprivate tBase: number = 0;\n\tprivate tRange: number = 0;\n\tprivate vBase: number = 0;\n\tprivate vRange: number = 0;\n\tprivate stops: Array<number>;\n\tpublic loop: boolean = false;\n\tconstructor(\n\t\tpublic ease: number,\n\t\t...stops: number[]) {\n\t\tassert(stops.length >= 4);\n\t\tthis.stops = stops;\n\t\tthis.nextStep();\n\t}\n\t// Returns true if animating (within range)\n\tpublic animate(delta: number): boolean {\n\t\tthis.time += delta / 1000;\n\t\tif (this.time > this.tBase + this.tRange && !this.nextStep()) {\n\t\t\t// after step\n\t\t\tthis.value = this.vBase + this.vRange;\n\t\t\treturn false;\n\t\t}\n\t\tif (this.time < this.tBase || this.tRange <= 0) {\n\t\t\t// before step\n\t\t\tthis.value = this.vBase;\n\t\t\treturn true;\n\t\t} else {\n\t\t\tassert(this.tRange !== 0);\n\t\t\tconst t = (this.time - this.tBase) / this.tRange;\n\t\t\tconst sqt = Math.pow(t, this.ease);\n\t\t\tconst f = sqt / (2.0 * (sqt - t) + 1.0);\n\t\t\tthis.value = this.vBase + (this.vRange) * f;\n\t\t}\n\t\treturn true;\n\t}\n\tprivate nextStep(): boolean {\n\t\twhile (this.loop && this.time > this.stops[this.stops.length - 2]) {\n\t\t\tthis.time -= this.stops[this.stops.length - 2];\n\t\t\tthis.currentStep = -2;\n\t\t}\n\t\twhile (this.currentStep < this.stops.length - 2 && (this.currentStep < 0 || this.time >= this.stops[this.currentStep + 2])) {\n\t\t\tthis.currentStep += 2;\n\t\t\tthis.tBase = this.stops[this.currentStep];\n\t\t\tthis.value = this.vBase = this.stops[this.currentStep + 1];\n\t\t\tif (this.currentStep < this.stops.length - 2) {\n\t\t\t\tthis.tRange = this.stops[this.currentStep + 2] - this.tBase;\n\t\t\t\tthis.vRange = this.stops[this.currentStep + 3] - this.vBase;\n\t\t\t} else {\n\t\t\t\tthis.tRange = 0;\n\t\t\t\tthis.vRange = 0;\n\t\t\t}\n\t\t}\n\t\treturn this.currentStep < this.stops.length - 2;\n\t}\n}\n\nexport interface MouseOffset {\n\tx: number;\n\ty: number;\n}\nexport interface UIElement {\n\tmouseDown?: { (pos: MouseOffset, capture: boolean): boolean };\t\t\t\t// returns true if captured\n\tmouseMove?: { (pos: MouseOffset, capture: boolean): string | undefined };\t// returns cursor or undefined if not captured\n\tmouseUp?: { (pos: MouseOffset, capture: boolean): boolean };\t\t\t\t// returns true if captured\n\trender?: { (target: CanvasRenderingContext2D, delta: number): void };\n}\nexport function MouseEventToOffset(e: MouseEvent, target: Element): MouseOffset {\n\te = e || window.event;\n\tconst rect: ClientRect = target.getBoundingClientRect();\n\treturn { x: (e.clientX - rect.left), y: (e.clientY - rect.top) };\n}\nexport function TouchEventToOffset(e: TouchEvent, target: Element): MouseOffset {\n\te = e || window.event;\n\tconst first = e.changedTouches[0];\n\tconst rect: ClientRect = target.getBoundingClientRect();\n\treturn { x: (first.clientX - rect.left), y: (first.clientY - rect.top) };\n}\nexport class UIElementCollection {\n\telements: Array<UIElement> = [];\n\tpublic addElement(element: UIElement) {\n\t\tassert(this.elements.indexOf(element) < 0);\n\t\tthis.elements.push(element);\n\t}\n\tpublic removeElement(element: UIElement) {\n\t\tconst index = this.elements.indexOf(element);\n\t\tassert(index >= 0);\n\t\tthis.elements.splice(index, 1);\n\t}\n\tpublic mouseMove(pos: MouseOffset): string | undefined {\n\t\tlet cursor = undefined;\n\t\tfor (let i = this.elements.length - 1; i >= 0; --i) {\n\t\t\tconst element = this.elements[i];\n\t\t\tassert(element);\n\t\t\tif (element.mouseMove) {\n\t\t\t\tassert(element.mouseMove instanceof Function);\n\t\t\t\tconst c = element.mouseMove(pos, cursor === undefined);\n\t\t\t\tcursor = cursor || c;\t// only set if not set\n\t\t\t}\n\t\t}\n\t\treturn cursor;\n\t}\n\tpublic mouseDown(pos: MouseOffset) {\n\t\tlet handled = false;\n\t\tfor (let i = this.elements.length - 1; i >= 0; --i) {\n\t\t\tconst element = this.elements[i];\n\t\t\tassert(element);\n\t\t\tif (element.mouseDown) {\n\t\t\t\tassert(element.mouseDown instanceof Function);\n\t\t\t\tif (element.mouseDown(pos, !handled)) {\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn handled;\n\t}\n\tpublic mouseUp(pos: MouseOffset) {\n\t\tlet handled = false;\n\t\tfor (let i = this.elements.length - 1; i >= 0; --i) {\n\t\t\tconst element = this.elements[i];\n\t\t\tassert(element);\n\t\t\tif (element.mouseUp) {\n\t\t\t\tassert(element.mouseUp instanceof Function);\n\t\t\t\tif (element.mouseUp(pos, !handled)) {\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn handled;\n\t}\n\n\tpublic render(target: CanvasRenderingContext2D, delta: number) {\n\t\tfor (let i = 0; i < this.elements.length; ++i) {\n\t\t\tconst element = this.elements[i];\n\t\t\tassert(element);\n\t\t\tif (element.render) {\n\t\t\t\tassert(element.render instanceof Function);\n\t\t\t\telement.render(target, delta);\n\t\t\t}\n\t\t}\n\t}\n}\nexport class ButtonCore {\n\tprivate insideMem: boolean = false;\n\tprotected inside(x: number, y: number): boolean {\n\t\treturn (x >= this.x && x <= this.x + this.width && y >= this.y && y <= this.y + this.height);\n\t}\n\tpublic checkInside(x: number, y: number, capture: boolean): boolean {\n\t\tthis.insideMem = capture && !this.hidden && this.inside(x, y);\n\t\treturn this.insideMem;\n\t}\n\tpublic isHover(): boolean { return this.enabled && this.insideMem; }\n\tprotected down: boolean = false;\n\tpublic isDown(): boolean { return this.down; }\n\tprotected enabled: boolean = false;\n\tpublic isEnabled(): boolean { return this.enabled; }\n\tpublic enable() { this.enabled = true; }\n\tpublic disable() { this.enabled = false; }\n\tprotected hidden: boolean = false;\n\tpublic isHidden(): boolean { return this.hidden; }\n\tpublic hide() { this.hidden = true; }\n\tpublic show() { this.hidden = false; }\n\tprotected checked: boolean = false;\n\tpublic isChecked(): boolean { return this.checked; }\n\tpublic check() { this.checked = true; }\n\tpublic uncheck() { this.checked = false; }\n\n\tpublic x: number;\n\tpublic y: number;\n\tpublic width: number;\n\tpublic height: number;\n\n\tpublic click?: { (): boolean };\n\tpublic constructor(\n\t\tx: number,\n\t\ty: number,\n\t\twidth: number,\n\t\theight: number,\n\t) {\n\t\tthis.x = Math.round(x);\n\t\tthis.y = Math.round(y);\n\t\tthis.width = Math.round(width);\n\t\tthis.height = Math.round(height);\n\t}\n\n\tpublic mouseDown(pos: MouseOffset, capture: boolean): boolean {\n\t\tif (capture) {\n\t\t\tconst inside = this.checkInside(pos.x, pos.y, capture);\n\t\t\tthis.down = this.enabled && inside;\n\t\t\treturn inside;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic mouseMove(pos: MouseOffset, capture: boolean): string | undefined {\n\t\treturn this.checkInside(pos.x, pos.y, capture) ? this.enabled ? \"pointer\" : \"default\" : undefined;\n\t}\n\tpublic mouseUp(pos: MouseOffset, capture: boolean): boolean {\n\t\tlet handled = false;\n\t\tif (capture && this.enabled && this.down && this.checkInside(pos.x, pos.y, capture)) {\n\t\t\tif (this.click !== undefined && this.click()) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\tthis.down = false;\n\t\treturn handled;\n\t}\n}\n\nexport interface VectorStyle {\n\tfill?: string;\n\tstroke?: string;\n\twidth?: number;\n}\nexport interface VectorStyleCollection {\n\tnormal?: VectorStyle;\n\tnormalHover?: VectorStyle;\n\tnormalDown?: VectorStyle;\n\tnormalDisabled?: VectorStyle;\n\tchecked?: VectorStyle;\n\tcheckedHover?: VectorStyle;\n\tcheckedDown?: VectorStyle;\n\tcheckedDisabled?: VectorStyle;\n}\n\ntype Primitive = undefined | null | boolean | string | number;\n\nexport function needRefresh(now: Array<Primitive>, then: Array<Primitive>): boolean {\n\t// this is not a deep compare, it will only compare direct values and references\n\tassert(now instanceof Array);\n\tassert(then instanceof Array);\n\tlet refresh = false;\n\tfor (let i = 0; i < now.length; ++i) {\n\t\tif (now[i] !== then[i]) {\n\t\t\tthen[i] = now[i];\n\t\t\trefresh = true;\n\t\t}\n\t}\n\treturn refresh;\n}\nexport const MEASURE_STRING = \"1i WwMmAaOoX !\";\n\nexport interface ButtonDeclaration {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tradius?: number;\n\tstyle?: VectorStyleCollection;\n\ticon?: IconDeclaration;\n\tlabel?: ButtonLabelDeclaration;\n}\n\nexport interface IconDeclaration {\n\tpath: Path2D;\n\tx?: number;\n\ty?: number;\n\talign?: \"left\" | \"right\" | \"center\";\n\twidth?: number;\n\theight?: number;\n\tscale?: number;\n\tstyle?: VectorStyleCollection;\n}\n\nexport interface ButtonLabelDeclaration {\n\ttext?: string;\n\tx?: number;\n\ty?: number;\n\t// TODO: add offset\n\t// TODO: add alignment\n\tfontFamily: string;\n\tfontSize: number;\n\tfontStyle?: string;\n\ttextAlign?: CanvasTextAlign;\n\tstyle?: VectorStyleCollection;\n}\n\nconst SHAPEMARGIN = 2.5;\nexport class Button extends ButtonCore {\n\tprivate ctx: CanvasRenderingContext2D;\n\tprivate cache: Array<Primitive> = [];\n\tprivate shapePath: Path2D;\n\n\tpublic constructor(\n\t\tpublic data: ButtonDeclaration\n\t) {\n\t\tsuper(data.x, data.y, data.width, data.height);\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tcanvas.width = this.width;\n\t\tcanvas.height = this.height;\n\t\tthis.ctx = <CanvasRenderingContext2D>canvas.getContext('2d');\n\t\tthis.shapePath = this.createButtonShape();\n\t}\n\tprivate createButtonShape(): Path2D {\n\t\tconst thickest = this.data.style ? Math.max(\n\t\t\tthis.data.style.normal && this.data.style.normal.width || 0,\n\t\t\tthis.data.style.normalHover && this.data.style.normalHover.width || 0,\n\t\t\tthis.data.style.normalDown && this.data.style.normalDown.width || 0,\n\t\t\tthis.data.style.normalDisabled && this.data.style.normalDisabled.width || 0,\n\t\t\tthis.data.style.checked && this.data.style.checked.width || 0,\n\t\t\tthis.data.style.checkedHover && this.data.style.checkedHover.width || 0,\n\t\t\tthis.data.style.checkedDown && this.data.style.checkedDown.width || 0,\n\t\t\tthis.data.style.checkedDisabled && this.data.style.checkedDisabled.width || 0\n\t\t) : 0;\n\t\tconst shapeMargin = 1 + Math.ceil(thickest / 2);\n\n\t\tconst path = new Path2D();\n\t\tif (!this.data.radius || this.data.radius < 0) {\n\t\t\tpath.rect(shapeMargin - 0.5, shapeMargin - 0.5, this.width - shapeMargin * 2, this.height - shapeMargin * 2);\n\t\t} else if (this.data.radius >= this.width / 2 && this.data.radius >= this.height / 2) {\n\t\t\tpath.ellipse(Math.ceil(this.width / 2) - 0.5, Math.ceil(this.height / 2) - 0.5, Math.ceil(this.width / 2) - shapeMargin, Math.ceil(this.height / 2) - shapeMargin, 0, 0, 2 * Math.PI);\n\t\t} else {\n\t\t\tpath.moveTo(shapeMargin + this.data.radius - 0.5, shapeMargin - 0.5);\n\t\t\tpath.lineTo(-shapeMargin + this.width - this.data.radius - 0.5, shapeMargin - 0.5);\n\t\t\tpath.quadraticCurveTo(-shapeMargin + this.width - 0.5, shapeMargin - 0.5, -shapeMargin + this.width - 0.5, shapeMargin + this.data.radius - 0.5);\n\t\t\tpath.lineTo(-shapeMargin + this.width - 0.5, -shapeMargin + this.height - this.data.radius - 0.5);\n\t\t\tpath.quadraticCurveTo(-shapeMargin + this.width - 0.5, -shapeMargin + this.height - 0.5, -shapeMargin + this.width - this.data.radius - 0.5, -shapeMargin + this.height - 0.5);\n\t\t\tpath.lineTo(shapeMargin + this.data.radius - 0.5, -shapeMargin + this.height - 0.5);\n\t\t\tpath.quadraticCurveTo(shapeMargin - 0.5, -shapeMargin + this.height - 0.5, shapeMargin - 0.5, -shapeMargin + this.height - this.data.radius - 0.5);\n\t\t\tpath.lineTo(shapeMargin - 0.5, shapeMargin + this.data.radius - 0.5);\n\t\t\tpath.quadraticCurveTo(shapeMargin - 0.5, shapeMargin - 0.5, shapeMargin + this.data.radius - 0.5, shapeMargin - 0.5);\n\t\t}\n\t\tpath.closePath();\n\t\treturn path;\n\t}\n\tpublic render(target: CanvasRenderingContext2D, delta?: number) {\n\t\t// @ts-ignore\n\t\tconst _ = delta;\n\t\tif (this.hidden) return;\n\n\t\tlet shapestyle: VectorStyle | undefined;\n\t\tif (this.data.style) {\n\t\t\tif (!this.enabled) {\n\t\t\t\tshapestyle = this.checked && this.data.style.checkedDisabled || this.data.style.normalDisabled;\n\t\t\t}\n\t\t\tif (this.enabled && this.down && this.isHover()) {\n\t\t\t\tshapestyle = shapestyle || this.checked && this.data.style.checkedDown || this.data.style.normalDown;\n\t\t\t}\n\t\t\tif (this.enabled && this.isHover()) {\n\t\t\t\tshapestyle = shapestyle || this.checked && this.data.style.checkedHover || this.data.style.normalHover;\n\t\t\t}\n\t\t\tshapestyle = shapestyle || this.checked && this.data.style.checked || this.data.style.normal;\n\t\t}\n\t\tconst state: Array<any> = [shapestyle, this.data.x, this.data.y, this.data.width, this.data.height, this.data.radius];\n\n\t\tlet iconstyle: VectorStyle | undefined;\n\t\tif (this.data.icon) {\n\t\t\tif (this.data.icon.style) {\n\t\t\t\tif (!this.enabled) {\n\t\t\t\t\ticonstyle = this.checked && this.data.icon.style.checkedDisabled || this.data.icon.style.normalDisabled;\n\t\t\t\t}\n\t\t\t\tif (this.enabled && this.down && this.isHover()) {\n\t\t\t\t\ticonstyle = iconstyle || this.checked && this.data.icon.style.checkedDown || this.data.icon.style.normalDown;\n\t\t\t\t}\n\t\t\t\tif (this.enabled && this.isHover()) {\n\t\t\t\t\ticonstyle = iconstyle || this.checked && this.data.icon.style.checkedHover || this.data.icon.style.normalHover;\n\t\t\t\t}\n\t\t\t\ticonstyle = iconstyle || this.checked && this.data.icon.style.checked || this.data.icon.style.normal;\n\t\t\t}\n\t\t\ticonstyle = iconstyle || shapestyle;\n\t\t\tstate.push(iconstyle, this.data.icon.path, this.data.icon.x, this.data.icon.y, this.data.icon.width, this.data.icon.height, this.data.icon.scale);\n\t\t}\n\n\t\tlet textstyle: VectorStyle | undefined;\n\t\tif (this.data.label) {\n\t\t\tif (this.data.label.style) {\n\t\t\t\tif (!this.enabled) {\n\t\t\t\t\ttextstyle = this.checked && this.data.label.style.checkedDisabled || this.data.label.style.normalDisabled;\n\t\t\t\t}\n\t\t\t\tif (this.enabled && this.down && this.isHover()) {\n\t\t\t\t\ttextstyle = textstyle || this.checked && this.data.label.style.checkedDown || this.data.label.style.normalDown;\n\t\t\t\t}\n\t\t\t\tif (this.enabled && this.isHover()) {\n\t\t\t\t\ttextstyle = textstyle || this.checked && this.data.label.style.checkedHover || this.data.label.style.normalHover;\n\t\t\t\t}\n\t\t\t\ttextstyle = textstyle || this.checked && this.data.label.style.checked || this.data.label.style.normal;\n\t\t\t}\n\t\t\ttextstyle = textstyle || iconstyle || shapestyle;\n\t\t\tconst font = LabelToFontString(this.data.label.fontFamily, this.data.label.fontSize, this.data.label.fontStyle);\n\t\t\tthis.ctx.font = font;\n\t\t\tconst metrics = this.ctx.measureText(MEASURE_STRING);\t// measure it, because of late font loading\n\t\t\tstate.push(textstyle, font, metrics.width, this.data.label.text, this.data.label.x, this.data.label.y, this.data.label.textAlign);\n\t\t}\n\n\n\t\tif (needRefresh(state, this.cache)) {\n\t\t\tthis.x = Math.round(this.data.x);\n\t\t\tthis.y = Math.round(this.data.y);\n\t\t\tthis.width = Math.round(this.data.width);\n\t\t\tthis.height = Math.round(this.data.height);\n\t\t\tthis.ctx.canvas.width = this.width;\n\t\t\tthis.ctx.canvas.height = this.height;\n\t\t\tthis.shapePath = this.createButtonShape();\n\n\t\t\t// Button\n\t\t\tif (shapestyle && shapestyle.stroke) {\n\t\t\t\tthis.ctx.strokeStyle = shapestyle.stroke;\n\t\t\t\tthis.ctx.lineWidth = shapestyle.width || 1;\n\t\t\t\tthis.ctx.stroke(this.shapePath);\n\t\t\t}\n\t\t\tif (shapestyle && shapestyle.fill) {\n\t\t\t\tthis.ctx.fillStyle = shapestyle.fill;\n\t\t\t\tthis.ctx.fill(this.shapePath);\n\t\t\t}\n\n\t\t\t// Icon\n\t\t\tif (this.data.icon && iconstyle && (iconstyle.stroke || iconstyle.fill)) {\n\t\t\t\tconst iconScale = this.data.icon.scale || 1;\n\t\t\t\tconst offsetX =\n\t\t\t\t\tthis.data.icon.align === \"left\" ? 0 + (this.data.icon.x || 0) :\n\t\t\t\t\t\tthis.data.icon.align === \"right\" ? this.width - (this.data.icon.width || 0) * iconScale - (this.data.icon.x || 0) :\n\t\t\t\t\t\t\t(this.width - (this.data.icon.width || 0) * iconScale) / 2 + (this.data.icon.x || 0);\n\t\t\t\tconst offsetY = (this.data.icon.y || 0) * iconScale + (this.height - (this.data.icon.height || 0) * iconScale) / 2;\n\t\t\t\tthis.ctx.setTransform(iconScale, 0, 0, iconScale, Math.ceil(offsetX) - 0.5, Math.ceil(offsetY) - 0.5);\n\t\t\t\tif (iconstyle.stroke) {\n\t\t\t\t\tthis.ctx.strokeStyle = iconstyle.stroke;\n\t\t\t\t\tthis.ctx.lineWidth = (iconstyle.width || 1) / iconScale;\n\t\t\t\t\tthis.ctx.stroke(this.data.icon.path);\n\t\t\t\t}\n\t\t\t\tif (iconstyle.fill) {\n\t\t\t\t\tthis.ctx.fillStyle = iconstyle.fill;\n\t\t\t\t\tthis.ctx.fill(this.data.icon.path);\n\t\t\t\t}\n\t\t\t\tthis.ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\t}\n\n\t\t\t// Label\n\t\t\tif (this.data.label) {\n\t\t\t\tlet x = this.data.label.x || 0;\n\t\t\t\tif (this.data.label.textAlign === \"center\") {\n\t\t\t\t\tx += this.width / 2;\n\t\t\t\t} else if (this.data.label.textAlign === \"right\") {\n\t\t\t\t\tx += this.width; // TODO: - padding\n\t\t\t\t} else {\n\t\t\t\t\tx += 0; // TODO: + padding\n\t\t\t\t}\n\t\t\t\tconst y = (this.data.label.y || 0) + SHAPEMARGIN + (this.height - SHAPEMARGIN * 2 - this.data.label.fontSize) / 2;\n\t\t\t\tRenderText(this.ctx, x, y, this.data.label.text || \"\", this.data.label.fontFamily, this.data.label.fontSize,\n\t\t\t\t\ttextstyle && textstyle.fill || \"\", textstyle && textstyle.stroke, textstyle && textstyle.width,\n\t\t\t\t\tthis.data.label.textAlign, this.data.label.fontStyle);\n\t\t\t}\n\t\t}\n\t\ttarget.drawImage(this.ctx.canvas, Math.floor(this.x), Math.floor(this.y));\n\t}\n\tprotected inside(x: number, y: number): boolean {\n\t\tthis.ctx.lineWidth = this.data.style && this.data.style.normal && this.data.style.normal.width || 1;\n\t\tif (super.inside(x, y)) {\n\t\t\treturn this.ctx.isPointInPath(this.shapePath, x - this.x, y - this.y) ||\n\t\t\t\tthis.ctx.isPointInStroke(this.shapePath, x - this.x, y - this.y);\n\t\t}\n\t\treturn false;\n\t}\n}\n\nexport interface PopupButtonDeclaration extends ButtonDeclaration {\n\titems: Array<UIElement>;\n}\n\nconst POPUPDELAY = 500;\n// TODO: support dynamic positioning and hiding of items?\nexport class PopupButton extends Button {\n\tprivate popdelayTimer: number | undefined;\n\tprivate popped: boolean;\n\tprivate wasPopped: boolean;\n\tpublic constructor(\n\t\tpublic data: PopupButtonDeclaration\n\t) {\n\t\tsuper(data);\n\t\tthis.popped = false;\n\t\tthis.wasPopped = false;\n\t}\n\tpublic mouseDown(pos: MouseOffset, capture: boolean): boolean {\n\t\tlet handled = false;\n\t\tif (this.popped) {\n\t\t\tfor (let i = this.data.items.length - 1; i >= 0; --i) {\n\t\t\t\tconst element = this.data.items[i];\n\t\t\t\tassert(element);\n\t\t\t\tif (element.mouseDown) {\n\t\t\t\t\tassert(element.mouseDown instanceof Function);\n\t\t\t\t\tif (element.mouseDown(pos, !handled)) {\n\t\t\t\t\t\thandled = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.wasPopped = true;\n\t\t} else {\n\t\t\tthis.wasPopped = false;\n\t\t}\n\t\tif (!handled) {\n\t\t\tconst down = super.mouseDown(pos, capture);\n\t\t\tif (capture && down && !this.popdelayTimer) {\n\t\t\t\tthis.popdelayTimer = window.setTimeout(() => {\n\t\t\t\t\tthis.pop();\n\t\t\t\t}, POPUPDELAY);\n\t\t\t}\n\t\t}\n\t\treturn handled;\n\t}\n\tpublic mouseMove(pos: MouseOffset, capture: boolean): string | undefined {\n\t\tlet cursor = undefined;\n\t\tif (this.popdelayTimer) {\n\t\t\tthis.pop();\n\t\t}\n\t\tif (this.popped) {\n\t\t\tfor (let i = this.data.items.length - 1; i >= 0; --i) {\n\t\t\t\tconst element = this.data.items[i];\n\t\t\t\tassert(element);\n\t\t\t\tif (element.mouseMove) {\n\t\t\t\t\tassert(element.mouseMove instanceof Function);\n\t\t\t\t\tconst c = element.mouseMove(pos, cursor === undefined);\n\t\t\t\t\tcursor = cursor || c;\t// only set if not set\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (super.checkInside(pos.x, pos.y, capture)) {\n\t\t\tcursor = cursor || this.enabled ? \"pointer\" : \"default\";\n\t\t}\n\t\treturn cursor;\n\t}\n\tpublic mouseUp(pos: MouseOffset, capture: boolean): boolean {\n\t\tlet handled = false;\n\n\t\t// Normal button up logic\n\t\tif (capture && this.enabled && this.down && this.checkInside(pos.x, pos.y, capture) &&\n\t\t\t(this.click === undefined || this.click())) {\n\t\t\tif (this.wasPopped) {\n\t\t\t\tthis.unpop();\n\t\t\t} else {\n\t\t\t\tthis.pop();\n\t\t\t}\n\t\t\tthis.down = false;\n\t\t\treturn true;\n\t\t}\n\n\t\tif (capture && this.popped) {\n\t\t\tfor (let i = this.data.items.length - 1; i >= 0; --i) {\n\t\t\t\tconst element = this.data.items[i];\n\t\t\t\tassert(element);\n\t\t\t\tif (element.mouseDown) {\t// Simulate a down click first\n\t\t\t\t\tassert(element.mouseDown instanceof Function);\n\t\t\t\t\telement.mouseDown(pos, capture);\n\t\t\t\t}\n\t\t\t\tif (element.mouseUp) {\n\t\t\t\t\tassert(element.mouseUp instanceof Function);\n\t\t\t\t\tif (element.mouseUp(pos, capture)) {\n\t\t\t\t\t\thandled = true;\n\t\t\t\t\t\tcapture = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.unpop();\n\t\tthis.down = false;\n\t\treturn handled;\n\t}\n\tpublic render(target: CanvasRenderingContext2D, delta: number) {\n\t\tsuper.render(target, delta);\n\t\tif (this.popped) {\n\t\t\tfor (let i = 0; i < this.data.items.length; ++i) {\n\t\t\t\tconst element = this.data.items[i];\n\t\t\t\tassert(element);\n\t\t\t\tif (element.render) {\n\t\t\t\t\tassert(element.render instanceof Function);\n\t\t\t\t\telement.render(target, delta);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tpublic pop() {\n\t\tif (this.popdelayTimer) {\n\t\t\twindow.clearTimeout(this.popdelayTimer);\n\t\t\tthis.popdelayTimer = undefined;\n\t\t}\n\t\tthis.popped = true;\n\t}\n\tpublic unpop() {\n\t\tif (this.popdelayTimer) {\n\t\t\twindow.clearTimeout(this.popdelayTimer);\n\t\t\tthis.popdelayTimer = undefined;\n\t\t}\n\t\tthis.popped = false;\n\t}\n}\n\nexport function LabelToFontString(fontFamily: string, fontSize: number, fontStyle?: string): string {\n\treturn (fontStyle ? fontStyle + \" \" : \"\") + fontSize.toFixed(2) + \"px \" + fontFamily;\n}\nexport function RenderText(target: CanvasRenderingContext2D, x: number, y: number, text: string, fontFamily: string, fontSize: number, fillStyle?: string, strokeStyle?: string, strokeWidth?: number, textAlign?: CanvasTextAlign, fontStyle?: string) {\n\tif (text !== \"\") {\n\t\ttarget.font = LabelToFontString(fontFamily, fontSize, fontStyle);\n\t\ttarget.textAlign = textAlign || \"left\";\n\t\ttarget.textBaseline = \"top\";\n\t\tif (strokeStyle && strokeWidth !== 0) {\n\t\t\ttarget.strokeStyle = strokeStyle;\n\t\t\ttarget.lineWidth = strokeWidth || 1;\n\t\t\ttarget.strokeText(text, x, y);\n\t\t}\n\t\tif (fillStyle) {\n\t\t\ttarget.fillStyle = fillStyle;\n\t\t\ttarget.fillText(text, x, y);\n\t\t}\n\t}\n}\n\nfunction GetBoundingBox(ctx: CanvasRenderingContext2D) {\n\tconst img = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);\n\tlet minX = img.width;\n\tlet maxX = 0;\n\tlet minY = img.height;\n\tlet maxY = 0;\n\tfor (let i = 3; i < img.width * img.height * 4; i += 4) {\n\t\tif (img.data[i] > 0) {\n\t\t\tconst y = ((i >> 2) / img.width >> 0);\n\t\t\tconst x = (i >> 2) % img.width;\n\t\t\tif (x < minX) minX = x;\n\t\t\tif (x > maxX) maxX = x;\n\t\t\tif (y < minY) minY = y;\n\t\t\tif (y > maxY) maxY = y;\n\t\t}\n\t}\n\treturn [minX, minY, Math.max(0, maxX - minX + 1), Math.max(0, maxY - minY + 1)];\n}\n\nexport interface LabelDeclaration {\n\tx: number;\n\ty: number;\n\t// TODO: add offset\n\t// TODO: add alignment\n\ttext?: string;\n\tfontFamily: string;\n\tfontSize: number;\n\tfontStyle?: string;\n\ttextStyle: VectorStyle;\n\ttextAlign?: CanvasTextAlign;\n}\nexport class Label {\n\tprivate ctx: CanvasRenderingContext2D;\n\tprivate cache: Array<Primitive> = [];\n\tprivate offsetX: number = 0;\n\tprivate offsetY: number = 0;\n\n\tpublic constructor(\n\t\tpublic data: LabelDeclaration\n\t) {\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tthis.ctx = <CanvasRenderingContext2D>canvas.getContext('2d');\n\t}\n\tpublic render(target: CanvasRenderingContext2D/*, delta: number*/) {\n\t\tconst font = LabelToFontString(this.data.fontFamily, this.data.fontSize, this.data.fontStyle);\n\t\tthis.ctx.font = font;\n\t\tconst metrics = this.ctx.measureText(MEASURE_STRING);\t// measure it, because of late font loading\n\n\t\tif (needRefresh([\n\t\t\tfont, target.canvas.width, target.canvas.height, metrics.width, this.data.text,\n\t\t\tthis.data.textStyle.fill, this.data.textStyle.stroke, this.data.textStyle.width\n\t\t], this.cache)) {\n\t\t\tconst tempCanvas = document.createElement(\"canvas\");\n\t\t\ttempCanvas.width = target.canvas.width;\n\t\t\ttempCanvas.height = target.canvas.height;\n\t\t\tconst tempCtx = <CanvasRenderingContext2D>tempCanvas.getContext('2d');\n\t\t\tRenderText(tempCtx, this.data.x, this.data.y, this.data.text || \"\", this.data.fontFamily, this.data.fontSize, this.data.textStyle.fill || \"\", this.data.textStyle.stroke, this.data.textStyle.width, this.data.textAlign, this.data.fontStyle);\n\t\t\tconst [X, Y, W, H] = GetBoundingBox(tempCtx);\n\t\t\tthis.ctx.canvas.width = W;\n\t\t\tthis.ctx.canvas.height = H;\n\t\t\tif (this.ctx.canvas.width > 0) {\n\t\t\t\tassert(this.ctx.canvas.height > 0);\n\t\t\t\tthis.ctx.drawImage(tempCanvas, X, Y, W, H, 0, 0, W, H);\n\t\t\t\tthis.offsetX = X - this.data.x;\n\t\t\t\tthis.offsetY = Y - this.data.y;\n\t\t\t}\n\t\t}\n\t\tif (this.ctx.canvas.width > 0) {\n\t\t\tassert(this.ctx.canvas.height > 0);\n\t\t\ttarget.drawImage(this.ctx.canvas, this.data.x + this.offsetX, this.data.y + this.offsetY);\n\t\t}\n\t}\n}\n\nexport interface LinkDeclaration {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tstyle: VectorStyleCollection;\n\ttext: string;\n\tfontFamily: string;\n\tfontSize: number;\n\tfontStyle?: string;\n\ttextAlign?: CanvasTextAlign;\n}\n\nexport class Link extends ButtonCore {\n\tprivate ctx: CanvasRenderingContext2D;\n\tprivate cache: Array<Primitive> = [];\n\tprivate offsetX: number = 0;\n\tprivate offsetY: number = 0;\n\tpublic constructor(\n\t\tpublic data: LinkDeclaration\n\t) {\n\t\tsuper(data.x, data.y, data.width, data.height);\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tthis.ctx = <CanvasRenderingContext2D>canvas.getContext('2d');\n\t}\n\tpublic render(target: CanvasRenderingContext2D, delta?: number) {\n\t\t// @ts-ignore\n\t\tconst _ = delta;\n\n\t\tlet textstyle: VectorStyle | undefined;\n\t\tif (!this.enabled) {\n\t\t\ttextstyle = this.checked && this.data.style.checkedDisabled || this.data.style.normalDisabled;\n\t\t}\n\t\tif (this.enabled && this.down && this.isHover()) {\n\t\t\ttextstyle = textstyle || this.checked && this.data.style.checkedDown || this.data.style.normalDown;\n\t\t}\n\t\tif (this.enabled && this.isHover()) {\n\t\t\ttextstyle = textstyle || this.checked && this.data.style.checkedHover || this.data.style.normalHover;\n\t\t}\n\t\ttextstyle = textstyle || this.checked && this.data.style.checked || this.data.style.normal;\n\n\t\tif (this.data.text === \"\" || textstyle === undefined) {\n\t\t\t// Nothing to show\n\t\t\treturn;\n\t\t}\n\n\t\tconst font = LabelToFontString(this.data.fontFamily, this.data.fontSize, this.data.fontStyle);\n\t\tthis.ctx.font = font;\n\t\tconst metrics = this.ctx.measureText(MEASURE_STRING);\t// measure it, because of late font loading\n\n\t\tif (needRefresh([\n\t\t\tthis.data.x, this.data.y, this.data.width, this.data.height, this.data.text,\n\t\t\tfont, metrics.width, this.data.textAlign, textstyle.fill, textstyle.stroke, textstyle.width\n\t\t], this.cache)) {\n\t\t\tthis.x = Math.round(this.data.x);\n\t\t\tthis.y = Math.round(this.data.y);\n\t\t\tthis.width = Math.round(this.data.width);\n\t\t\tthis.height = Math.round(this.data.height);\n\n\t\t\tconst tempCanvas = document.createElement(\"canvas\");\n\t\t\ttempCanvas.width = target.canvas.width;\n\t\t\ttempCanvas.height = target.canvas.height;\n\t\t\tconst tempCtx = <CanvasRenderingContext2D>tempCanvas.getContext('2d');\n\t\t\tconst renderX =\n\t\t\t\tthis.data.textAlign === \"center\" ? this.data.width / 2 :\n\t\t\t\t\tthis.data.textAlign === \"right\" ? this.data.width :\n\t\t\t\t\t\tthis.data.x;\n\t\t\tRenderText(tempCtx, renderX, 0, this.data.text, this.data.fontFamily, this.data.fontSize, textstyle.fill, textstyle.stroke, textstyle.width, this.data.textAlign, this.data.fontStyle);\n\t\t\tconst [X, Y, W, H] = GetBoundingBox(tempCtx);\n\t\t\tthis.ctx.canvas.width = W;\n\t\t\tthis.ctx.canvas.height = H;\n\t\t\tif (this.ctx.canvas.width > 0) {\n\t\t\t\tassert(this.ctx.canvas.height > 0);\n\t\t\t\tthis.ctx.drawImage(tempCanvas, X, Y, W, H, 0, 0, W, H);\n\t\t\t\tthis.offsetX = X;\n\t\t\t\tthis.offsetY = Y;\n\t\t\t}\n\t\t}\n\t\tif (this.ctx.canvas.width > 0) {\n\t\t\tassert(this.ctx.canvas.height > 0);\n\t\t\ttarget.drawImage(this.ctx.canvas, this.data.x + this.offsetX, this.data.y + this.offsetY);\n\t\t}\n\t}\n\tprotected inside(x: number, y: number): boolean {\n\t\tif (super.inside(x, y)) {\n\t\t\tconst cx = this.x + this.offsetX;\n\t\t\tconst cy = this.y + this.offsetY;\n\t\t\treturn (x >= cx && x <= cx + this.ctx.canvas.width && y >= cy && y <= cy + this.ctx.canvas.height);\n\t\t}\n\t\treturn false;\n\t}\n\n}","import * as assert from \"assert\";\r\n\r\nimport { hexColorFromHSV/*, trace*/ } from \"./utils\";\r\nimport * as Geometry from \"./geometry\";\r\n\r\nconst ATTACK_START: number = 0.00001; //0.1; //0.001;\r\nconst DECAY_REACH: number = 0.1;\r\nconst DISC_ROTATION: number = 0.0002;\r\n\r\nconst RENDER_CHANNEL_RSCALE = 16.0;\r\nconst RENDER_CHANNEL_ZSPACE = 6.0;\r\nconst RENDER_NOTE_SCALE = 0.42;\r\n\r\nconst boxVect: Array<Geometry.Vector2D> = [\r\n\tnew Geometry.Vector2D([-10, -10]),\r\n\tnew Geometry.Vector2D([+10, -10]),\r\n\tnew Geometry.Vector2D([+10, +10]),\r\n\tnew Geometry.Vector2D([-10, +10]),\r\n];\r\n\r\nexport interface IPtnData {\r\n\tversion: number;\r\n\ttempo: number;\r\n\trate: number;\r\n\tswing: number;\r\n\tsteps: number;\r\n\tpattern: number[][];\t\t// &1 = trig, &2 = accent, &4 = fill per step and channel\r\n\tpitches: number[];\r\n\tattacks: number[];\r\n\tdecays: number[];\r\n\taccented: (number | string)[];\r\n\tunaccented: (number | string)[];\r\n\tascendants: string[];\r\n\tdescendants: string[];\r\n}\r\n\r\nexport class PatternData {\r\n\t// ptn loaded\r\n\ttempo: number;\r\n\trate: number;\r\n\tswing: number;\r\n\tsteps: number;\r\n\tascendants: string[];\r\n\tdescendants: string[];\r\n\r\n\t// calculated on load\r\n\tac: number[];\t\t\t\t// attack constant per channel\r\n\tdc: number[];\t\t\t\t// decay constant per channel\r\n\tcolor: string[];\t\t\t// color per channel\r\n\ttrigcolor: string[];\t\t// trigger color per channel\r\n\tstep: number[][];\t\t\t// step size or 0 for no trigger\r\n\r\n\t// pattern state\r\n\ttrig: boolean[][];\t\t\t// did it trigger yet?\r\n\tenvelope: number[][];\t\t// current envelope value\r\n\tmtx: Geometry.Matrix3D[][];\t// render matrix for step\r\n\r\n\r\n\tpublic constructor(ptn: IPtnData) {\r\n\t\tthis.tempo = ptn.tempo;\r\n\t\tthis.rate = ptn.rate;\r\n\t\tthis.swing = ptn.swing;\r\n\t\tthis.steps = ptn.steps;\r\n\t\tthis.ascendants = ptn.ascendants;\r\n\t\tthis.descendants = ptn.descendants;\r\n\r\n\t\tthis.ac = [];\r\n\t\tthis.dc = [];\r\n\t\tthis.color = [];\r\n\t\tthis.trigcolor = [];\r\n\t\tthis.step = [];\r\n\t\tthis.trig = [];\r\n\t\tthis.envelope = [];\r\n\t\tthis.mtx = [];\r\n\r\n\t\tfor (let ch = 0; ch < ptn.pattern.length; ch++) {\r\n\t\t\tthis.step[ch] = [];\r\n\t\t\tthis.trig[ch] = [];\r\n\t\t\tthis.envelope[ch] = [];\r\n\t\t\tthis.mtx[ch] = [];\r\n\r\n\t\t\t// 0ms attack was too fast, set it to 200ms minimum\r\n\t\t\tconst attack: number = Math.max(ptn.attacks[ch], 200.0);\r\n\t\t\tthis.ac[ch] = 1.0 / (Math.exp((-1.0 / attack) * Math.log(1.0 / ATTACK_START)));\r\n\r\n\t\t\tthis.dc[ch] = ptn.decays[ch] > 0 ?\r\n\t\t\t\tMath.exp((-1.0 / ptn.decays[ch]) * Math.log(1.0 / DECAY_REACH)) : 0.0;\r\n\r\n\t\t\tconst hue: number = Math.max(1.0 - ptn.pitches[ch] * 1.0, 0.15);\r\n\t\t\tthis.color[ch] = hexColorFromHSV(hue, 0.8, 0.8);\r\n\t\t\tthis.trigcolor[ch] = hexColorFromHSV(hue, 0.5, 1.0);\r\n\r\n\t\t\tconst unaccentedSize: number = (ptn.unaccented[ch] === \"-Infinity\" ? 0 : Math.pow(10.0, Number(ptn.unaccented[ch]) / 40.0));\r\n\t\t\tconst accentedSize: number = (ptn.accented[ch] === \"-Infinity\" ? 0 : Math.pow(10.0, Number(ptn.accented[ch]) / 40.0));\r\n\r\n\t\t\tfor (let n = 0; n < ptn.pattern[ch].length; n++) {\r\n\t\t\t\tconst stepTrig: boolean = ((ptn.pattern[ch][n] & 1) !== 0);\r\n\t\t\t\tconst stepAccent: boolean = ((ptn.pattern[ch][n] & 2) !== 0);\r\n\t\t\t\tthis.step[ch][n] = (stepTrig ? stepAccent ? accentedSize : unaccentedSize : 0);\r\n\t\t\t\tif (this.step[ch][n] > 0) {\r\n\t\t\t\t\tthis.trig[ch][n] = false;\r\n\t\t\t\t\tthis.envelope[ch][n] = ATTACK_START;\r\n\t\t\t\t\tthis.mtx[ch][n] = new Geometry.Matrix3D();\r\n\t\t\t\t\tthis.mtx[ch][n].rotate(n / ptn.pattern[ch].length * 2 * Math.PI, [0, 0, 1]);\r\n\t\t\t\t\tthis.mtx[ch][n].translate([0, ((7 - ch) + 4) * RENDER_CHANNEL_RSCALE, -(7 - ch) * RENDER_CHANNEL_ZSPACE]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport class Player {\r\n\r\n\t// ********** PUBLIC VARIABLES **********{\r\n\tpublic patternData?: PatternData;\r\n\tpublic audio: HTMLAudioElement;\r\n\t// ***************************************}\r\n\r\n\t// ********** PRIVATE VARIABLES **********{\r\n\tprivate viewMatrix: Geometry.Matrix3D;\r\n\tprivate animateVisualizer: boolean = false;\r\n\t// private fade: number = 0;\r\n\tprivate lastStep: number = -1;\r\n\t// ***************************************}\r\n\r\n\t// ********** PUBLIC FUNCTIONS **********{\r\n\tpublic constructor(\r\n\t\tpublic width: number,\r\n\t\tpublic height: number,\r\n\t\tprivate ctx: CanvasRenderingContext2D,\r\n\t\tprivate viewScale: number\r\n\t) {\r\n\t\tthis.audio = new Audio();\r\n\t\tthis.audio.autoplay = false;\r\n\t\tthis.audio.controls = false;\r\n\t\tthis.audio.preload = \"auto\";\r\n\t\tthis.audio.volume = 1.0;\t// TODO: Set correct volume\r\n\r\n\t\tthis.viewMatrix = new Geometry.Matrix3D();\r\n\t\tthis.viewMatrix.scale([this.viewScale, this.viewScale, this.viewScale]);\r\n\t\tthis.viewMatrix.rotate(-0.6, [1, 1 / 3, 0]);\r\n\t}\r\n\r\n\tpublic rewind() {\r\n\t\t// trace(\"player.rewind()\");\r\n\t\tassert(this.audio.src !== \"\");\r\n\t\tassert(this.patternData !== undefined);\r\n\t\tthis.audio.currentTime = 0;\r\n\t}\r\n\tpublic load(audiosrc: string, ptn: PatternData) {\r\n\t\t// trace('player.load(\"' + audiosrc + '\")');\r\n\t\tthis.stop(false);\r\n\t\tthis.patternData = ptn;\r\n\t\tthis.audio.src = audiosrc;\r\n\t\tthis.audio.load();\r\n\t}\r\n\tpublic play(): Promise<void> {\r\n\t\t// trace(\"player.play()\");\r\n\t\tconst playpromise = this.audio.play();\r\n\t\tassert(playpromise !== undefined);\r\n\t\treturn playpromise.then(_ => {\r\n\t\t\tthis.animateVisualizer = true;\r\n\t\t});\r\n\t}\r\n\t// @ts-ignore\r\n\tpublic stop(doFade: boolean): void {\r\n\t\t// trace(\"player.stop()\");\r\n\t\t// TODO: fix the fade!\r\n\t\t// console.log(this.fade);\r\n\t\t// if (doFade) { this.fade = -0.01; this.animateVisualizer = false; }\r\n\t\tthis.audio.pause();\r\n\t}\r\n\r\n\tpublic animate(delta: number): void {\r\n\t\t/*\r\n\t\tif (_fade < 0 && visualizer.alpha > 0) visualizer.alpha += _fade;\r\n\r\n\t\tif (animateVisualizer && trackChannel && trackChannel.position > 0) {\r\n\t\t\tif ((_fade < 0 || visualizer.alpha < 1) && _playing) {\r\n\t\t\t\t_fade = 0;\r\n\t\t\t\tboxlayer.graphics.clear();\r\n\t\t\t\tbitlayerData.fillRect(bitlayerData.rect, 0);\r\n\t\t\t\tvisualizer.alpha = 1;\r\n\t\t\t}\r\n\t\t\tanimateVisualizer = animate();\r\n\t\t} else lastFrame = 0;\r\n\t\t//visualizer.rotation += 0.05;\r\n\t\t*/\r\n\r\n\t\t//\t\tctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2 - (PATTERNNAME_SIZE * this.viewScale * this.viewScale));\r\n\r\n\t\t// this.ctx.filter = 'blur(1px)';\r\n\r\n\t\tthis.ctx.setTransform(1, 0, 0, 1, this.width / 2, this.height / 2);\r\n\t\tif (this.animateVisualizer && this.audio.currentTime > 0) {\r\n\t\t\tthis.render(delta);\r\n\t\t}\r\n\t\tthis.ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n\t}\r\n\r\n\t// ***************************************}\r\n\r\n\t// ********** PRIVATE FUNCTIONS **********{\r\n\r\n\tprivate render(elapsed: number) {\r\n\t\tassert(this.patternData instanceof PatternData);\r\n\t\tassert(this.audio instanceof HTMLAudioElement);\r\n\r\n\t\tthis.viewMatrix.rotate(DISC_ROTATION * elapsed, [0, 0, 1]);\r\n\r\n\t\tconst pd = this.patternData!;\r\n\r\n\t\t// +0.02 was taken from flash version, maybe it looked better?\r\n\t\tconst position = pd.tempo * pd.rate / 60.0 * (this.audio.currentTime + 0.05)\r\n\t\t\t* 4; // beat => step\r\n\t\tconst currentStep: number = ~~(position);\r\n\t\tassert(pd.step.length > 0);\r\n\t\tconst pStep: number = currentStep % pd.step[0].length;\r\n\t\tif (currentStep !== this.lastStep && currentStep < pd.steps) {\r\n\t\t\t// Went into a new step, check triggers\r\n\t\t\tfor (let ch = 0; ch < pd.step.length; ch++) {\r\n\t\t\t\tif (pd.step[ch][pStep] > 0) {\r\n\t\t\t\t\tpd.trig[ch][pStep] = true;\r\n\t\t\t\t\tpd.envelope[ch][pStep] = ATTACK_START;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.lastStep = currentStep;\r\n\r\n\t\tthis.ctx.lineWidth = Math.min(3, Math.max(0.5, this.viewScale));\r\n\r\n\t\tconst transbox: Array<Geometry.Vector2D> = [\r\n\t\t\tnew Geometry.Vector2D(),\r\n\t\t\tnew Geometry.Vector2D(),\r\n\t\t\tnew Geometry.Vector2D(),\r\n\t\t\tnew Geometry.Vector2D(),\r\n\t\t];\r\n\r\n\t\tfor (let ch = pd.step.length - 1; ch >= 0; ch--) {\r\n\t\t\tfor (let n = 0; n < pd.step[ch].length; n++) {\r\n\t\t\t\tif (pd.step[ch][n] > 0 && n <= currentStep) {\r\n\t\t\t\t\tif (pd.trig[ch][n]) {\r\n\t\t\t\t\t\t// attack\r\n\t\t\t\t\t\tpd.envelope[ch][n] *= Math.pow(pd.ac[ch], elapsed);\r\n\t\t\t\t\t\tif (pd.envelope[ch][n] >= 1.0) {\r\n\t\t\t\t\t\t\tpd.envelope[ch][n] = 1.0;\r\n\t\t\t\t\t\t\tpd.trig[ch][n] = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (pd.envelope[ch][n] > DECAY_REACH) {\r\n\t\t\t\t\t\t// decay\r\n\t\t\t\t\t\tpd.envelope[ch][n] *= Math.pow(pd.dc[ch], elapsed);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst s = (1.0 + pd.step[ch][n]) * (1.0 + pd.envelope[ch][n]);\r\n\t\t\t\t\tif (s > 0) {\r\n\t\t\t\t\t\tif (pd.trig[ch][n]) {\r\n\t\t\t\t\t\t\tthis.ctx.strokeStyle = pd.trigcolor[ch];\r\n\t\t\t\t\t\t\tthis.ctx.fillStyle = pd.color[ch] + \"ff\";\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.ctx.strokeStyle = pd.color[ch];\r\n\t\t\t\t\t\t\tthis.ctx.fillStyle = pd.color[ch] + \"60\";\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tassert(pd.mtx[ch][n] instanceof Geometry.Matrix3D);\r\n\t\t\t\t\t\tconst m: Geometry.Matrix3D = new Geometry.Matrix3D(this.viewMatrix);\r\n\t\t\t\t\t\tm.append(pd.mtx[ch][n]);\r\n\r\n\t\t\t\t\t\tconst scale = RENDER_NOTE_SCALE * s * (1 + (7 - ch) * 0.1);\r\n\t\t\t\t\t\tm.scale([scale, scale]);\t// original 0.4\r\n\r\n\t\t\t\t\t\tfor (let i = 0; i < 4; ++i) {\r\n\t\t\t\t\t\t\tGeometry.project2D(m, boxVect[i], 400 * this.viewScale, transbox[i]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.ctx.beginPath();\r\n\t\t\t\t\t\tthis.ctx.moveTo(transbox[3].data[0], transbox[3].data[1]);\r\n\t\t\t\t\t\tfor (let i = 0; i < 4; ++i) {\r\n\t\t\t\t\t\t\tthis.ctx.lineTo(transbox[i].data[0], transbox[i].data[1]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.ctx.closePath();\r\n\t\t\t\t\t\tthis.ctx.fill();\r\n\t\t\t\t\t\tthis.ctx.stroke();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// ***************************************}\r\n\r\n}\r\n","import * as assert from \"assert\";\r\n\r\nexport function trace(what: string): boolean {\r\n\tconst timestamp = (new Date()).toISOString().match(/.*T(.*)Z/);\r\n\tassert(timestamp !== null && timestamp.length === 2);\r\n\tconsole.debug(timestamp![1] + \" \" + what);\r\n\treturn true;\r\n}\r\n\r\nexport function getHTTP(url: string, withCredentials: boolean = false): Promise<string> {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tconst xhr = new XMLHttpRequest();\r\n\t\txhr.withCredentials = withCredentials;\r\n\t\txhr.open('GET', url);\r\n\t\txhr.onload = () => {\r\n\t\t\tif (xhr.status === 200) {\r\n\t\t\t\tresolve(xhr.responseText);\r\n\t\t\t} else {\r\n\t\t\t\treject(xhr.statusText);\r\n\t\t\t}\r\n\t\t};\r\n\t\txhr.onerror = () => {\r\n\t\t\treject(xhr.statusText || Error(\"Network Error\"));\r\n\t\t};\r\n\t\txhr.send();\r\n\t});\r\n}\r\nexport function getJSON(url: string, withCredentials: boolean = false): Promise<any> {\r\n\treturn getHTTP(url, withCredentials).then<any>((result) => {\r\n\t\treturn JSON.parse(result);\r\n\t});\r\n}\r\n\r\nexport function rnd32(x: number): number {\r\n\tx = x >>> 0;\r\n\tx = (x ^ (x << 11)) >>> 0;\r\n\tx = x * (x * 134775813 >>> 13);\r\n\treturn (x ^ (x >>> 17)) >>> 0;\r\n}\r\n\r\nexport function rnd32ToFloat(x: number): number {\r\n\treturn x / 4294967296;\r\n}\r\n\r\nexport function mod(v: number, n: number) {\r\n\treturn ((v % n) + n) % n;\r\n}\r\n\r\nexport function limit(v: number, min: number, max: number) {\r\n\treturn v < min ? min : v > max ? max : v;\r\n}\r\n\r\nexport function hexColorFromHSV(h: number, s: number, v: number): string {\r\n\tassert(h >= 0);\r\n\tassert(h <= 1.0);\r\n\tassert(s >= 0);\r\n\tassert(s <= 1.0);\r\n\tassert(v >= 0);\r\n\tassert(v <= 1.0);\r\n\r\n\tlet rgb: number = 0;\r\n\r\n\tif (v === 0) {\r\n\t\trgb = 0;\r\n\t} else if (s === 0) {\r\n\t\trgb = v * 255.99999999;\r\n\t\trgb |= (rgb << 16) | (rgb << 8);\r\n\t} else {\r\n\t\th = (h === 1.0 ? 0.0 : (h * 6.0));\r\n\t\tlet i: number = Math.floor(h);\r\n\t\tlet f: number = h - i;\r\n\t\tlet w: number = ~~(v * 255.99999999);\r\n\t\tlet p: number = ~~(v * (1 - s) * 255.99999999);\r\n\t\tlet q: number = ~~(v * (1 - s * f) * 255.99999999);\r\n\t\tlet t: number = ~~(v * (1 - s * (1 - f)) * 255.99999999);\r\n\r\n\t\tswitch (i) {\r\n\t\t\tcase 0: rgb = ((w << 16) | (t << 8)) | p; break;\r\n\t\t\tcase 1: rgb = ((q << 16) | (w << 8)) | p; break;\r\n\t\t\tcase 2: rgb = ((p << 16) | (w << 8)) | t; break;\r\n\t\t\tcase 3: rgb = ((p << 16) | (q << 8)) | w; break;\r\n\t\t\tcase 4: rgb = ((t << 16) | (p << 8)) | w; break;\r\n\t\t\tcase 5: rgb = ((w << 16) | (p << 8)) | q; break;\r\n\t\t}\r\n\t}\r\n\tlet hex: string = rgb.toString(16);\r\n\tassert(hex.length > 0);\r\n\tassert(hex.length <= 6);\r\n\r\n\tfor (let i = 6 - hex.length - 1; i >= 0; i--) {\r\n\t\thex = '0' + hex;\r\n\t}\r\n\treturn '#' + hex;\r\n}\r\n\r\nexport class HSVColor {\r\n\thue: number;\r\n\tsaturation: number;\r\n\tvalue: number;\r\n\tpublic constructor(hue: number, saturation: number, value: number) {\r\n\t\tassert(hue >= 0);\r\n\t\tassert(hue <= 1.0);\r\n\t\tassert(saturation >= 0);\r\n\t\tassert(saturation <= 1.0);\r\n\t\tassert(value >= 0);\r\n\t\tassert(value <= 1.0);\r\n\t\tthis.hue = hue;\r\n\t\tthis.saturation = saturation;\r\n\t\tthis.value = value;\r\n\t}\r\n\tpublic toString(): string {\r\n\t\tlet rgb: number = 0;\r\n\t\tif (this.value === 0) {\r\n\t\t\trgb = 0;\r\n\t\t} else if (this.saturation === 0) {\r\n\t\t\trgb = this.value * 255.99999999;\r\n\t\t\trgb |= (rgb << 16) | (rgb << 8);\r\n\t\t} else {\r\n\t\t\tlet h = (this.hue === 1.0 ? 0.0 : (this.hue * 6.0));\r\n\t\t\tlet i: number = Math.floor(h);\r\n\t\t\tlet f: number = h - i;\r\n\t\t\tlet w: number = ~~(this.value * 255.99999999);\r\n\t\t\tlet p: number = ~~(this.value * (1 - this.saturation) * 255.99999999);\r\n\t\t\tlet q: number = ~~(this.value * (1 - this.saturation * f) * 255.99999999);\r\n\t\t\tlet t: number = ~~(this.value * (1 - this.saturation * (1 - f)) * 255.99999999);\r\n\r\n\t\t\tswitch (i) {\r\n\t\t\t\tcase 0: rgb = ((w << 16) | (t << 8)) | p; break;\r\n\t\t\t\tcase 1: rgb = ((q << 16) | (w << 8)) | p; break;\r\n\t\t\t\tcase 2: rgb = ((p << 16) | (w << 8)) | t; break;\r\n\t\t\t\tcase 3: rgb = ((p << 16) | (q << 8)) | w; break;\r\n\t\t\t\tcase 4: rgb = ((t << 16) | (p << 8)) | w; break;\r\n\t\t\t\tcase 5: rgb = ((w << 16) | (p << 8)) | q; break;\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet hex: string = rgb.toString(16);\r\n\t\tassert(hex.length > 0);\r\n\t\tassert(hex.length <= 6);\r\n\r\n\t\tfor (let i = 6 - hex.length - 1; i >= 0; i--) {\r\n\t\t\thex = '0' + hex;\r\n\t\t}\r\n\t\treturn '#' + hex;\r\n\t}\r\n}\r\n\r\nexport class GradientStop {\r\n\tposition: number;\r\n\tcolor: HSVColor;\r\n\tpublic constructor(position: number, color: HSVColor) {\r\n\t\tthis.position = position;\r\n\t\tthis.color = color;\r\n\t}\r\n}\r\n\r\nexport class LinearGradient {\r\n\tstops: GradientStop[];\r\n\tpublic constructor(val?: GradientStop[]) {\r\n\t\tthis.stops = [];\r\n\t\tif (val) {\r\n\t\t\tfor (let i = 0; i < val.length; ++i) {\r\n\t\t\t\tthis.stops[i] = val[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tpublic color(n: number): HSVColor {\r\n\t\tassert(n >= 0);\r\n\t\tassert(n <= 1.0);\r\n\t\tif (this.stops.length < 1) {\r\n\t\t\treturn new HSVColor(0, 0, 0);\r\n\t\t} else if (this.stops.length < 2 || n <= this.stops[0].position) {\r\n\t\t\treturn this.stops[0].color;\r\n\t\t} else if (n >= this.stops[this.stops.length - 1].position) {\r\n\t\t\treturn this.stops[this.stops.length - 1].color;\r\n\t\t} else {\r\n\t\t\tlet i = 0;\r\n\t\t\twhile (n > this.stops[i].position)++i;\r\n\t\t\tlet a = this.stops[i - 1];\r\n\t\t\tlet b = this.stops[i];\r\n\t\t\tlet p = (n - a.position) / (b.position - a.position);\r\n\t\t\treturn new HSVColor(\r\n\t\t\t\ta.color.hue + (b.color.hue - a.color.hue) * p,\r\n\t\t\t\ta.color.saturation + (b.color.saturation - a.color.saturation) * p,\r\n\t\t\t\ta.color.value + (b.color.value - a.color.value) * p\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function gamma(n: number, g: number) {\r\n\treturn Math.pow(n, 1 / g);\r\n}\r\n\r\nexport function copyToClipboard(data: string): boolean {\r\n\tconst textarea = document.createElement('textarea');\r\n\ttextarea.value = data;\r\n\ttextarea.setAttribute(\"readonly\", \"\");\r\n\ttextarea.style.position = \"absolute\";\r\n\ttextarea.style.left = \"-9999px\";\r\n\tdocument.body.appendChild(textarea);\r\n\tconst selection = window.getSelection();\r\n\r\n\t// Save previous selection\r\n\tconst selected: boolean | Range = selection && selection.rangeCount > 0 && selection.getRangeAt(0);\r\n\r\n\ttextarea.select();\r\n\t// Specification says we need designMode on for execCommand to work, but we dont?\r\n\tconst executed = document.execCommand(\"copy\");\r\n\tdocument.body.removeChild(textarea);\r\n\r\n\tif (selected) {\r\n\t\tselection.removeAllRanges();\r\n\t\tselection.addRange(selected);\r\n\t}\r\n\treturn executed;\r\n}\r\n\r\nexport function SVGtoPath2D(svg: string): Path2D {\r\n\t// TODO: Do we need a polyfill?\r\n\treturn new Path2D(svg);\r\n}","// Inspired by https://github.com/richardlord/Coral\r\n\r\nexport class Vector2D {\r\n\tpublic data = new Float32Array(2);\r\n\tpublic constructor(val?: number[]) {\r\n\t\tif (val) {\r\n\t\t\tthis.data[0] = val[0];\r\n\t\t\tthis.data[1] = val[1];\r\n\t\t}\r\n\t}\r\n}\r\n\r\nconst N11 = 0;\r\nconst N12 = 1;\r\nconst N13 = 2;\r\nconst N14 = 3;\r\nconst N21 = 4;\r\nconst N22 = 5;\r\nconst N23 = 6;\r\nconst N24 = 7;\r\nconst N31 = 8;\r\nconst N32 = 9;\r\nconst N33 = 10;\r\nconst N34 = 11;\r\nconst N41 = 12;\r\nconst N42 = 13;\r\nconst N43 = 14;\r\nconst N44 = 15;\r\n\r\nexport class Matrix3D {\r\n\tpublic data = new Float32Array(16);\r\n\tpublic constructor(val?: Matrix3D) {\r\n\t\tif (val) {\r\n\t\t\tfor (let i = 0; i < 16; i++) {\r\n\t\t\t\tthis.data[i] = val.data[i];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.init([\r\n\t\t\t\t1, 0, 0, 0,\r\n\t\t\t\t0, 1, 0, 0,\r\n\t\t\t\t0, 0, 1, 0,\r\n\t\t\t\t0, 0, 0, 1,\r\n\t\t\t]);\r\n\t\t}\r\n\t}\r\n\tpublic init(val: number[]) {\r\n\t\tfor (let i = 0; i < 16; i++) {\r\n\t\t\tthis.data[i] = val[i];\r\n\t\t}\r\n\t}\r\n\tpublic append(m: Matrix3D) {\r\n\t\tconst o11 = this.data[N11];\r\n\t\tconst o12 = this.data[N12];\r\n\t\tconst o13 = this.data[N13];\r\n\t\tconst o14 = this.data[N14];\r\n\t\tconst o21 = this.data[N21];\r\n\t\tconst o22 = this.data[N22];\r\n\t\tconst o23 = this.data[N23];\r\n\t\tconst o24 = this.data[N24];\r\n\t\tconst o31 = this.data[N31];\r\n\t\tconst o32 = this.data[N32];\r\n\t\tconst o33 = this.data[N33];\r\n\t\tconst o34 = this.data[N34];\r\n\t\tconst o41 = this.data[N41];\r\n\t\tconst o42 = this.data[N42];\r\n\t\tconst o43 = this.data[N43];\r\n\t\tconst o44 = this.data[N44];\r\n\t\tthis.data[N11] = m.data[N11] * o11 + m.data[N12] * o21 + m.data[N13] * o31 + m.data[N14] * o41;\r\n\t\tthis.data[N12] = m.data[N11] * o12 + m.data[N12] * o22 + m.data[N13] * o32 + m.data[N14] * o42;\r\n\t\tthis.data[N13] = m.data[N11] * o13 + m.data[N12] * o23 + m.data[N13] * o33 + m.data[N14] * o43;\r\n\t\tthis.data[N14] = m.data[N11] * o14 + m.data[N12] * o24 + m.data[N13] * o34 + m.data[N14] * o44;\r\n\t\tthis.data[N21] = m.data[N21] * o11 + m.data[N22] * o21 + m.data[N23] * o31 + m.data[N24] * o41;\r\n\t\tthis.data[N22] = m.data[N21] * o12 + m.data[N22] * o22 + m.data[N23] * o32 + m.data[N24] * o42;\r\n\t\tthis.data[N23] = m.data[N21] * o13 + m.data[N22] * o23 + m.data[N23] * o33 + m.data[N24] * o43;\r\n\t\tthis.data[N24] = m.data[N21] * o14 + m.data[N22] * o24 + m.data[N23] * o34 + m.data[N24] * o44;\r\n\t\tthis.data[N31] = m.data[N31] * o11 + m.data[N32] * o21 + m.data[N33] * o31 + m.data[N34] * o41;\r\n\t\tthis.data[N32] = m.data[N31] * o12 + m.data[N32] * o22 + m.data[N33] * o32 + m.data[N34] * o42;\r\n\t\tthis.data[N33] = m.data[N31] * o13 + m.data[N32] * o23 + m.data[N33] * o33 + m.data[N34] * o43;\r\n\t\tthis.data[N34] = m.data[N31] * o14 + m.data[N32] * o24 + m.data[N33] * o34 + m.data[N34] * o44;\r\n\t\tthis.data[N41] = m.data[N41] * o11 + m.data[N42] * o21 + m.data[N43] * o31 + m.data[N44] * o41;\r\n\t\tthis.data[N42] = m.data[N41] * o12 + m.data[N42] * o22 + m.data[N43] * o32 + m.data[N44] * o42;\r\n\t\tthis.data[N43] = m.data[N41] * o13 + m.data[N42] * o23 + m.data[N43] * o33 + m.data[N44] * o43;\r\n\t\tthis.data[N44] = m.data[N41] * o14 + m.data[N42] * o24 + m.data[N43] * o34 + m.data[N44] * o44;\r\n\t}\r\n\tpublic translate(val: number[]) {\r\n\t\tconst\r\n\t\t\tx = val[0] || 0,\r\n\t\t\ty = val[1] || 0,\r\n\t\t\tz = val[2] || 0;\r\n\r\n\t\tthis.data[N41] += this.data[N11] * x + this.data[N21] * y + this.data[N31] * z;\r\n\t\tthis.data[N42] += this.data[N12] * x + this.data[N22] * y + this.data[N32] * z;\r\n\t\tthis.data[N43] += this.data[N13] * x + this.data[N23] * y + this.data[N33] * z;\r\n\t\tthis.data[N44] += this.data[N14] * x + this.data[N24] * y + this.data[N34] * z;\r\n\t}\r\n\tpublic scale(val: number[]) {\r\n\t\tconst\r\n\t\t\tx = val[0] || 0,\r\n\t\t\ty = val[1] || 0,\r\n\t\t\tz = val[2] || 0;\r\n\r\n\t\tthis.data[N11] *= x;\r\n\t\tthis.data[N12] *= x;\r\n\t\tthis.data[N13] *= x;\r\n\t\tthis.data[N14] *= x;\r\n\r\n\t\tthis.data[N21] *= y;\r\n\t\tthis.data[N22] *= y;\r\n\t\tthis.data[N23] *= y;\r\n\t\tthis.data[N24] *= y;\r\n\r\n\t\tthis.data[N31] *= z;\r\n\t\tthis.data[N32] *= z;\r\n\t\tthis.data[N33] *= z;\r\n\t\tthis.data[N34] *= z;\r\n\t}\r\n\tpublic rotate(angle: number, axis: number[]) {\r\n\t\tlet\r\n\t\t\tx = axis[0] || 0,\r\n\t\t\ty = axis[1] || 0,\r\n\t\t\tz = axis[2] || 0,\r\n\t\t\tlength = Math.sqrt(x * x + y * y + z * z);\r\n\r\n\t\tif (!length) return;\r\n\r\n\t\tif (length !== 1) {\r\n\t\t\tlength = 1 / length;\r\n\t\t\tx *= length;\r\n\t\t\ty *= length;\r\n\t\t\tz *= length;\r\n\t\t}\r\n\r\n\t\tconst s = Math.sin(angle);\r\n\t\tconst c = Math.cos(angle);\r\n\r\n\t\tconst t = 1.0 - c;\r\n\r\n\t\tconst\r\n\t\t\ta00 = this.data[N11], a01 = this.data[N12], a02 = this.data[N13], a03 = this.data[N14],\r\n\t\t\ta10 = this.data[N21], a11 = this.data[N22], a12 = this.data[N23], a13 = this.data[N24],\r\n\t\t\ta20 = this.data[N31], a21 = this.data[N32], a22 = this.data[N33], a23 = this.data[N34];\r\n\r\n\t\tconst\r\n\t\t\tb00 = x * x * t + c, b01 = y * x * t + z * s, b02 = z * x * t - y * s,\r\n\t\t\tb10 = x * y * t - z * s, b11 = y * y * t + c, b12 = z * y * t + x * s,\r\n\t\t\tb20 = x * z * t + y * s, b21 = y * z * t - x * s, b22 = z * z * t + c;\r\n\r\n\t\tthis.data[N11] = a00 * b00 + a10 * b01 + a20 * b02;\r\n\t\tthis.data[N12] = a01 * b00 + a11 * b01 + a21 * b02;\r\n\t\tthis.data[N13] = a02 * b00 + a12 * b01 + a22 * b02;\r\n\t\tthis.data[N14] = a03 * b00 + a13 * b01 + a23 * b02;\r\n\r\n\t\tthis.data[N21] = a00 * b10 + a10 * b11 + a20 * b12;\r\n\t\tthis.data[N22] = a01 * b10 + a11 * b11 + a21 * b12;\r\n\t\tthis.data[N23] = a02 * b10 + a12 * b11 + a22 * b12;\r\n\t\tthis.data[N24] = a03 * b10 + a13 * b11 + a23 * b12;\r\n\r\n\t\tthis.data[N31] = a00 * b20 + a10 * b21 + a20 * b22;\r\n\t\tthis.data[N32] = a01 * b20 + a11 * b21 + a21 * b22;\r\n\t\tthis.data[N33] = a02 * b20 + a12 * b21 + a22 * b22;\r\n\t\tthis.data[N34] = a03 * b20 + a13 * b21 + a23 * b22;\r\n\t}\r\n\tpublic multiply(matrix: Matrix3D) {\r\n\t\tconst\r\n\t\t\ta00 = this.data[N11], a01 = this.data[N12], a02 = this.data[N13],\r\n\t\t\ta10 = this.data[N14], a11 = this.data[N21], a12 = this.data[N22],\r\n\t\t\ta20 = this.data[N23], a21 = this.data[N24], a22 = this.data[N31];\r\n\r\n\t\tconst\r\n\t\t\tb00 = matrix.data[N11], b01 = matrix.data[N12], b02 = matrix.data[N13],\r\n\t\t\tb10 = matrix.data[N14], b11 = matrix.data[N21], b12 = matrix.data[N22],\r\n\t\t\tb20 = matrix.data[N23], b21 = matrix.data[N24], b22 = matrix.data[N31];\r\n\r\n\t\tthis.data[N11] = b00 * a00 + b01 * a10 + b02 * a20;\r\n\t\tthis.data[N12] = b00 * a01 + b01 * a11 + b02 * a21;\r\n\t\tthis.data[N13] = b00 * a02 + b01 * a12 + b02 * a22;\r\n\r\n\t\tthis.data[N14] = b10 * a00 + b11 * a10 + b12 * a20;\r\n\t\tthis.data[N21] = b10 * a01 + b11 * a11 + b12 * a21;\r\n\t\tthis.data[N22] = b10 * a02 + b11 * a12 + b12 * a22;\r\n\r\n\t\tthis.data[N23] = b20 * a00 + b21 * a10 + b22 * a20;\r\n\t\tthis.data[N24] = b20 * a01 + b21 * a11 + b22 * a21;\r\n\t\tthis.data[N31] = b20 * a02 + b21 * a12 + b22 * a22;\r\n\t}\r\n\tpublic premultiply(matrix: Matrix3D) {\r\n\t\tconst\r\n\t\t\ta00 = matrix.data[N11], a01 = matrix.data[N12], a02 = matrix.data[N13],\r\n\t\t\ta10 = matrix.data[N14], a11 = matrix.data[N21], a12 = matrix.data[N22],\r\n\t\t\ta20 = matrix.data[N23], a21 = matrix.data[N24], a22 = matrix.data[N31];\r\n\r\n\t\tconst\r\n\t\t\tb00 = this.data[N11], b01 = this.data[N12], b02 = this.data[N13],\r\n\t\t\tb10 = this.data[N14], b11 = this.data[N21], b12 = this.data[N22],\r\n\t\t\tb20 = this.data[N23], b21 = this.data[N24], b22 = this.data[N31];\r\n\r\n\t\tthis.data[N11] = b00 * a00 + b01 * a10 + b02 * a20;\r\n\t\tthis.data[N12] = b00 * a01 + b01 * a11 + b02 * a21;\r\n\t\tthis.data[N13] = b00 * a02 + b01 * a12 + b02 * a22;\r\n\r\n\t\tthis.data[N14] = b10 * a00 + b11 * a10 + b12 * a20;\r\n\t\tthis.data[N21] = b10 * a01 + b11 * a11 + b12 * a21;\r\n\t\tthis.data[N22] = b10 * a02 + b11 * a12 + b12 * a22;\r\n\r\n\t\tthis.data[N23] = b20 * a00 + b21 * a10 + b22 * a20;\r\n\t\tthis.data[N24] = b20 * a01 + b21 * a11 + b22 * a21;\r\n\t\tthis.data[N31] = b20 * a02 + b21 * a12 + b22 * a22;\r\n\t}\r\n}\r\n\r\n// Transform and project a 2D point in 3D space into a point in 2D space\r\nexport function project2D(m: Matrix3D, v: Vector2D, fLen: number, d: Vector2D) {\r\n\t// x' = x / (fLen + z)/fLen;\r\n\t// y' = y / (fLen + z)/fLen;\r\n\r\n\tconst vx = v.data[0];\r\n\tconst vy = v.data[1];\r\n\r\n\t// First put tranformed Z into W\r\n\tlet w = vx * m.data[N13] + vy * m.data[N23] /*+ v.z*m.data[N33]*/ + m.data[N43];\r\n\tw = fLen / (fLen + w);\r\n\r\n\td.data[0] = (vx * m.data[N11] + vy * m.data[N21] /*+ v.z*m.data[N31]*/ + m.data[N41]) * w;\r\n\td.data[1] = (vx * m.data[N12] + vy * m.data[N22] /*+ v.z*m.data[N32]*/ + m.data[N42]) * w;\r\n}","import * as assert from \"assert\";\r\n\r\nimport { LinearGradient, GradientStop, HSVColor, limit } from \"./utils\";\r\nimport { CloudRequestMessage, CloudResponseMessage, cloudWorker } from \"./cloudWorker\";\r\n\r\nconst PRE_GENERATE_FACTOR = 3;\t// pre generated screen widths (width*factor)\r\nconst SLICE_MAX_FACTOR = 10;\t// maximum number of slices to keep <pre amount needed>*factor\r\n\r\nclass ParallaxLayerSlice {\r\n\tpublic generating: boolean = false;\r\n\tpublic ready: boolean = false;\r\n\tconstructor(\r\n\t\tpublic readonly ctx: CanvasRenderingContext2D,\r\n\t\tpublic readonly origin: number,\r\n\t) {\r\n\t}\r\n}\r\n\r\nabstract class ParallaxLayer {\r\n\tprotected slices: Array<ParallaxLayerSlice>;\t// Keep sorted\r\n\tprotected offset: number;\r\n\tprotected preGenerateW: number;\r\n\tprotected maxSlices: number;\r\n\tconstructor(\r\n\t\tprotected width: number,\r\n\t\tprotected height: number,\r\n\t\tprotected viewScale: number,\r\n\t\tprotected speed: number,\r\n\t\tprotected composite: string = \"source-over\",\r\n\t) {\r\n\t\tthis.slices = [];\r\n\t\tthis.offset = 0;\r\n\t\tthis.preGenerateW = Math.ceil(width * PRE_GENERATE_FACTOR);\r\n\t\tthis.maxSlices = Math.ceil(2 * this.preGenerateW / 1024 * SLICE_MAX_FACTOR);\r\n\t}\r\n\tpublic getSlice(origin: number): ParallaxLayerSlice | undefined {\r\n\t\tassert(this.slices.length > 0);\r\n\t\tconst i = Math.floor((origin - this.slices[0].origin) / 1024);\r\n\t\tif (i >= 0 && i < this.slices.length) {\r\n\t\t\treturn this.slices[i];\r\n\t\t} else {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t}\r\n\tpublic scroll(offset: number) {\r\n\t\tconst newOffset = this.offset + offset * this.speed * this.viewScale;\r\n\r\n\t\twhile (this.slices.length === 0 || newOffset + this.preGenerateW > this.slices[this.slices.length - 1].origin) {\r\n\t\t\tlet ctx: CanvasRenderingContext2D;\r\n\t\t\tif (this.slices.length >= this.maxSlices) {\r\n\t\t\t\tctx = (this.slices.shift() as ParallaxLayerSlice).ctx;\r\n\t\t\t} else {\r\n\t\t\t\tconst canvas = document.createElement(\"canvas\");\r\n\t\t\t\tcanvas.width = 1024;\r\n\t\t\t\tcanvas.height = this.height;\r\n\t\t\t\tctx = <CanvasRenderingContext2D>canvas.getContext('2d', { alpha: false });\r\n\t\t\t\tctx.fillStyle = \"#000000\";\r\n\t\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t\t}\r\n\t\t\tconst x = (this.slices.length > 0 ? this.slices[this.slices.length - 1].origin + 1024 : 0);\r\n\t\t\tconst slice = new ParallaxLayerSlice(ctx, x);\r\n\t\t\tthis.slices.push(slice);\r\n\t\t\tthis.generate(slice);\r\n\t\t}\r\n\t\tassert(this.slices.length > 0);\r\n\t\twhile (newOffset + this.width - this.preGenerateW < this.slices[0].origin) {\r\n\t\t\tlet ctx: CanvasRenderingContext2D;\r\n\t\t\tif (this.slices.length >= this.maxSlices) {\r\n\t\t\t\tctx = (this.slices.pop() as ParallaxLayerSlice).ctx;\r\n\t\t\t} else {\r\n\t\t\t\tconst canvas = document.createElement(\"canvas\");\r\n\t\t\t\tcanvas.width = 1024;\r\n\t\t\t\tcanvas.height = this.height;\r\n\t\t\t\tctx = <CanvasRenderingContext2D>canvas.getContext(\"2d\", { alpha: false });\r\n\t\t\t\tctx.fillStyle = \"#000000\";\r\n\t\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\t\t\t}\r\n\t\t\tconst slice = new ParallaxLayerSlice(ctx, this.slices[0].origin - 1024);\r\n\t\t\tthis.generate(slice);\r\n\t\t\tthis.slices.unshift(slice);\r\n\t\t}\r\n\t\tconst i = Math.floor((newOffset + this.width - this.slices[0].origin) / 1024);\r\n\t\tassert(i >= 0);\r\n\t\tassert(i < this.slices.length);\r\n\t\tif (this.slices[i].ready) {\r\n\t\t\tthis.offset = newOffset;\r\n\t\t}\r\n\t}\r\n\tpublic abstract generate(slice: ParallaxLayerSlice): void;\r\n\tpublic render(viewport: CanvasRenderingContext2D) {\r\n\t\tassert(this.slices.length > 0);\r\n\t\tlet i = Math.floor((this.offset - this.slices[0].origin) / 1024);\r\n\t\tassert(i >= 0);\r\n\t\tassert(i < this.slices.length);\r\n\t\tlet vx = /*Math.floor*/(this.slices[i].origin - this.offset);\r\n\t\tviewport.globalCompositeOperation = this.composite;\r\n\t\twhile (vx < viewport.canvas.width) {\r\n\t\t\tviewport.drawImage(this.slices[i].ctx.canvas, vx, 0);\r\n\t\t\tvx += 1024;\r\n\t\t\t++i;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nconst STAR_SIZE = 75;\r\nclass StarLayer extends ParallaxLayer {\r\n\tprivate starColors: LinearGradient;\r\n\tconstructor(width: number, height: number, viewScale: number, speed: number) {\r\n\t\tsuper(width, height, viewScale, speed, \"screen\");\r\n\r\n\t\t// http://angrytools.com/gradient/?0_8FA0FF,38_F8FFF7,80_FFF047,100_FF2929,66_FFF3DB,12_E8F2FF,90_FFBE45,5_CCC7FF&0_100,100_100&l_180\r\n\t\tthis.starColors = new LinearGradient([\r\n\t\t\tnew GradientStop(0.00, new HSVColor(0.6414, 0.4392, 1.0)),\r\n\t\t\tnew GradientStop(0.02, new HSVColor(0.6815, 0.2196, 0.9)),\r\n\t\t\tnew GradientStop(0.04, new HSVColor(0.5942, 0.0902, 0.9)),\r\n\t\t\tnew GradientStop(0.80, new HSVColor(0.3125, 0.0314, 0.9)),\r\n\t\t\tnew GradientStop(0.97, new HSVColor(0.1111, 0.1412, 0.9)),\r\n\t\t\tnew GradientStop(0.98, new HSVColor(0.1531, 0.7216, 0.8)),\r\n\t\t\tnew GradientStop(0.99, new HSVColor(0.1084, 0.7294, 0.8)),\r\n\t\t\tnew GradientStop(1.00, new HSVColor(0.0000, 0.8392, 0.8))\r\n\t\t]);\r\n\t\tthis.scroll(0);\r\n\t}\r\n\tstarRender(ctx: CanvasRenderingContext2D, x: number, y: number, size: number, heat: number) {\r\n\t\tconst c = this.starColors.color(heat);\r\n\t\tconst hs = size / 2;\r\n\t\tconst gx = x + hs;\r\n\t\tconst gy = y + hs;\r\n\t\tif (size > 1) {\r\n\t\t\tconst g = ctx.createRadialGradient(gx, gy, 0, gx, gy, 0.5 * size);\r\n\t\t\tg.addColorStop(0.03, new HSVColor(c.hue, limit(c.saturation - 0.42, 0, 1), c.value * 1.0000).toString());\r\n\t\t\tg.addColorStop(0.13, new HSVColor(c.hue, limit(c.saturation - 0.10, 0, 1), c.value * 0.9333).toString());\r\n\t\t\tg.addColorStop(0.24, new HSVColor(c.hue, limit(c.saturation + 0.11, 0, 1), c.value * 0.5216).toString());\r\n\t\t\tg.addColorStop(0.29, new HSVColor(c.hue, limit(c.saturation + 0.15, 0, 1), c.value * 0.3961).toString());\r\n\t\t\tg.addColorStop(0.38, new HSVColor(c.hue, limit(c.saturation + 0.24, 0, 1), c.value * 0.2980).toString());\r\n\t\t\tg.addColorStop(0.50, new HSVColor(c.hue, limit(c.saturation + 0.33, 0, 1), c.value * 0.1569).toString());\r\n\t\t\tg.addColorStop(0.69, new HSVColor(c.hue, limit(c.saturation + 0.33, 0, 1), c.value * 0.0569).toString());\r\n\t\t\tg.addColorStop(1.0, \"#000000\");\r\n\t\t\tctx.globalCompositeOperation = \"screen\";\r\n\t\t\tctx.fillStyle = g;\r\n\t\t\tctx.fillRect(x, y, size, size);\r\n\t\t} else {\r\n\t\t\tctx.globalCompositeOperation = \"source-over\";\r\n\t\t\tctx.fillStyle = c.toString();\r\n\t\t\tctx.fillRect(x, y, 0.6 * size, 0.6 * size);\r\n\t\t}\r\n\t}\r\n\tgenerate(slice: ParallaxLayerSlice) {\r\n\t\tconst ctx = slice.ctx;\r\n\t\t{\r\n\t\t\tconst img = ctx.createImageData(ctx.canvas.width, ctx.canvas.height);\r\n\t\t\tconst pixels = ctx.canvas.width * ctx.canvas.height;\r\n\t\t\tconst amount = ctx.canvas.width * ctx.canvas.height / 10000;\r\n\t\t\tfor (let i = 0; i < amount; ++i) {\r\n\t\t\t\tconst d = Math.floor(Math.random() * pixels) * 4;\r\n\t\t\t\timg.data[d + 0] = img.data[d + 1] = img.data[d + 2] = Math.random() * 128; // 255;\r\n\t\t\t\t//img.data[d+3]=Math.random()*50;\r\n\t\t\t}\r\n\t\t\tctx.putImageData(img, 0, 0);\r\n\t\t}\r\n\r\n\t\tconst amount = ctx.canvas.width * ctx.canvas.height / 8000;\r\n\t\tfor (let i = 0; i < amount + Math.random() * amount * 20; ++i) {\r\n\t\t\tconst s = (Math.pow(Math.random(), 20) * 0.1 + Math.pow(Math.random(), 400) * 0.4 + Math.pow(Math.random(), 50000))\r\n\t\t\t\t* STAR_SIZE * this.viewScale;\r\n\t\t\tctx.globalAlpha = 0.6 + Math.random() * 0.2;\r\n\t\t\tthis.starRender(ctx, Math.random() * (ctx.canvas.width - s), Math.random() * ctx.canvas.height, s, Math.random());\r\n\t\t}\r\n\r\n\t\tslice.ready = true;\r\n\t}\r\n}\r\n\r\nclass CloudLayer extends ParallaxLayer {\r\n\tprivate worker: Worker;\r\n\r\n\tconstructor(width: number, height: number, viewScale: number, speed: number) {\r\n\t\tsuper(width, height, viewScale, speed);\r\n\r\n\t\tconst This = this;\r\n\t\tconst workerScript = '(' + cloudWorker.toString() + ')();';\r\n\t\tconst workerURL = URL.createObjectURL(new Blob([workerScript], { type: 'application/javascript' }));\r\n\t\tthis.worker = new Worker(workerURL);\r\n\t\tthis.worker.onmessage = function (e: MessageEvent) {\r\n\t\t\tconst msg = e.data as CloudResponseMessage;\r\n\t\t\tconst slice = This.getSlice(msg.offset);\r\n\t\t\tif (slice) {\r\n\t\t\t\tconst imageData = slice.ctx.createImageData(slice.ctx.canvas.width, slice.ctx.canvas.height);\r\n\t\t\t\timageData.data.set(msg.data);\r\n\t\t\t\tslice.ctx.putImageData(imageData, 0, 0);\r\n\t\t\t\tslice.ready = true;\r\n\r\n\t\t\t\tconst request: CloudRequestMessage = {\r\n\t\t\t\t\tviewoffset: This.offset,\r\n\t\t\t\t\tviewwidth: This.width,\r\n\t\t\t\t\toffset: slice.origin,\r\n\t\t\t\t\theight: slice.ctx.canvas.height,\r\n\t\t\t\t\tdata: imageData.data,\r\n\t\t\t\t};\r\n\t\t\t\tThis.worker.postMessage(request, [request.data.buffer]);\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.worker.onerror = function (e: ErrorEvent) {\r\n\t\t\tconsole.error(e);\r\n\t\t};\r\n\r\n\t\tthis.scroll(0);\r\n\t}\r\n\tgenerate(slice: ParallaxLayerSlice) {\r\n\t\tconst imageData = slice.ctx.createImageData(slice.ctx.canvas.width, slice.ctx.canvas.height);\r\n\t\tconst request: CloudRequestMessage = {\r\n\t\t\tviewoffset: this.offset,\r\n\t\t\tviewwidth: this.width,\r\n\t\t\toffset: slice.origin,\r\n\t\t\theight: slice.ctx.canvas.height,\r\n\t\t\tdata: imageData.data,\r\n\t\t};\r\n\t\tthis.worker.postMessage(request, [request.data.buffer]);\r\n\t\tassert(request.data.length === 0);\r\n\t}\r\n}\r\n\r\nexport class Background {\r\n\tlayers: Array<ParallaxLayer> = [];\r\n\tconstructor(\r\n\t\tprivate viewport: CanvasRenderingContext2D,\r\n\t\tviewScale: number\r\n\t) {\r\n\t\tthis.layers.push(new CloudLayer(viewport.canvas.width, viewport.canvas.height, viewScale, 2));\r\n\t\tthis.layers.push(new StarLayer(viewport.canvas.width, viewport.canvas.height, viewScale, 1.5));\r\n\t\tthis.layers.push(new StarLayer(viewport.canvas.width, viewport.canvas.height, viewScale, 2.1));\r\n\t\tthis.layers.push(new StarLayer(viewport.canvas.width, viewport.canvas.height, viewScale, 2.2));\r\n\t\tthis.layers.push(new StarLayer(viewport.canvas.width, viewport.canvas.height, viewScale, 2.3));\r\n\t\tthis.layers.push(new StarLayer(viewport.canvas.width, viewport.canvas.height, viewScale, 2.4));\r\n\t}\r\n\trefresh() {\r\n\t\tthis.viewport.canvas.width = this.viewport.canvas.width;\t// clear the canvas\r\n\t\tthis.viewport.globalCompositeOperation = \"source-over\";\r\n\r\n\t\tfor (let i = 0; i < this.layers.length; ++i) {\r\n\t\t\tthis.layers[i].render(this.viewport);\r\n\t\t}\r\n\t}\r\n\tscroll(distance: number) {\r\n\t\tif (distance !== 0) {\r\n\t\t\tfor (let i = 0; i < this.layers.length; ++i) {\r\n\t\t\t\tthis.layers[i].scroll(distance);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n","//\r\n//\tTHE CLOUDWORKER FUNCTION MUST BE 100% SELF-CONTAINED BECAUSE IT LOADS INTO A WEB WORKER\r\n//\r\n\r\nexport interface CloudRequestMessage {\r\n\tviewoffset: number;\t\t// view window (used for prio and cleanup)\r\n\tviewwidth: number;\t\t// view window (used for prio and cleanup)\r\n\toffset: number;\t\t\t// offset to render\r\n\theight: number;\t\t\t// height\r\n\tdata: Uint8ClampedArray;\t// image pixel data\r\n}\r\n\r\nexport interface CloudResponseMessage {\r\n\toffset: number;\t\t\t// slice offset to match\r\n\tdata: Uint8ClampedArray;\t// image pixel data\r\n}\r\n\r\nexport function cloudWorker() {\r\n\tconst worker: any = self;\r\n\tconst seed = Math.random() * 4294967296;\r\n\r\n\tfunction assert(expression: boolean) {\r\n\t\tif (!expression) {\r\n\t\t\tthrow new Error(\"Assertion failed\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction rnd32(x: number): number {\r\n\t\tx = x >>> 0;\r\n\t\tx = (x ^ (x << 11)) >>> 0;\r\n\t\tx = x * (x * 134775813 >>> 13);\r\n\t\treturn (x ^ (x >>> 17)) >>> 0;\r\n\t}\r\n\r\n\tclass Noise {\r\n\t\tstatic readonly REMEMBER_COUNT = 20000000;\r\n\t\tstatic readonly noiseCache: Array<Noise> = [];\r\n\t\tstatic readonly noiseMap: { [noiseID: string]: Noise; } = {};\r\n\t\tstatic noiseID(seed: number, frequency: number, offset: number, height: number): string {\r\n\t\t\treturn seed + \":\" + frequency + \":\" + offset + \":\" + height;\r\n\t\t}\r\n\t\tstatic Get(seed: number, frequency: number, offset: number, height: number): Noise {\r\n\t\t\tconst id = Noise.noiseID(seed, frequency, offset, height);\r\n\t\t\tlet n: Noise = Noise.noiseMap[id];\r\n\t\t\tif (!n) {\r\n\t\t\t\tn = new Noise(seed, frequency, offset, height);\r\n\t\t\t\tNoise.noiseMap[id] = n;\r\n\t\t\t} else {\r\n\t\t\t\tassert(Noise.noiseCache.indexOf(n) >= 0);\r\n\t\t\t\tNoise.noiseCache.splice(Noise.noiseCache.indexOf(n), 1);\r\n\t\t\t}\r\n\t\t\tNoise.noiseCache.push(n);\r\n\r\n\t\t\t// Cleanup\r\n\t\t\twhile (Noise.noiseCache.length > Noise.REMEMBER_COUNT) {\r\n\t\t\t\tconst r = Noise.noiseCache.shift() as Noise;\r\n\t\t\t\tassert(r instanceof Noise);\r\n\t\t\t\tdelete Noise.noiseMap[r.id];\r\n\t\t\t}\r\n\t\t\treturn n;\r\n\t\t}\r\n\r\n\t\tpublic id: string;\r\n\t\tpublic octave: number;\r\n\t\tpublic data: Float32Array;\r\n\t\tconstructor(public seed: number, public frequency: number, public offset: number, public height: number) {\r\n\t\t\tthis.id = Noise.noiseID(seed, frequency, offset, height);\r\n\t\t\tthis.octave = 0;\r\n\t\t\tthis.data = new Float32Array(1024 * height);\r\n\t\t\tfor (let i = 0; i < this.data.length; ++i) {\r\n\t\t\t\tthis.data[i] = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic Generate(): void {\r\n\t\t\tlet seed = this.seed;\r\n\t\t\tlet xo = rnd32(seed + 0xCCBC913E);\r\n\t\t\tlet yo = rnd32(xo + 0x8F0CFB13);\r\n\r\n\t\t\tlet amp = 1;\r\n\t\t\tfor (let i = 0; i < this.octave; ++i) {\r\n\t\t\t\tseed = rnd32(seed + 0xC0193614);\r\n\t\t\t\txo = rnd32(xo + 0x510FA995);\r\n\t\t\t\tyo = rnd32(yo + 0xC7EB9A4B);\r\n\t\t\t\tamp /= 2;\r\n\t\t\t}\r\n\r\n\t\t\tconst octaveSize = 1024 / (1 << this.octave) / this.frequency;\r\n\t\t\tconst m = 1.4629180792671596811e-9;\r\n\r\n\t\t\tseed += 0x3F3F75DF;\t// why?\r\n\r\n\t\t\tlet y = 0;\r\n\t\t\tlet ny = 0;\r\n\t\t\twhile (y < this.height) {\r\n\t\t\t\tlet x = 0;\r\n\t\t\t\tlet nx = this.offset / octaveSize;\r\n\t\t\t\twhile (x < 1024) {\r\n\t\t\t\t\tconst t00 = rnd32(rnd32(seed + ny) + nx) * m;\r\n\t\t\t\t\tconst t10 = rnd32(rnd32(seed + ny) + nx + 1) * m;\r\n\t\t\t\t\tconst t01 = rnd32(rnd32(seed + ny + 1) + nx) * m;\r\n\t\t\t\t\tconst t11 = rnd32(rnd32(seed + ny + 1) + nx + 1) * m;\r\n\t\t\t\t\tconst cos00 = Math.cos(t00), sin00 = Math.sin(t00);\r\n\t\t\t\t\tconst cos10 = Math.cos(t10), sin10 = Math.sin(t10);\r\n\t\t\t\t\tconst cos01 = Math.cos(t01), sin01 = Math.sin(t01);\r\n\t\t\t\t\tconst cos11 = Math.cos(t11), sin11 = Math.sin(t11);\r\n\r\n\t\t\t\t\tlet innerY = 0;\r\n\t\t\t\t\twhile (innerY < octaveSize / 2 && y + innerY < this.height) {\r\n\t\t\t\t\t\tlet innerX = 0;\r\n\t\t\t\t\t\tlet sy = innerY / octaveSize * 2;\r\n\t\t\t\t\t\tlet p = (y + innerY) * 1024 + x;\r\n\r\n\t\t\t\t\t\twhile (innerX < octaveSize) {\r\n\t\t\t\t\t\t\tlet sx = innerX / octaveSize;\r\n\r\n\t\t\t\t\t\t\tconst n00 = sx * cos00 + sy * sin00;\r\n\t\t\t\t\t\t\tconst n10 = (sx - 1) * cos10 + sy * sin10;\r\n\t\t\t\t\t\t\tconst n01 = sx * cos01 + (sy - 1) * sin01;\r\n\t\t\t\t\t\t\tconst n11 = (sx - 1) * cos11 + (sy - 1) * sin11;\r\n\r\n\t\t\t\t\t\t\tconst lx = 0.5 - 0.5 * Math.cos(Math.PI * sx);\r\n\t\t\t\t\t\t\tconst ly = 0.5 - 0.5 * Math.cos(Math.PI * sy);\r\n\t\t\t\t\t\t\tconst ix0 = n00 + (n10 - n00) * lx;\r\n\t\t\t\t\t\t\tconst ix1 = n01 + (n11 - n01) * lx;\r\n\t\t\t\t\t\t\tconst d = ix0 + (ix1 - ix0) * ly;\r\n\r\n\t\t\t\t\t\t\tif (this.seed === Cloud.alphaSeed) {\r\n\t\t\t\t\t\t\t\tthis.data[p++] += d * amp;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.data[p++] += Math.abs(d) * amp;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tinnerX++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tinnerY++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tx += octaveSize;\r\n\t\t\t\t\tnx++;\r\n\t\t\t\t}\r\n\t\t\t\ty += octaveSize / 2;\r\n\t\t\t\tny++;\r\n\t\t\t}\r\n\r\n\t\t\tthis.octave++;\r\n\t\t}\r\n\t}\r\n\r\n\tclass Cloud {\r\n\t\tstatic readonly CHANNEL_SHIFT = 6;\r\n\t\tstatic readonly MAX_OCTAVE = 8;\r\n\t\tstatic readonly colorSeed = seed + 0xBCCC913E;\r\n\t\tstatic readonly alphaSeed = seed + 0x3ECCBC91;\r\n\t\tstatic readonly cloudMap: { [cloudID: string]: Cloud; } = {};\r\n\t\tstatic viewoffset: number = 0;\r\n\t\tstatic viewwidth: number = 0;\r\n\t\tstatic cloudQueue: Array<Cloud> = [];\r\n\t\tstatic cloudID(offset: number, height: number) {\r\n\t\t\treturn offset + \":\" + height;\r\n\t\t}\r\n\t\tstatic Cleanup() {\r\n\t\t\tCloud.cloudQueue = Cloud.cloudQueue.filter((c) => {\r\n\t\t\t\tif (!c.data.length) return true;\t// not owning the array right now\r\n\t\t\t\tif (c.offset < Cloud.viewoffset - Cloud.viewwidth * 4) return false;\r\n\t\t\t\tif (c.offset > Cloud.viewoffset + Cloud.viewwidth * 6) return false;\r\n\t\t\t\treturn c.rendered < Cloud.MAX_OCTAVE;\r\n\t\t\t});\r\n\t\t}\r\n\t\tstatic Get(offset: number, height: number) {\r\n\t\t\tconst id = Cloud.cloudID(offset, height);\r\n\t\t\tlet c: Cloud = Cloud.cloudMap[id];\r\n\t\t\tif (!c) {\r\n\t\t\t\tc = new Cloud(offset, height);\r\n\t\t\t\tCloud.cloudMap[id] = c;\r\n\t\t\t\tCloud.cloudQueue.push(c);\r\n\t\t\t}\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\tpublic data: Uint8ClampedArray = new Uint8ClampedArray(0);\r\n\t\tpublic channels: Array<Noise> = [];\r\n\t\tpublic rendered: number = 0;\r\n\t\tconstructor(public offset: number, public height: number) {\r\n\t\t\tthis.channels.push(Noise.Get(Cloud.alphaSeed, 1, offset, height));\r\n\t\t\tthis.channels.push(Noise.Get(Cloud.colorSeed, 2, offset + 1024 * 0, height));\r\n\t\t\tthis.channels.push(Noise.Get(Cloud.colorSeed, 2, offset + 1024 * 1, height));\r\n\t\t\tthis.channels.push(Noise.Get(Cloud.colorSeed, 2, offset + 1024 * 2, height));\r\n\t\t}\r\n\t\tpublic Quality(): number {\r\n\t\t\tlet cQ = this.channels[0].octave < 6 ? this.channels[0].octave : 8;\r\n\t\t\treturn Math.min(cQ, this.channels[1].octave, this.channels[2].octave, this.channels[3].octave);\r\n\t\t}\r\n\t\tpublic MinChannel(): number {\r\n\t\t\tlet min = 1;\r\n\t\t\tfor (let i = 1; i < this.channels.length; ++i) {\r\n\t\t\t\tif (this.channels[i].octave < this.channels[min].octave) {\r\n\t\t\t\t\tmin = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn min;\r\n\t\t}\r\n\t}\r\n\r\n\tworker.onmessage = function (e: MessageEvent) {\r\n\t\tconst msg = e.data as CloudRequestMessage;\r\n\t\tCloud.viewoffset = msg.viewoffset;\r\n\t\tCloud.viewwidth = msg.viewwidth;\r\n\r\n\t\tconst cloud = Cloud.Get(msg.offset, msg.height);\r\n\t\tcloud.data = msg.data;\r\n\t\tassert(cloud.data.length > 0);\r\n\t};\r\n\r\n\t// Do the work\r\n\tsetInterval(() => {\r\n\t\tCloud.Cleanup();\r\n\r\n\t\tconst left = Cloud.viewoffset - Cloud.viewwidth / 2;\r\n\t\tconst right = left + Cloud.viewwidth * 2;\r\n\t\tCloud.cloudQueue = Cloud.cloudQueue.sort((a, b) => {\r\n\t\t\tconst aVisible = (a.offset + 1024 >= left && a.offset <= right);\r\n\t\t\tconst bVisible = (b.offset + 1024 >= left && b.offset <= right);\r\n\t\t\tif (aVisible && !bVisible) return -1;\r\n\t\t\tif (bVisible && !aVisible) return 1;\r\n\t\t\treturn b.Quality() - a.Quality();\r\n\t\t});\r\n\r\n\t\tlet done = false;\r\n\t\tfor (let i = 0; !done && i < Cloud.cloudQueue.length; ++i) {\r\n\t\t\tconst c = Cloud.cloudQueue[i];\r\n\t\t\tif (!c.data.length) continue;\t// not owning the array right now\r\n\r\n\t\t\tif (c.rendered >= Cloud.MAX_OCTAVE) continue;\r\n\r\n\t\t\tlet ch = (c.channels[0].octave < 6 ? 0 : 1);\r\n\t\t\tif (c.channels[1].octave < c.channels[ch].octave) ch = 1;\r\n\t\t\tif (c.channels[2].octave < c.channels[ch].octave) ch = 2;\r\n\t\t\tif (c.channels[3].octave < c.channels[ch].octave) ch = 3;\r\n\r\n\t\t\tif (c.channels[ch].octave < Cloud.MAX_OCTAVE) {\r\n\t\t\t\tc.channels[ch].Generate();\r\n\t\t\t\tdone = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (c.channels[0].octave > 0) {\r\n\t\t\t\t//c.channels[1].octave === c.channels[2].octave &&\r\n\t\t\t\t//c.channels[2].octave === c.channels[3].octave) {\r\n\r\n\t\t\t\tlet s = 0;\r\n\t\t\t\tlet d = 0;\r\n\t\t\t\twhile (d < c.data.length) {\r\n\t\t\t\t\tlet a = Math.min(1, 0.3 + c.channels[0].data[s]);\r\n\t\t\t\t\ta = Math.min(1, Math.pow(a, 4) + 0.05);\r\n\r\n\t\t\t\t\tc.data[d++] = a * c.channels[1].data[s] * 255;\r\n\t\t\t\t\tc.data[d++] = a * c.channels[2].data[s] * 255;\r\n\t\t\t\t\tc.data[d++] = a * c.channels[3].data[s] * 255;\r\n\t\t\t\t\tc.data[d++] = 255;\r\n\r\n\t\t\t\t\ts++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tc.rendered = c.Quality();\r\n\r\n\t\t\t\tconst msg: CloudResponseMessage = {\r\n\t\t\t\t\toffset: c.offset,\r\n\t\t\t\t\tdata: c.data,\r\n\t\t\t\t};\r\n\t\t\t\tworker.postMessage(msg, [msg.data.buffer]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}, 0);\r\n}\r\n","// @ts-ignore\nimport * as assert from \"assert\";\n\nimport { Animator } from './canvasUI';\nimport { SVGtoPath2D } from './utils';\n\nconst PATH_WIDTH = 1000;\nconst PATH_HEIGHT = 100;\nconst PATH_LOGO: Path2D = SVGtoPath2D(\"M949.3 62.1L977.9.2l22.2 83.4h-14.8v-.7l1.4-1.4.4-.7.1-1-.1-.9c-.1-.4-.1-.9-.3-1.3L974.5 30l-26 56.3-27.1-55.7-11.2 46.5-.3 1.2-.1 1 .1 1.2.6.9 1.3 1.4v.7h-14.6L919.7.1l29.6 62zm-76.3-.3V7c0-.4-.1-.7-.3-1l-.6-.9-1.3-1.4v-.8H887v.7L885.7 5c-.3.3-.6.6-.6.9-.1.3-.1.7-.3 1v58.4c0 6.4-2.8 11.3-8.4 14.5s-14.1 4.9-25.4 4.9a52 52 0 0 1-25.4-4.9 15.6 15.6 0 0 1-8.4-14.5V7l-.1-1-.6-.9-1.3-1.4v-.8h16.2v.7L830.1 5c-.3.3-.6.6-.6.9l-.1 1v54.8c0 4.5 1.6 7.7 4.6 9.4 3.2 1.7 8.8 2.8 17.1 2.8 8.4 0 14.2-.9 17.4-2.6 3-1.7 4.5-4.9 4.5-9.5zm-89.6 17.4V7.1l-.1-1-.6-.9-1.3-1.4V3h16.2v.7l-1.3 1.4c-.3.3-.6.6-.6.9l-.1 1v72.1l.1 1.2.6.9 1.3 1.4v.7h-16.4v-.7l1.3-1.4c.3-.3.6-.6.6-.9.3-.4.3-.7.3-1.1zM736.6 2.9c5.5 0 10.1 1.6 13.9 4.6 3.8 3.2 6.2 7.4 7.2 12.6L737.4 35c9.9 1.4 17.5 6.2 23.3 14.1s8.6 17.7 8.6 29.6v4.8h-14.1v-.7l1.6-1.4.6-.9.1-1.2v-2.6a33 33 0 0 0-8.7-23.5 29 29 0 0 0-22.2-9.3l-3.6.1-4.2.4 21.5-16.8c1.6-1.3 2.8-2.3 3.3-3.3.6-.9.9-1.9.9-3 0-2.3-1-4.1-2.9-5.4a14.3 14.3 0 0 0-8.1-1.9h-28.3v65.4l.1 1.2.6.9 1.3 1.4v.7H691v-.7l1.3-1.4.6-.9.1-1.2v-72l-.1-1-.6-.9-1.3-1.4v-.8h45.5v-.4zM601.3 83.4h-17.1L635.1 0l50.5 83.4h-17.4v-.7c.7 0 1.3-.1 1.7-.4.4-.3.6-.7.6-1.2l-.1-.9-.3-.6L653 51.5h-24.6l-2.3.1c-.4 0-.6.1-.7.4l-1.6 1.3-.6-.4 7.2-12.5h16.1L635.2 22l-35.7 57.6c-.1.3-.3.4-.3.7l-.1.9c0 .4.1.9.6 1.2.4.3 1 .4 1.7.4v.6h-.1zm-34.5-24.5V7.1c0-.4-.1-.7-.3-1l-.6-.9-1.4-1.4V3h15.2v.7l-1.4 1.4-.6.9-.1 1v79.2L521 28.6v50.7l.1 1.2.6.9 1.3 1.4v.7h-15.2v-.7l1.6-1.4.6-.9.1-1.2V.3l56.7 58.6zm-102.1-56c5.5 0 10.1 1.6 13.9 4.6 3.8 3.2 6.2 7.4 7.2 12.6L465.5 35c9.9 1.4 17.5 6.2 23.3 14.1s8.6 17.7 8.6 29.6v4.8h-14.1v-.7l1.6-1.4.6-.9.1-1.2v-2.6a33 33 0 0 0-8.7-23.5 29 29 0 0 0-22.2-9.3l-3.6.1-4.2.4 21.5-16.8c1.6-1.3 2.8-2.3 3.3-3.3.6-.9.9-1.9.9-3 0-2.3-1-4.1-2.9-5.4a14.3 14.3 0 0 0-8.1-1.9h-28.3v65.4l.1 1.2.6.9 1.3 1.4v.7h-16.2v-.7l1.3-1.4.6-.9.1-1.2v-72l-.1-1-.6-.9-1.3-1.4v-.8h45.5l.1-.4zm-96.4 10.9c-4.8 0-8.8.4-12 1.3-3.2.9-5.8 2.2-8.1 4.1a27.1 27.1 0 0 0-7.8 10.6 35 35 0 0 0-2.6 13.5c0 5.2.9 9.9 2.6 13.9 1.7 4.1 4.3 7.4 7.8 10a23 23 0 0 0 8.3 4.1c3 .9 7.1 1.2 12.3 1.2h34.9a3 3 0 0 0 1.3-.3c.4-.1.7-.4 1.3-.7l2.2-1.9h1L402 83.5h-33.1c-7.7 0-13.6-.6-17.8-1.9a36.7 36.7 0 0 1-22.2-19.8 48.1 48.1 0 0 1-1.5-31.3 37.4 37.4 0 0 1 12.3-18.8c2.3-2 4.9-3.8 7.8-5.2 2.5-1.3 5.2-2.2 8.1-2.6a71 71 0 0 1 12.8-.7h40L400.9 17h-.6l.1-1v-.3c0-.4-.1-.9-.6-1.2-.4-.3-.9-.4-1.4-.4l-30.1-.3zm-27.7 31l4.9-11H401l-7.4 13.9h-.7l.1-1.2v-.3c0-.4-.1-.9-.6-1.2-.3-.3-.9-.4-1.4-.4h-50.5l.1.2zm-70.6-31h-32.3c-.4 0-.7.1-1 .3a4 4 0 0 0-1.3 1l-2.2 1.7-.7-.3L239.7 3h80.9L313 16.8h-.6v-1.3c0-.4-.1-.9-.6-1.2-.3-.3-.7-.4-1.3-.4H282v65.4l.1 1.3.6.9 1.4 1.4v.7h-16.4v-.7l1.4-1.4c.3-.3.6-.6.6-.9l.1-1.2.2-65.6zm-87 0h-32.3c-.4 0-.7.1-1 .3a4 4 0 0 0-1.3 1l-2.2 1.7-.7-.3L152.7 3h80.9L226 16.8h-.6v-1.3c0-.4-.1-.9-.6-1.2-.3-.3-.7-.4-1.3-.4H195v65.4l.1 1.3.6.9 1.4 1.4v.7h-16.4v-.7l1.4-1.4c.3-.3.6-.6.6-.9l.1-1.2.2-65.6zM74.2 83.4H57.1L108 0l50.5 83.4h-17.4v-.7c.7 0 1.3-.1 1.7-.4.4-.3.6-.7.6-1.2l-.1-.9-.3-.6-17.1-28.3h-24.6l-2.3.1c-.4 0-.6.1-.7.4l-1.6 1.3-.7-.3 7.2-12.5h16.1l-11.2-18.4-36 57.4c-.1.3-.3.4-.3.7l-.1.9c0 .4.1.9.6 1.2.4.3 1 .4 1.7.4v.9h.2zM44.8 2.9a23 23 0 0 1 16.8 6.5c4.3 4.3 6.7 10 6.7 16.7s-2 12-6.1 16.1a21.5 21.5 0 0 1-15.9 6.1h-18l-6.4-11h23.5c3.2 0 5.8-1 7.7-3 1.9-2 2.8-4.8 2.8-8.4 0-3.8-1.2-6.8-3.6-9a14.5 14.5 0 0 0-10-3.2h-28V79l.1 1.2.6.9 1.3 1.4v.7H0v-.7L1.3 81l.6-.9L2 79V7l-.1-1-.6-.9L0 3.6v-.7h44.8z\");\nconst PATH_CREDITS: Path2D = SVGtoPath2D(\"M946.8 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h8v2.3l2.7-2.7h5.4c1.9 0 3.4.4 4.6.8 1.1.4 2.7 1.1 3.4 1.9l1.9-2.3H982c5.7 0 10 1.1 12.6 3.8 2.7 2.7 3.8 6.5 3.8 11.9v17c0 .4.4.4.4.8l1.1.8v.4h-9.6v-.4l1.1-.8s.4-.4.4-.8V49.9c0-3.4-.8-5.7-2.3-7.3-1.5-1.5-3.8-2.3-6.9-2.3H974c.8 1.1 1.1 2.3 1.5 3.8.4 1.5.4 3.4.4 5.7v17c0 .4.4.4.4.8l1.1.8v.4h-9.6v-.4l1.1-.8s.4-.4.4-.8V49.9c0-3.4-.8-5.7-1.9-7.3a8 8 0 0 0-6.1-2.3h-8v26.5c0 .4.4.4.4.8l1.1.8v.4h-9.6v-.4l1.1-.8c.4 0 .4-.4.4-.8l.1-.8zm-47.1-14.6c0-5.4 1.9-9.6 5.4-13 3.4-3.4 8-5 13.8-5s10.3 1.5 13.8 5c3.4 3.4 5.4 7.7 5.4 13s-1.9 9.6-5.4 13c-3.4 3.4-8 5-13.8 5s-10.3-1.5-13.8-5a17.3 17.3 0 0 1-5.4-13zm19.2-11.8c-3.8 0-6.9 1.1-8.8 3.4-2.3 2.3-3.4 5-3.4 8.8s1.1 6.5 3.4 8.8c2.3 2.3 5.4 3.4 8.8 3.4 3.8 0 6.9-1.1 8.8-3.4 2.3-2.3 3.4-5 3.4-8.8 0-3.4-1.1-6.5-3.4-8.8-1.9-2.7-5-3.4-8.8-3.4zm-13.4-14.2c0-1.1.4-2.3 1.1-3.1.8-.8 1.9-1.1 3.1-1.1 1.1 0 2.3.4 3.1 1.1.8.8 1.1 1.9 1.1 3.1 0 1.1-.4 2.3-1.1 3.1-.8.8-1.9 1.1-3.1 1.1s-2.3-.4-3.1-1.1a4.7 4.7 0 0 1-1.1-3.1zm17.6 0c0-1.1.4-2.3 1.1-3.1.8-.8 1.9-1.1 3.1-1.1s2.3.4 3.1 1.1c.8.8 1.1 1.9 1.1 3.1 0 1.1-.4 2.3-1.1 3.1-.8.8-1.9 1.1-3.1 1.1-1.1 0-2.3-.4-3.1-1.1a4.7 4.7 0 0 1-1.1-3.1zM876.8 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h14.5c1.5 0 2.7.4 4.2 1.1 1.1.8 2.3 1.5 3.4 2.7l-3.1 6.5h-.3V44c0-.8-.4-1.5-1.1-2.3-.8-.8-1.9-.8-3.4-.8H884V67c0 .4.4.4.4.8l1.1.8v.4H876v-.4l1.1-.8c.4 0 .4-.4.4-.8-.7-.6-.7-1-.7-1zM863 25.8v8h6.9l-3.4 8h-.4v-.4c0-.4 0-.8-.4-.8-.4-.4-.4-.4-.8-.4h-1.5v26.6c0 .4.4.4.4.8l.8.8v.4H855v-.4l.8-.8s.4-.4.4-.8V40.3h-5.4V40l5.7-6.1c1.9-1.9 3.8-5 5.7-7.7h.8v-.4zm-39 14.5c-1.5 0-2.7 0-3.1.4-.8.4-1.1.8-1.1 1.5 0 1.1 2.3 2.3 6.9 3.4l7.3 1.9c4.2 1.1 7.3 3.1 9.2 5.4s3.1 5.4 3.1 9.2v6.5h-36.4l2.7-6.1h26v-.8-.8a8 8 0 0 0-1.9-5.4 14.8 14.8 0 0 0-6.9-3.1c-1.1-.4-3.1-.8-6.1-1.5-3.1-.8-5-1.1-6.5-1.9s-2.7-1.5-3.4-2.7a7.3 7.3 0 0 1-1.1-4.2c0-2.3 1.1-4.6 3.1-6.1 2.3-1.5 5-2.3 8.4-2.3h20.7l-3.8 8h-.4v-.4c0-.4 0-.8-.4-.8s-.4-.4-.8-.4l-15.5.2zm-26.4-6.5V20.1v-.8s-.4-.4-.4-.8l-1.1-.8v-.4h9.6v.4l-.8.8-.4.4V66c0 .4.4.4.4.8l.8.8v.4H796v-.4l.8-.8c.4-.4.4-.4.4-.8V39.6h-8c-4.2 0-7.3 1.1-9.2 3.1a9.8 9.8 0 0 0-3.4 8c0 3.4 1.1 6.1 3.1 8.4a12 12 0 0 0 8.4 3.1h3.5c.4 0 .4-.4.8-.4l1.5-1.1.4.4-4.6 8h-2.3c-5.4 0-9.6-1.5-12.6-5-3.4-3.1-5-7.3-5-12.2 0-5.4 1.9-10 5.4-13a21 21 0 0 1 14.5-4.6h8l-.1-.5zM755.1 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h9.6v.4l-1.1.8c0 .4-.4.4-.4.8V66.8c0 .4.4.4.4.8l1.1.8v.4h-9.6v-.4l1.1-.8c.4 0 .4-.4.4-.8V66zm-.8-40.6c0-1.1.4-2.3 1.1-3.1.8-.8 1.9-1.1 3.1-1.1s2.3.4 3.1 1.1c.8.8 1.1 1.9 1.1 3.1 0 1.1-.4 2.3-1.1 3.1-.8.8-1.9 1.1-3.1 1.1s-2.3-.4-3.1-1.1a4.7 4.7 0 0 1-1.1-3.1zM717.6 66V18.1v-.8s-.4-.4-.4-.8l-.8-.8v-.4h10.7v.4l-.8.8c-.4 0-.4.4-.4.8v44h20.3c.4 0 .4-.4.8-.4l1.5-1.1.4.4-5 8.8h-27.6v-.4l.8-.8s.4-.4.4-.8l.1-1zm-64.7 0V20.4v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h9.6v.4l-1.1.8s-.4.4-.4.8V66.8c0 .4.4.4.4.8l1.1.8v.4h-9.6v-.4l1.1-.8c.4 0 .4-.4.4-.8V66zm18.4-21.8c4.6.8 8.4 2.7 11.1 6.1a20 20 0 0 1 4.2 12.6V69h-8v-.4l.8-.8c.4 0 .4-.4.4-.8v-3.5c0-4.2-1.1-7.3-3.4-9.6s-5.4-3.4-9.2-3.4h-5.4V44l8-7.3.4-.4v-.8s0-.4-.4-.4l-.8-.1v-.4h13v.4l-10.7 9.2zM634.5 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h9.6v.4l-1.1.8c0 .4-.4.4-.4.8V66.8c0 .4.4.4.4.8l1.1.8v.4H633v-.4l1.1-.8c.4 0 .4-.4.4-.8-.4-.4 0-.8 0-.8zm-1.1-40.6c0-1.1.4-2.3 1.1-3.1.8-.8 1.9-1.1 3.1-1.1s2.3.4 3.1 1.1c.8.8 1.1 1.9 1.1 3.1 0 1.1-.4 2.3-1.1 3.1-.8.8-1.9 1.1-3.1 1.1s-2.3-.4-3.1-1.1a4.7 4.7 0 0 1-1.1-3.1zM606.6 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h14.5c1.5 0 2.7.4 4.2 1.1 1.1.8 2.3 1.5 3.4 2.7l-3.1 6.5h-.4V44c0-.8-.4-1.5-1.1-2.3-.8-.8-1.9-.8-3.4-.8h-5.4V67c0 .4.4.4.4.8l1.1.8v.4h-9.6v-.4l1.1-.8c.4 0 .4-.4.4-.8-.6-.6-.6-1-.6-1zm-18.8-32.2V20.1v-.8s-.4-.4-.4-.8l-1.1-.8v-.4h9.6v.4l-.8.8-.4.4V66c0 .4.4.4.4.8l.8.8v.4h-9.6v-.4l.8-.8c.4-.4.4-.4.4-.8V39.6h-7.3c-4.2 0-7.3 1.1-9.2 3.1a9.8 9.8 0 0 0-3.4 8c0 3.4 1.1 6.1 3.1 8.4a12 12 0 0 0 8.4 3.1h3.5c.4 0 .4-.4.8-.4l1.5-1.1.4.4-4.6 8h-2.3c-5.4 0-9.6-1.5-12.6-5-3.4-3.1-5-7.3-5-12.2 0-5.4 1.9-10 5.4-13a21 21 0 0 1 14.5-4.6h7.3l-.2-.5zm-46.3 28.7h11.1c.4 0 .8-.4.8-.4l1.5-1.1.4.4-4.6 8h-9.6a20 20 0 0 1-13.8-4.6c-3.4-3.1-5-7.3-5-12.6 0-5.7 1.9-10 5.4-13 3.4-3.1 8.8-4.6 15.3-4.6h12.2l-11.9 22.6h-6.9l8.8-16.5h-5c-3.4 0-6.5.8-8.4 2.7a11 11 0 0 0-3.1 8c0 3.8 1.1 6.5 3.1 8.4a19 19 0 0 0 9.7 2.7zM499.8 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h14.5c1.5 0 2.7.4 4.2 1.1 1.1.8 2.3 1.5 3.4 2.7l-3.1 6.5h-.3V44c0-.8-.4-1.5-1.1-2.3-.8-.8-1.9-.8-3.4-.8h-5.4V67c0 .4.4.4.4.8l1.1.8v.4H499v-.4l1.1-.8c.4 0 .4-.4.4-.8-1.1-.6-.7-1-.7-1zm-39.4 0V18.1v-.8s-.4-.4-.4-.8l-.8-.8v-.4H501l-5 8.8h-.4v-.4c0-.4 0-.8-.4-.8s-.4-.4-.8-.4h-26V43l3.8-7.3h18l-5 9.2h-.4v-.8c0-.4 0-.8-.4-.8s-.4-.4-.8-.4h-15.3V66.3c0 .4.4.4.4.8l.8.8v.4h-10.7v-.4l.8-.8s.4-.4.4-.8c.4.1.4-.3.4-.3zm-56.6-41c-1.9 0-3.8.4-5 1.5a5.6 5.6 0 0 0-1.9 4.2c0 1.5.4 2.7 1.1 3.8.8 1.1 2.3 2.7 3.8 3.8v.8c-3.1 0-5.7 1.1-7.7 3.1s-3.1 5-3.1 8c0 3.4 1.1 6.5 3.1 8.4a13 13 0 0 0 8.8 3.1c3.4 0 6.5-1.1 8.4-3.1a13 13 0 0 0 3.1-8.8v-1.5c0-.4 0-1.1-.4-1.5h-6.1c-.4 0-.8.4-.8.4l-1.5 1.1-.4-.4 4.6-9.2H428.5c.4 0 .8-.4 1.1-.8l1.1-.8.4.4-4.6 8.8h-5.4v3.4c0 5.7-1.9 10.3-5.4 13.8a19.8 19.8 0 0 1-14.2 5.4 17.9 17.9 0 0 1-18.8-18c0-3.4.8-6.1 1.9-8.8 1.1-2.7 3.1-4.6 5.7-6.5a9.9 9.9 0 0 1-1.5-3.1c-.4-1.1-.4-2.3-.4-3.4 0-3.4 1.1-6.1 3.8-8.4s5.7-3.4 9.2-3.4h12.2l-5 9.2h-.4v-.8c0-.4 0-.4-.4-.8-.4 0-.4-.4-1.1-.4h-3.4l.5.5zm-68.9 15.3c-1.5 0-2.7 0-3.1.4-.8.4-1.1.8-1.1 1.5 0 1.1 2.3 2.3 6.9 3.4l7.3 1.9c4.2 1.1 7.3 3.1 9.2 5.4s3.1 5.4 3.1 9.2v6.5h-36.7l2.7-6.1h26v-.8-.8a8 8 0 0 0-1.9-5.4 14.8 14.8 0 0 0-6.9-3.1c-1.1-.4-3.1-.8-6.1-1.5-3.1-.8-5-1.1-6.5-1.9s-2.7-1.5-3.4-2.7a7.3 7.3 0 0 1-1.1-4.2c0-2.3 1.1-4.6 3.1-6.1 2.3-1.5 5-2.3 8.4-2.3h20.7l-3.8 8h-.4v-.4c0-.4 0-.8-.4-.8s-.4-.4-.8-.4h-15.2zM315 36.9V66.8c0 .4.4.4.4.8l1.1.8v.4h-8v-2.3l-2.7 2.7h-5.4c-5 0-8.8-1.1-11.1-3.8a17.6 17.6 0 0 1-3.8-11.9V37.3v-.8c0-.4-.4-.4-.4-.8L284 35v-.4h9.6v.4l-1.1.8c0 .4-.4.4-.4.8V53.5c0 3.4.8 5.7 1.9 7.3 1.1 1.5 3.4 2.3 6.5 2.3h8V37.3v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h9.6v.5l-1.1.8c0 .4-.4.4-.4.8-.1.3-.1-.1-.1.3zM244.5 66V36.9v-.8c0-.4-.4-.4-.4-.8l-1.1-.8v-.4h8v2.3l2.7-2.7h5.4c5 0 8.8 1.5 11.1 4.2 2.7 2.7 3.8 6.5 3.8 11.9v17c0 .4.4.4.4.8l1.1.8v.4H266v-.4l1.1-.8s.4-.4.4-.8V49.9a14 14 0 0 0-1.9-7.3 8 8 0 0 0-6.1-2.3h-8.4v26.5c0 .4.4.4.4.8l1.1.8v.4H243v-.4l1.1-.8c.4 0 .4-.4.4-.8V66zm-18.3 3V40.3h-8c-4.2 0-7.3 1.1-9.2 3.1-2.3 1.9-3.1 4.6-3.1 8.4s.8 6.5 2.7 8.4c1.9 1.9 4.6 2.7 8.8 2.7h1.9c.8 0 1.1 0 1.5-.4.4-.4.8-.4 1.1-.8l1.1-.8.4.4-4.6 8h-2.3c-5.4 0-9.6-1.5-13-4.6a17 17 0 0 1-5-12.2c0-5.4 1.9-10 5.4-13a21 21 0 0 1 14.5-4.6h15.7v.4l-.8.8c-.4.4-.4.4-.4.8V71c0 5.4-1.1 9.6-3.8 11.9-2.7 2.3-6.9 3.4-13 3.4h-11.9l3.8-6.1h11.1c2.7 0 4.6-.8 5.7-1.9.6-2.7 1.4-5.4 1.4-9.3zm-51.3-.3a14 14 0 0 1-9.6-3.1c-2.3-1.9-3.1-5-3.1-8.4 0-3.4 1.1-6.5 3.4-8.4 2.3-1.9 5.4-3.1 9.2-3.1h5.7l-3.8 7.3h-.4c0-.4 0-.8-.4-.8s-.8-.4-1.1-.4c-1.9 0-3.1.4-4.2 1.5a5 5 0 0 0-1.5 3.8c0 1.9.4 3.4 1.5 4.2 1.1.8 2.7 1.5 5 1.5h8.8V44.6c0-1.5-.4-2.7-.8-3.1-.8-.8-1.9-.8-3.4-.8h-11.9c-.4 0-.4.4-.8.4l-1.5 1.1-.4-.4 4.6-8H181c3.8 0 6.5.8 8 2.7 1.5 1.9 2.3 4.6 2.3 8.8v21.1c0 .4.4.4.4.8l.8.8v.4h-17.6v.3zm-49.4-14.2l18.8-40.9 14.5 55.1h-10v-.4l.8-.8.4-.4V66s0-.4-.4-.8l-8-31.4L124.4 71l-18-36.7-7.7 31V67.7c0 .4 0 .4.4.4l.8.8v.1h-9.6l14.9-55.1 20.3 40.6zm-71.2 1.2l9.2-18.4v-.8-.8c0-.4-.4-.4-.4-.4l-.8-.8v-.4h9.6v.4L48.6 81.3c0 .4-.4.4-.4.8v1.6c0 .4.4.4.4.4.4 0 .4.4.8.4h.4v.4h-10l11.1-22.2-14.2-28.1v-.4h9.6v.4l-1.1.8c-.4 0-.4.4-.4.4V37l9.5 18.7zM1.5 20.4v-.8c0-.4-.4-.4-.4-.8L0 18.1v-.4h9.6v.4l-.8.8s-.4.4-.4.8v42.9h8c4.2 0 7.3-1.1 9.2-3.1 2.3-1.9 3.1-5 3.1-8.8 0-3.4-1.1-6.1-3.1-8s-5-2.7-8.4-2.7h-1.9c-.8 0-1.1 0-1.9.4-.4.4-1.1.4-1.5.8l-.8.8-.4-.4 4.6-8h2.3c5.4 0 9.6 1.5 13 4.6 3.4 3.1 5 7.3 5 12.2 0 5.4-1.9 10-5.4 13A20.7 20.7 0 0 1 16 68H.4v-.4l1.1-.8s.4-.4.4-.8.4-.8.4-.8V20.4h-.8z\");\nconst PATH_PRESSPLAY: Path2D = SVGtoPath2D(\"M931.7 12.4h22.8V18h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm11.1 11.1h45.5v5.6h-45.5v-5.6zm11.7 11.6h22.8v5.6h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm0 11.2h22.8v5.6h-22.8v-5.6zm22.7-68.3h22.8V18h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm-111 0v5.6h-22.8v-5.6h22.8zm-22.8 11.1h22.8v5.6h-22.8v-5.6zm22.8 11.6h57.2v5.6h-79.9v-5.6h22.7zm-22.8 17.2v-5.6h22.8v5.6h-22.8zm0 11.2v-5.6h22.8v5.6h-22.8zM854.6 24h22.8v5.6h-22.8V24zm11.6-11.6h34.4V18h-34.4v-5.6zM888.9 24h22.8v5.6h-22.8V24zm11.2 11.2h22.8v5.6h-22.8v-5.6zm0 11.1h22.8v5.6h-22.8v-5.6zm0 23.2h22.8v5.6h-22.8v-5.6zm0 11.2h22.8v5.6h-22.8v-5.6zM767.2 12.4H790V18h-22.8v-5.6zm0 11.6H790v5.6h-22.8V24zm0 11.2H790v5.6h-22.8v-5.6zm0 11.1H790v5.6h-22.8v-5.6zm0 11.6H790v5.6h-22.8v-5.6zm0 11.6H790v5.6h-22.8v-5.6zm0 11.2h68.3v5.6h-68.3v-5.6zm-88.3-68.3h68.3V18h-68.3v-5.6zm22.8 17.2h-22.8V24h22.8v5.6zm0 11.1h-22.8v-5.6h22.8v5.6zm0 11.6h-22.8v-5.6h22.8v5.6zm45.5 11.2h-68.3v-5.6h68.3v5.6zm-68.3 11.6v-5.6h22.8v5.6h-22.8zm0 11.2v-5.6h22.8v5.6h-22.8zM735.6 24h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm0 11.1h22.8v5.6h-22.8v-5.6zM547.9 24h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm0 11.1h22.8v5.6h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm68.3-57.1V18H559v-5.6h57.2zM559 80.7h57.2v5.6H559v-5.6zM605 24h22.8v5.6H605V24zm0 11.2h22.8v5.6H605v-5.6zm0 11.1h22.8v5.6H605v-5.6zm0 11.6h22.8v5.6H605v-5.6zm0 11.6h22.8v5.6H605v-5.6zM471.7 12.4H540V18h-68.3v-5.6zM494.4 24h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm0 11.1h22.8v5.6h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm0 11.2h22.8v5.6h-22.8v-5.6zM340.6 24h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm0 34.3h22.8v5.6h-22.8v-5.6zm11.2-57.1h45.5V18h-45.5v-5.6zm57.1 39.9h-57.2v-5.6h57.2v5.6zm-57.1 28.4H409v5.6h-57.2v-5.6zM386.2 24H409v5.6h-22.8V24zm11.6 39.5v-5.6h22.8v5.6h-22.8zm0 11.6v-5.6h22.8v5.6h-22.8zM252.3 24h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm0 34.3h22.8v5.6h-22.8v-5.6zm11.6-57.1h45.5V18h-45.5v-5.6zm56.7 39.9h-57.2v-5.6h57.2v5.6zm-56.7 28.4h57.2v5.6h-57.2v-5.6zm34-56.7h22.8v5.6h-22.8V24zm11.6 39.5v-5.6h22.8v5.6h-22.8zm0 11.6v-5.6h22.8v5.6h-22.8zM176.1 12.4h68.3V18h-68.3v-5.6zm0 11.6h22.8v5.6h-22.8V24zm0 11.2h22.8v5.6h-22.8v-5.6zm0 11.1h56.7v5.6h-56.7v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm0 11.6h22.8v5.6h-22.8v-5.6zm0 11.2h68.3v5.6h-68.3v-5.6zM87.8 12.4h68.3V18H87.8v-5.6zm0 11.6h22.8v5.6H87.8V24zm0 11.2h22.8v5.6H87.8v-5.6zm0 11.1h22.8v5.6H87.8v-5.6zm0 11.6h56.7v5.6H87.8v-5.6zm0 11.6h22.8v5.6H87.8v-5.6zm0 11.2h22.8v5.6H87.8v-5.6zm34.4-11.2h34.4v5.6h-34.4v-5.6zm45.6-17.2h-34.4v-5.6h34.4v5.6zm-34 28.4h34.4v5.6h-34.4v-5.6zM145 24h22.8v5.6H145V24zm22.8 16.7H145v-5.6h22.8v5.6zM0 12.4h68.3V18H0v-5.6zm22.8 17.2H0V24h22.8v5.6zm0 11.1H0v-5.6h22.8v5.6zm0 11.6H0v-5.6h22.8v5.6zm45.5 11.2H0v-5.6h68.3v5.6zM0 75.1v-5.6h22.8v5.6H0zm0 11.2v-5.6h22.8v5.6H0zM56.7 24h22.8v5.6H56.7V24zm0 11.2h22.8v5.6H56.7v-5.6zm0 11.1h22.8v5.6H56.7v-5.6z\");\n\nfunction hslColor(hue: number, saturation: number, lightness: number): string {\n\treturn \"hsl(\" +\n\t\t(hue % 360).toFixed(2) + \",\" +\n\t\t(saturation * 100).toFixed(2) + \"%,\" +\n\t\t(lightness * 100).toFixed(2) + \"%)\";\n}\n\nexport class SplashScreen {\n\tprotected hue: number = 21;\n\tprivate creditFader: Animator;\n\tprivate glowBlur: Animator;\n\tprivate gradientFader: Animator;\n\tpublic loading: boolean;\n\tconstructor(\n\t\tprotected width: number,\n\t\tprotected height: number,\n\t\tprotected viewScale: number,\n\t) {\n\t\tthis.creditFader = new Animator(3.0, 0.5, 0, 2, 1);\n\t\tthis.glowBlur = new Animator(1.5, 2, 4, 3.5, 8, 7.5, 4);\n\t\tthis.glowBlur.loop = true;\n\t\tthis.gradientFader = new Animator(1.0, 1.5, 0, 4.5, 1);\n\n\t\tthis.loading = true;\n\t}\n\trender(target: CanvasRenderingContext2D, delta: number) {\n\t\ttarget.globalCompositeOperation = \"source-over\";\n\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tcanvas.width = this.width;\n\t\tcanvas.height = this.height;\n\n\t\tconst logoScale = this.viewScale * 0.7;\n\t\tconst logoAnchor = { x: target.canvas.width / 2 - (PATH_WIDTH / 2 * logoScale), y: target.canvas.height / 2 - (PATH_HEIGHT * 0.8 * logoScale) };\n\n\t\t// Logo transform\n\t\ttarget.setTransform(logoScale, 0, 0, logoScale, logoAnchor.x, logoAnchor.y);\n\t\ttarget.lineJoin = \"bevel\";\n\n\t\t// Glow\n\t\ttarget.fillStyle = \"#00ffffaa\";\n\t\ttarget.lineWidth = 6 / logoScale;\n\t\ttarget.strokeStyle = \"#00ffffaa\";\n\t\tconst blur = this.glowBlur.animate(delta);\n\t\tif (blur) {\n\t\t\t(target as any).filter = \"blur(\" + (this.glowBlur.value).toFixed(2) + \"px)\";\n\t\t}\n\t\ttarget.fill(PATH_LOGO);\n\t\ttarget.stroke(PATH_LOGO);\n\t\tif (blur) {\n\t\t\t(target as any).filter = \"none\";\n\t\t}\n\t\t//target.globalAlpha = 1.0;\n\n\t\ttarget.lineWidth = 3 / logoScale;\n\n\t\t// Logo\n\t\ttarget.strokeStyle = \"#000000\";\n\t\ttarget.stroke(PATH_LOGO);\n\t\ttarget.fillStyle = \"white\";\n\t\tthis.gradientFader.animate(delta);\n\t\tconst grd = target.createLinearGradient(0, PATH_HEIGHT * 0.8, 0, 0);\n\t\tgrd.addColorStop(0, hslColor(this.hue, 0.71, 0.35 * this.gradientFader.value));\n\t\tgrd.addColorStop(0.3, hslColor(this.hue, 0.87, 0.88 * this.gradientFader.value * this.gradientFader.value));\n\t\tgrd.addColorStop(0.83, hslColor(this.hue - 4, 0.66, 0.25 * this.gradientFader.value * this.gradientFader.value));\n\t\tgrd.addColorStop(1, hslColor(this.hue + 4, 0.52, 0.87 * this.gradientFader.value * this.gradientFader.value));\n\t\ttarget.fillStyle = grd;\n\t\ttarget.fill(PATH_LOGO);\n\n\t\tconst creditsScale = this.viewScale * 0.28;\n\t\tconst creditAnchor = { x: logoAnchor.x + PATH_WIDTH * logoScale - PATH_WIDTH * creditsScale, y: target.canvas.height / 2 + PATH_HEIGHT / 4 * this.viewScale - PATH_HEIGHT / 2 * creditsScale };\n\t\ttarget.setTransform(creditsScale, 0, 0, creditsScale, creditAnchor.x, creditAnchor.y);\n\n\t\t// Credit\n\t\ttarget.strokeStyle = \"black\";\n\t\tconst fade = this.creditFader.animate(delta);\n\t\tif (fade) {\n\t\t\ttarget.globalAlpha = this.creditFader.value;\n\t\t}\n\t\ttarget.stroke(PATH_CREDITS);\n\t\ttarget.fillStyle = \"#bbbbbb\";\n\t\ttarget.fill(PATH_CREDITS);\n\t\tif (fade) {\n\t\t\ttarget.globalAlpha = 1.0;\n\t\t}\n\n\t\tif (!this.loading && this.hue % 4 > 0.5) {\n\t\t\tconst playScale = this.viewScale * 0.22;\n\t\t\ttarget.setTransform(playScale, 0, 0, playScale, target.canvas.width / 2 - PATH_WIDTH / 2 * playScale, target.canvas.height * 0.85);\n\t\t\ttarget.fillStyle = \"#000000\";\n\t\t\ttarget.fillRect(-10, -10, 1020, 120);\n\t\t\ttarget.fillStyle = \"white\";\n\t\t\ttarget.fill(PATH_PRESSPLAY);\n\t\t}\n\n\t\ttarget.setTransform(1, 0, 0, 1, 0, 0);\n\t\tthis.hue = (this.hue + 0.04) % 360;\n\t}\n}","// @ts-ignore\nimport * as assert from \"assert\";\n\nimport { LabelToFontString, Link, MouseOffset, needRefresh } from \"./canvasUI\";\nimport { ListEntry } from './playlist';\nimport { Patternarium } from './patternarium';\n\nexport const INFOPANEL_WIDTH = 220;\n\nexport interface InfoPanelDeclaration {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tscale?: number;\n}\n\nconst TEXTBASE = 10;\nconst LINEHEIGHT = 15;\nconst FONT = \"Mono\";\nconst FONTSIZE = 11;\nconst MAX_LINKCOUNT = 20;\nconst MAX_LINKLENGTH = 34;\n\ninterface Span {\n\ttext: string;\n\tstyle?: string;\n\tcolor?: string;\n\twidth?: number;\n}\n\n\n\nexport class InfoPanel {\n\tprivate ctx: CanvasRenderingContext2D;\n\tprivate cache: Array<any> = [];\n\tprivate generation: number = 0;\n\tprivate info: ListEntry | undefined;\n\tprivate visitationMemory: { [key: string]: boolean } = {};\n\tprivate linkList: Array<Link> = [];\n\tpublic constructor(\n\t\tpublic data: InfoPanelDeclaration\n\t) {\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tthis.ctx = <CanvasRenderingContext2D>canvas.getContext('2d');\n\t}\n\tpublic setInfo(generation: number, data: ListEntry) {\n\t\tthis.generation = generation;\n\t\tthis.info = data;\n\n\t\tthis.linkList = [];\n\t\tassert(this.info !== undefined);\n\t\tassert(this.info.pattern !== undefined);\n\n\t\tlet row = 10;\n\t\tconst arrayToLinks = (refGen: number, array: string[]) => {\n\t\t\tlet sameGen = true;\n\t\t\tlet list: { generation: number, name: string }[] = [];\n\t\t\tfor (let i = 0; i < array.length && i < MAX_LINKCOUNT; ++i) {\n\t\t\t\tconst name = Patternarium.stripBPM(array[i]);\n\t\t\t\tconst match = name.match(/^([0-9]+)\\/(.+)/);\n\t\t\t\tif (match !== null && match.length === 3) {\n\t\t\t\t\tconst gen = parseInt(match[1]);\n\t\t\t\t\tlist.push({ generation: gen, name: match[2] });\n\t\t\t\t\tif (gen !== refGen) {\n\t\t\t\t\t\tsameGen = false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlist.push({ generation: refGen, name: name });\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let i = 0; i < list.length; ++i) {\n\t\t\t\tconst link = list[i].generation + \"/\" + list[i].name;\n\t\t\t\tlet label = sameGen ? list[i].name : link;\n\t\t\t\tif (label.length > MAX_LINKLENGTH) {\n\t\t\t\t\tlabel = label.substr(0, MAX_LINKLENGTH - 5) + \"...\";\t// 5 because it looked better with more margins\n\t\t\t\t} else {\n\t\t\t\t\tlabel = label.substr(0, MAX_LINKLENGTH);\n\t\t\t\t}\n\t\t\t\tconst button = new Link({\n\t\t\t\t\tx: 0, y: TEXTBASE + LINEHEIGHT * row++,\n\t\t\t\t\twidth: INFOPANEL_WIDTH, height: LINEHEIGHT,\n\t\t\t\t\ttext: label,\n\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\tfontFamily: FONT,\n\t\t\t\t\tfontSize: FONTSIZE - 1,\n\t\t\t\t\tfontStyle: \"bold\",\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tnormal: { fill: \"#4e8ac7\" },\n\t\t\t\t\t\tnormalHover: { fill: \"#68a8d9\" },\n\t\t\t\t\t\tnormalDown: { fill: \"#4177ae\" },\n\t\t\t\t\t\tchecked: { fill: \"#8844ee\" },\n\t\t\t\t\t\tcheckedHover: { fill: \"#9955ff\" },\n\t\t\t\t\t\tcheckedDown: { fill: \"#7733dd\" },\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst direct = Patternarium.directName(list[i].name);\n\t\t\t\tconst url = Patternarium.trackToHash(list[i].generation, direct);\n\t\t\t\tbutton.click = () => {\n\t\t\t\t\twindow.location.hash = url;\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t\tbutton.enable();\n\t\t\t\tif (this.visited(url)) {\n\t\t\t\t\tbutton.check();\n\t\t\t\t}\n\t\t\t\tthis.linkList.push(button);\n\t\t\t}\n\t\t};\n\n\t\t// Ascendants\n\t\tif (this.info!.pattern!.ascendants.length > 0) {\n\t\t\tarrayToLinks(this.generation - 1, this.info.pattern!.ascendants);\n\t\t\t// add spacing down to Descendants header\n\t\t\trow += 2;\n\t\t}\n\n\t\t// Descendants\n\t\tarrayToLinks(this.generation + 1, this.info.pattern!.descendants);\n\n\t\tthis.visitationMemory[Patternarium.trackToHash(this.generation, data.directname)] = true;\n\t}\n\tprivate visited(which: string) {\n\t\treturn this.visitationMemory[which] === true;\n\t}\n\tpublic render(target: CanvasRenderingContext2D, delta: number) {\n\t\tconst font = LabelToFontString(FONT, FONTSIZE, \"normal\");\n\t\tthis.ctx.font = font;\n\t\tconst metrics = this.ctx.measureText(\"123WMNsasm_+!1\");\t// measure it, because late font loading can make it change\n\n\t\tconst state: Array<any> = [this.data.scale, this.data.width, this.data.height, this.generation, metrics.width];\n\t\tif (this.info !== undefined) {\n\t\t\tstate.push(this.info.directname, this.info.voted);\n\t\t}\n\n\t\tif (needRefresh(state, this.cache)) {\n\t\t\tthis.ctx.canvas.width = this.data.width;\n\t\t\tthis.ctx.canvas.height = this.data.height;\n\t\t\tthis.ctx.fillStyle = \"#33446622\";\n\t\t\tthis.ctx.fillRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n\t\t\tthis.ctx.strokeStyle = \"#446688aa\";\n\t\t\tthis.ctx.lineWidth = 1;\n\t\t\tthis.ctx.moveTo(0, 0);\n\t\t\tthis.ctx.lineTo(0, this.ctx.canvas.height);\n\t\t\tthis.ctx.stroke();\n\n\t\t\tlet row = 0;\n\n\t\t\t// \"PATTERN INFORMATION\"\n\t\t\tthis.centeredText(this.ctx, row++, [{ text: \"PATTERN INFORMATION\", style: \"bold\", color: \"#dddddd\" }]);\n\n\t\t\t// \"\"\n\t\t\trow++;\n\n\t\t\tif (this.info !== undefined && this.info.pattern !== undefined) {\n\t\t\t\tconst pattern = this.info.pattern;\n\n\t\t\t\t// \"<b>73</b> BPM, <b>1/16</b> Rate,\"\n\t\t\t\tassert(pattern.rate > 0.4);\n\t\t\t\tthis.centeredText(this.ctx, row++, [\n\t\t\t\t\t{ text: pattern.tempo.toString(), style: \"bold\", color: \"#dddddd\" },\n\t\t\t\t\t{ text: \" BPM, \" },\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: pattern.rate > 1.9 ? \"1/32\" :\t\t\t\t\t// 2.0 +- 0.1\n\t\t\t\t\t\t\tpattern.rate > 1.4 ? \"1/16T\" : \t\t\t// 1.5 +- 0.1\n\t\t\t\t\t\t\t\tpattern.rate > 0.9 ? \"1/16\" : \t\t// 1.0 +- 0.1\n\t\t\t\t\t\t\t\t\tpattern.rate > 0.65 ? \"1/8T\" : \t// .75 +- 0.1\n\t\t\t\t\t\t\t\t\t\tpattern.rate > 0.4 ? \"1/8\" :\t// 0.5 +- 0.1\n\t\t\t\t\t\t\t\t\t\t\t\"Unknown\", style: \"bold\", color: \"#dddddd\"\n\t\t\t\t\t},\n\t\t\t\t\t{ text: \" Rate,\" },\n\t\t\t\t]);\n\n\t\t\t\t// \"<b>6%</b> swing, <b>16</b> Steps\"\n\t\t\t\tassert(pattern.step.length > 0);\n\t\t\t\tthis.centeredText(this.ctx, row++, [\n\t\t\t\t\t{ text: Math.round(pattern.swing).toString(), style: \"bold\", color: \"#dddddd\" },\n\t\t\t\t\t{ text: \"% Swing, \" },\n\t\t\t\t\t{ text: pattern.step[0].length.toString(), style: \"bold\", color: \"#dddddd\" },\n\t\t\t\t\t{ text: \" Steps\" }\n\t\t\t\t]);\n\n\t\t\t\t// \"\"\n\t\t\t\trow++;\n\n\t\t\t\t// \"25th generation pattern\"\n\t\t\t\tthis.centeredText(this.ctx, row++, [\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: this.generation.toString() +\n\t\t\t\t\t\t\t(this.generation >= 4 && this.generation <= 20 ? \"th\" :\n\t\t\t\t\t\t\t\tthis.generation % 10 === 1 ? \"st\" :\n\t\t\t\t\t\t\t\t\tthis.generation % 10 === 2 ? \"nd\" :\n\t\t\t\t\t\t\t\t\t\tthis.generation % 10 === 3 ? \"rd\" : \"th\") +\n\t\t\t\t\t\t\t\" generation pattern\"\n\t\t\t\t\t}\n\t\t\t\t]);\n\n\t\t\t\t// \"\"\n\t\t\t\trow++;\n\n\t\t\t\t// \"Votes: <b><red>53</red></b> down / <b><green>50</green></b> up\"\n\t\t\t\tthis.centeredText(this.ctx, row++, [\n\t\t\t\t\t{ text: \"Votes: \" },\n\t\t\t\t\t{ text: Math.max(0, (this.info.downvote + (this.info.voted < 0 ? +1 : 0))).toString(), style: \"bold\", color: \"#d99562\" },\n\t\t\t\t\t{ text: \" down / \" },\n\t\t\t\t\t{ text: Math.max(0, (this.info.upvote + (this.info.voted > 0 ? +1 : 0))).toString(), style: \"bold\", color: \"#62d995\" },\n\t\t\t\t\t{ text: \" up\" },\n\t\t\t\t]);\n\n\t\t\t\t// \"\"\n\t\t\t\trow++;\n\n\t\t\t\t// \"Ascendants\"\n\t\t\t\tif (pattern.ascendants.length > 0) {\n\t\t\t\t\tthis.centeredText(this.ctx, row++, [{ text: \"Ascendants\", style: \"bold\" }]);\n\t\t\t\t\trow += pattern.ascendants.length;\n\n\t\t\t\t\t// \"\"\n\t\t\t\t\trow++;\n\t\t\t\t}\n\n\t\t\t\t// \"Descendants\"\n\t\t\t\tthis.centeredText(this.ctx, row++, [{ text: \"Descendants\", style: \"bold\" }]);\n\n\t\t\t\t// \"#\"\n\t\t\t\t// \"...\" max 15 (width 28 chars)\n\t\t\t}\n\t\t}\n\n\t\ttarget.drawImage(this.ctx.canvas, 0, 0, this.ctx.canvas.width, this.ctx.canvas.height, this.data.x, this.data.y, this.ctx.canvas.width, this.ctx.canvas.height);\n\t\t//\t\ttarget.drawImage(this.ctx.canvas, Math.floor(this.data.x), Math.floor(this.data.y));\n\n\t\tfor (let i = 0; i < this.linkList.length; ++i) {\n\t\t\tthis.linkList[i].data.x = this.data.x;\n\t\t\tthis.linkList[i].render(target, delta);\n\t\t}\n\t}\n\n\tpublic mouseDown(pos: MouseOffset, capture: boolean): boolean {\n\t\tlet handled = false;\n\t\tfor (let i = this.linkList.length - 1; i >= 0; --i) {\n\t\t\tconst element = this.linkList[i];\n\t\t\tassert(element);\n\t\t\tif (element.mouseDown) {\n\t\t\t\tassert(element.mouseDown instanceof Function);\n\t\t\t\tif (element.mouseDown(pos, capture && !handled)) {\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn handled;\n\t}\n\tpublic mouseMove(pos: MouseOffset, capture: boolean): string | undefined {\n\t\tlet cursor = undefined;\n\t\tfor (let i = this.linkList.length - 1; i >= 0; --i) {\n\t\t\tconst element = this.linkList[i];\n\t\t\tassert(element);\n\t\t\tif (element.mouseMove) {\n\t\t\t\tassert(element.mouseMove instanceof Function);\n\t\t\t\tconst c = element.mouseMove(pos, capture && cursor === undefined);\n\t\t\t\tcursor = cursor || c;\t// only set if not set\n\t\t\t}\n\t\t}\n\n\t\treturn cursor;\n\t}\n\tpublic mouseUp(pos: MouseOffset, capture: boolean): boolean {\n\t\tlet handled = false;\n\t\tfor (let i = this.linkList.length - 1; i >= 0; --i) {\n\t\t\tconst element = this.linkList[i];\n\t\t\tassert(element);\n\t\t\tif (element.mouseDown) {\t// Simulate a down click first\n\t\t\t\tassert(element.mouseDown instanceof Function);\n\t\t\t\telement.mouseDown(pos, capture);\n\t\t\t}\n\t\t\tif (element.mouseUp) {\n\t\t\t\tassert(element.mouseUp instanceof Function);\n\t\t\t\tif (element.mouseUp(pos, capture)) {\n\t\t\t\t\thandled = true;\n\t\t\t\t\tcapture = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn handled;\n\t}\n\t// Special mixed font rendering code\n\tprivate centeredText(target: CanvasRenderingContext2D, row: number, spans: Array<Span>) {\n\t\ttarget.textAlign = \"left\";\n\t\ttarget.textBaseline = \"top\";\n\n\t\tlet fullwidth = 0;\n\t\tfor (let i = 0; i < spans.length; ++i) {\n\t\t\ttarget.font = LabelToFontString(FONT, FONTSIZE * (this.data.scale || 1.0), spans[i].style || \"\");\n\t\t\tspans[i].width = target.measureText(spans[i].text).width;\n\t\t\tassert(spans[i].width !== undefined);\n\t\t\tfullwidth += spans[i].width!;\n\t\t}\n\t\tconst y = TEXTBASE + LINEHEIGHT * row * (this.data.scale || 1.0);\n\t\tlet x = (INFOPANEL_WIDTH * (this.data.scale || 1.0) - fullwidth) / 2;\n\n\t\tfor (let i = 0; i < spans.length; ++i) {\n\t\t\ttarget.font = LabelToFontString(FONT, FONTSIZE * (this.data.scale || 1.0), spans[i].style || \"\");\n\t\t\ttarget.fillStyle = spans[i].color || \"#cccccc\";\n\t\t\ttarget.fillText(spans[i].text, x, y);\n\t\t\tassert(spans[i].width !== undefined);\n\t\t\tx += spans[i].width!;\n\t\t}\n\t}\n}","import * as assert from \"assert\";\n\nimport { PatternData } from \"./player\";\nimport { rnd32, rnd32ToFloat } from \"./utils\";\nimport { Patternarium } from './patternarium';\n\nexport interface IGenerationList {\n\tid: string;\n\tlatestGeneration: number;\n\tgeneration: number;\n\tpopulation: Array<any>;\n}\nexport interface ListEntry {\n\tpath: string;\n\tname: string;\n\tdirectname: string;\n\tupvote: number;\n\tdownvote: number;\n\tvoted: number;\n\tfavorite: number;\n\tpattern?: PatternData; // pattern data (if loaded)\n\tpreset?: string; // preset data (if loaded)\n}\nexport class PlayList {\n\tpublic generation: number;\n\tpublic closed: boolean;\n\tpublic list: Array<ListEntry>;\n\tpublic constructor(data: IGenerationList) {\n\t\tthis.generation = data.generation;\n\t\tthis.closed = this.generation !== data.latestGeneration;\n\t\tthis.list = [];\n\t\t// Shuffle the list\n\t\tlet rnd = 0xE85B4428;\n\t\t{\n\t\t\tconst base64 = data.id.replace(/\\-/g, \"+\").replace(/_/g, \"/\");\n\t\t\tconst s = atob(base64);\n\t\t\tlet seed = 0;\n\t\t\tfor (let i = s.length - 4; i < s.length; ++i) {\n\t\t\t\tseed = (seed << 8) | s.charCodeAt(i);\n\t\t\t}\n\t\t\trnd += seed;\n\t\t}\n\t\tfor (let i = 0, d = data.population.length; d > 0; ++i, --d) {\n\t\t\trnd = rnd32(rnd);\n\t\t\tconst r = i + Math.floor(rnd32ToFloat(rnd) * d);\n\t\t\t// swap\n\t\t\tconst e = data.population[r];\n\t\t\tdata.population[r] = data.population[i];\n\t\t\tconst entry: ListEntry = {\n\t\t\t\tpath: this.generation + \"/\" + encodeURI(e[0]),\n\t\t\t\tname: e[0],\n\t\t\t\tdirectname: Patternarium.directName(e[0]),\n\t\t\t\tupvote: e[1],\n\t\t\t\tdownvote: e[2],\n\t\t\t\tvoted: e[3],\n\t\t\t\tfavorite: e[4]\n\t\t\t};\n\t\t\t// adjust the votes\n\t\t\tif (entry.voted > 0) {\n\t\t\t\tentry.upvote--;\n\t\t\t}\n\t\t\telse if (entry.voted < 0) {\n\t\t\t\tentry.downvote--;\n\t\t\t}\n\t\t\tthis.list.push(entry);\n\t\t}\n\t}\n\tpublic length() { return this.list.length; }\n\tpublic indexOf(name: string) {\n\t\tassert(this.list.length > 0);\n\t\tfor (let i = 0; i < this.list.length; ++i) {\n\t\t\tif (this.list[i].directname === name) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tpublic indexOfName(name: string) {\n\t\treturn this.indexOf(Patternarium.directName(name));\n\t}\n}\n","import { SVGtoPath2D } from './utils';\nimport { MouseOffset } from './canvasUI';\n\nexport class HelpDimmer {\n\tpublic hidden: boolean = true;\n\trender(target: CanvasRenderingContext2D, delta: number) {\n\t\t// @ts-ignore\n\t\tconst _ = delta;\n\t\tif (!this.hidden) {\n\t\t\ttarget.fillStyle = \"#000000bb\";\n\t\t\ttarget.fillRect(0, 0, target.canvas.width, target.canvas.height);\n\t\t}\n\t}\n}\n\nconst HELP_SCREEN: Path2D = SVGtoPath2D(\"M875.43 8.25a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18V11.43a3.19 3.19 0 0 0-3.18-3.18h-15.14zm0 .5h15.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68h-15.14a2.69 2.69 0 0 1-2.68-2.68V11.43c0-1.47 1.2-2.68 2.68-2.68zm31.26 5.84v1.14h-1.4v1.21h1.4v7.77h1.63v-7.77h1.87v-1.21h-1.87c.21-.28-.8-3.39 2.22-2.72l.2-1.25c-2.68-.63-4.05.66-4.05 2.83zM63.95 11.76v12.95h1.64V11.76h-1.64zm-20.94.87V24.7h1.64v-5.34h5.87v5.34h1.63V12.62h-1.63v5.47h-5.87v-5.46H43zm839.22.18v12.17h1.6V12.81h-1.6zm15.7 4.26l-.12-1.34h-1.46v8.98h1.63v-6.55c.86-1.55 2.84-1.53 3.55-.77.76.8.36 2.3.47 7.32h1.64c-.17-4.73.45-6.96-.8-8.3a3.2 3.2 0 0 0-4.92.66zM58.3 15.57c-4.93 0-5.48 9.32.25 9.32 1.51 0 2.55-.49 3.18-1.12l-.64-1.06c-1.5 1.37-4.9 1.54-4.96-2.06l.02-.05H62c-.09-.17.7-5.04-3.68-5.04zm13.93 0a3 3 0 0 0-2.62 1.32l-.26-1.16H68.1v12.43h1.64v-4.39c1.15 1.46 3.8 1.57 5.09-.07 1.68-2.16 1.33-8.14-2.6-8.14zm839.26 4.57v.18c0 2.5 1.4 4.57 4.02 4.57 1.24 0 2.22-.43 2.94-1.28 1.21-1.44 1.06-3.37 1.08-3.47 0-6.19-8.04-6.12-8.04 0zM60.35 19.1v.22h-4.14l-.02-.04c.43-3.34 4.16-3.1 4.16-.18zm857.55 1.04c0 .12.1 1.44-.6 2.53-.4.62-1 .93-1.78.93-2.7 0-2.86-4.14-1.79-5.81 1.04-1.61 4.17-1.4 4.17 2.35zM73.52 17.87c.75 1.22.88 3.63 0 4.88-.82 1.17-2.92 1.23-3.78-.33V18.1a2.18 2.18 0 0 1 3.78-.22zm378.02 165.9v12.94h1.63v-12.95h-1.63zm41.57.68c-4.06 0-5.3 3.72-3.08 5.55a7.3 7.3 0 0 0 3 1.35c1.41.34 2.82.86 2.82 2.32 0 .6-.24 1.06-.72 1.4-.48.36-1.13.53-1.96.53-1.54 0-2.97-.72-2.97-2.37h-1.56l-.02.04c-.11 4.61 8.87 4.9 8.87.38 0-2.13-1.85-3.17-3.9-3.68-1.35-.34-3-.87-3-2.24 0-2.65 5.24-2.87 5.24.38h1.56l.02-.05c.05-1.78-1.48-3.6-4.3-3.6zm-11.43.18l-5.05 13.12h1.4l5.03-13.13h-1.38zm-40.86 0v12.08h1.64v-4.85c2.2-.13 4.43.45 5.99-.98a3.41 3.41 0 0 0 1.07-2.64c0-1.08-.36-1.95-1.07-2.62-1.63-1.51-3.9-.81-7.63-1zm59.27.93v2.17h-1.43v1.21h1.43c.13 4.77-.35 6.38.59 7.34.59.6 1.51.72 2.3.51.23-.06.4-.14.53-.24l-.22-1.12c-.16.06-.42.11-.61.11-.7 0-.96-.44-.96-1.14v-5.46h1.7v-1.2h-1.7v-2.18h-1.63zm-57.63.35c2.38.12 3.89-.35 4.81.67.82.9.82 2.45 0 3.34-.91 1-2.4.54-4.81.66v-4.67zm13.37 4.26l.02.05h1.56c0-1.38 2.21-1.8 3.13-.9.68.64.43 1.51.48 2.13-.59.08-5.64-.65-5.64 2.74 0 3.2 3.98 3.54 5.64 1.18.02.45.09.85.19 1.34h1.68a6.17 6.17 0 0 1-.23-1.8c-.18-3.65.5-5.37-.93-6.57-2.04-1.7-6.02-.45-5.9 1.83zm49.23 1.97v.18c0 4.85 4.9 5.73 6.96 3.29 1.24-1.47 1.06-3.32 1.08-3.47 0-6.19-8.04-6.11-8.04 0zm11.55-3.25l-.25-1.16h-1.26v12.44h1.64v-4.4c.63.8 1.5 1.12 2.52 1.12 4.09 0 4.12-5.8 2.57-8-1.2-1.71-3.96-1.85-5.22 0zm-52.67-1.16l3.34 8.8c-.53 1.21-.85 2.43-1.8 2.43l-.74-.04-.16 1.28c.98.24 2 .2 2.7-.53 1.13-1.2.88-1.7 4.74-11.94h-1.81l-2.21 6.78h-.05l-.3-1.13-1.88-5.65h-1.83zm46.92 2.06c1.1 1.7.89 5.81-1.77 5.81a2 2 0 0 1-1.8-.93 5.18 5.18 0 0 1 0-4.88c.4-.63 2.75-1.26 3.57 0zm9.66.08c.7 1.14.59 2.57.6 2.69 0 3.61-3.34 3.74-4.38 1.86v-4.33a2.18 2.18 0 0 1 3.78-.22zm-59.5 2.68v1.46c-.49 1.33-2.78 1.94-3.63 1.15-.5-.46-.59-1.44.22-2.1.88-.75 2.03-.43 3.41-.5zm-34.59 12.7a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h107.14a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18H426.43zm0 .5h107.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68H426.43a2.69 2.69 0 0 1-2.68-2.68v-15.14c0-1.47 1.2-2.68 2.68-2.68zm9.14 7.2c0 4.41 7.67 2.6 7.67 5.73 0 2.02-3.07 2.5-4.9 1.7-1.01-.44-1.56-1.13-1.72-2.44l-1.52.13c.12 4.73 7.18 5.3 9.13 2.3.99-1.53.8-3.73-1.52-4.8-2.37-1.08-5.6-.71-5.6-2.72 0-.5.23-.93.67-1.3.45-.35 1.16-.53 2.13-.53 1.72 0 2.79.66 2.97 2.34l1.54-.12a3.5 3.5 0 0 0-2.19-3.2c-2.7-1.14-6.66-.15-6.66 2.92zm35.16-2.61c-3.88 2.13-3.51 8.94-.27 11.05 1.57 1.02 4.58 1.2 6.42-.24.87-.7 1.48-1.7 1.82-3.03l-1.61-.4c-.45 2.08-1.8 3.1-3.57 3.1-2.26 0-3.92-1.55-3.92-5.02 0-2.76 1.26-4.81 4.05-4.81 1.73 0 2.72.87 3.25 2.54l1.59-.38c-1.07-3.69-5.03-4.3-7.76-2.81zm-23.74-.53v12.17h1.6v-4.95c2.13-.12 5.3.45 6.7-1.07 1.68-1.83 1.34-5.5-1.86-6.03-1.04-.19-2.53-.1-6.44-.12zm13.41 0l-4.67 12.17h1.7l1.35-3.68h5.08l1.42 3.68h1.84l-4.98-12.17h-1.74zm20.31 0v12.17h9.09v-1.43h-7.48v-4.15h6.74v-1.43h-6.74v-3.73h7.2v-1.43h-8.8zm11.24 0v12.17c4.12-.05 6.47.3 7.94-.8 1.75-1.31 1.92-4.8-1.04-5.67 2.52-1.25 2.03-4.4-.1-5.33-1.32-.58-3-.3-6.8-.37zm14.75 0l-4.68 12.17h1.71l1.34-3.68h5.09l1.41 3.68h1.84l-4.98-12.17h-1.74zm8.02 0v12.17h1.62v-5.4c3.28.02 3.33-.46 5.47 2.87l1.61 2.53h2.03l-2.12-3.31c-.99-1.53-1.66-1.91-2.3-2.23 4.74-.65 3.9-5.4 1.56-6.3-1.33-.52-3.37-.26-7.87-.33zm-53.49 1.28c.4 1.43 1.08 3.05 2.14 5.9h-4.13c1.06-2.95 1.61-3.98 2-5.9zm46.3 0c.4 1.45 1.1 3.1 2.13 5.9h-4.13c1.06-2.95 1.62-4.01 2-5.9zm8.8.07h3.86c1.88 0 2.6.9 2.6 1.97 0 .77-.42 1.51-1.27 1.82-.98.36-2.32.19-5.19.23v-4.02zm-67.73.09c2.5.02 3.98-.06 4.62.1 1.61.45 1.8 2.73.74 3.67-.98.87-3 .48-5.36.58v-4.35zm44.96 0c3.15-.01 4.5-.18 5.12.8.38.6.4 1.55-.02 2.13-.7.94-2.04.73-5.1.74v-3.67zm0 5.1c2.2.05 3.64-.1 4.6.21 1.7.56 1.64 2.86.46 3.6-.62.38-1.35.39-2.02.39h-3.04v-4.2zm395.37 43.44a3.19 3.19 0 0 0-3.18 3.19v15.13a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18v-15.13a3.19 3.19 0 0 0-3.18-3.19h-15.14zm-803 .08a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18H85.93zm803 .42h15.14c1.48 0 2.68 1.2 2.68 2.69v15.13c0 1.48-1.2 2.68-2.68 2.68h-15.14a2.69 2.69 0 0 1-2.68-2.68v-15.13c0-1.48 1.2-2.69 2.68-2.69zm-803 .08h15.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68H85.93a2.69 2.69 0 0 1-2.68-2.68v-15.14c0-1.48 1.2-2.68 2.68-2.68zm-29.46 4.54c-1.85 1.95-1.17 4.34-1.31 6.08 0 5.74 7.36 6.1 9.25 3.2v-4.44h-4.28v1.29h2.64v2.74c-.54.67-1.68.9-2.62.9-.97 0-1.78-.35-2.4-1.05-1.38-1.51-.82-3.3-.95-5.15 0-1.99 1.1-3.67 3.08-3.67 1.82 0 2.8 1.01 2.9 2.42h1.56l.01-.05c-.06-3.91-5.52-4.74-7.87-2.27zm801.06 4.31v2.5c0 5.74 7.35 6.12 9.26 3.19v-4.43h-4.29v1.28h2.65v2.74c-.54.67-1.68.9-2.62.9-2 0-3.36-1.59-3.36-3.7v-2.5c0-4.8 5.74-4.6 5.98-1.25h1.56l.02-.05c-.08-4.96-9.2-5.26-9.2 1.33zm-786.97-2.58c-4.35 0-4.92 5.68-2.92 8.04.72.85 1.7 1.28 2.94 1.28 4.4 0 4.91-5.68 2.93-8.03a3.65 3.65 0 0 0-2.95-1.3zm798.37 5.3c.02.17-.17 1.98 1.08 3.46a4 4 0 0 0 5.88 0c1.4-1.64 1.52-4.94 0-6.75-2.03-2.41-6.96-1.62-6.96 3.29zm-798.37-4.01c2.66 0 2.9 4.11 1.8 5.81a2.16 2.16 0 0 1-3.57 0c-1.08-1.66-.9-5.81 1.77-5.81zm828.12.12v2H890v1h8.68v1.99l4.32-2.5-4.32-2.49zm-807.36.07l-4.32 2.5 4.32 2.5v-2H100v-1h-8.68v-2zm783.4 1.47c.72 1.1.6 2.4.62 2.53 0 1.67-.67 3.28-2.39 3.28a2 2 0 0 1-1.79-.93 5.18 5.18 0 0 1 0-4.88 2.15 2.15 0 0 1 3.57 0zM473.25 407.25a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18h-15.14zm0 .5h15.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68h-15.14a2.69 2.69 0 0 1-2.68-2.68v-15.14c0-1.48 1.2-2.68 2.68-2.68zm-84.6 2.77v1.67h1.64v-1.67h-1.64zm4.28 0v12.95h1.64v-12.95h-1.64zm134.5.24v1.67h1.64v-1.67h-1.63zm-148.5.62v12.09h1.63v-5.35h5.51v-1.28h-5.51v-4.17h6.36v-1.29h-8zm98.1.43v12.17h1.6v-5.53h5.72v-1.43h-5.72v-3.77h6.6v-1.44h-8.2zm-79.42.51v2.17h-1.43v1.2h1.43c.13 4.77-.36 6.39.59 7.35.78.8 2.28.71 2.83.26l-.22-1.12c-.87.33-1.57.05-1.57-1.03v-5.45h1.7v-1.21h-1.7v-2.17h-1.63zm134.5.24v2.17h-1.43v1.21h1.43c.14 4.8-.35 6.38.6 7.34.81.84 2.32.68 2.82.27l-.21-1.12c-.88.33-1.57.02-1.57-1.03v-5.46h1.7v-1.2h-1.7v-2.18h-1.64zm-118.54 3.24l-.16-1.31h-1.46v8.98h1.64v-6.42c.69-1.59 2.3-1.07 2.61-1.12l.22-1.52c-.9-.29-2.1.02-2.85 1.39zm-9.83-.2c-1.33 1.47-1.12 3.4-1.14 3.55 0 5.1 5.34 5.29 7.27 3.38l-.64-1.06c-1.13 1.03-3.34 1.33-4.3.06a3.54 3.54 0 0 1-.66-2.13l.02-.04h5.83c-.06-.54.28-2.51-.93-3.94-1.12-1.32-3.79-1.68-5.45.18zm-15.09-1.11v8.98h1.64v-8.98h-1.64zm105.66 2.68l.02.05h1.56c0-1.72 3.61-2.07 3.61.34v.89c-1.18.07-3.15-.28-4.6.73-1.46 1.02-1.23 3.08-.3 3.99 1.14 1.12 3.63 1.01 4.9-.8.02.45.09.85.19 1.34h1.69c-.41-1.31-.14-2.35-.24-6.13 0-4.4-6.99-3.5-6.83-.41zm18.2-1.31c-1.24 1.48-1.06 3.33-1.07 3.46 0 6.07 8.04 6.2 8.04 0-.02-.14.17-1.98-1.08-3.47a3.97 3.97 0 0 0-5.89 0zm10.59.18l-.16-1.31h-1.46v8.98h1.63v-6.42c.7-1.6 2.3-1.07 2.62-1.12l.22-1.51c-1-.31-2.14.08-2.85 1.38zm14 2.99v.36c0 5.08 5.3 5.34 7.27 3.39l-.64-1.07c-.7.64-1.59.9-2.54.9-1.61 0-2.39-1.36-2.42-2.96l.02-.05h5.83v-1.02c0-5.84-7.52-5.06-7.52.45zm-34.52-4.3l3.35 8.98h1.24l3.3-8.98h-1.67l-2.06 6.33-.16.63h-.05l-.14-.63-2.13-6.33h-1.68zm24.86 0v8.98h1.63v-8.98h-1.63zm-119.47 1.52c.62.78.5 1.69.51 1.82h-4.14l-.02-.04c.1-.7.33-1.27.72-1.73a1.93 1.93 0 0 1 2.93-.05zm109.26.54a5.14 5.14 0 0 1 0 4.88c-1.03 1.6-4.16 1.42-4.16-2.35.01-.13-.1-1.44.6-2.53a2.15 2.15 0 0 1 3.56 0zm25.76 1.31v.22h-4.15l-.01-.04c.41-3.3 4.16-3.14 4.16-.18zm-43.48 1.45v1.46c-.49 1.32-2.78 1.95-3.64 1.15-.49-.46-.59-1.44.22-2.1.4-.34 2.03-.43 3.42-.5zm-203.15 4.2a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18h-15.14zm392 0a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18h-15.14zm-392 .5h15.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68h-15.14a2.69 2.69 0 0 1-2.68-2.68v-15.14c0-1.48 1.2-2.68 2.68-2.68zm392 0h15.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68h-15.14a2.69 2.69 0 0 1-2.68-2.68v-15.14c0-1.48 1.2-2.68 2.68-2.68zm-436.59 3.38l4.5 12.08h1.4l4.49-12.08h-1.77l-3.12 9.08-.28.95h-.05l-.27-.95-3.12-9.08h-1.78zm392 0l4.5 12.08h1.4l4.49-12.08h-1.77l-3.12 9.08-.28.95h-.05l-.27-.95-3.12-9.08h-1.78zm-340.34.37v8.68h-2l2.5 4.32 2.5-4.32h-2V428h-1zm392.5 0l-2.5 4.32h2V441h1v-8.68h2l-2.5-4.32zm-422.6.56v2.17h-1.43v1.21h1.43v5.46c0 .86.2 1.48.59 1.88.4.4.92.6 1.58.6.24 0 .48-.03.71-.09.24-.06.42-.14.54-.24l-.22-1.12a1.88 1.88 0 0 1-.61.11.95.95 0 0 1-.7-.26c-.17-.17-.26-.46-.26-.88v-5.46h1.7v-1.2h-1.7v-2.18h-1.63zm392 0v2.17h-1.43v1.21h1.43c.14 4.8-.35 6.38.59 7.34.79.8 2.29.72 2.83.27l-.22-1.12c-.16.06-.42.11-.61.11-.7 0-.95-.45-.95-1.14v-5.46h1.7v-1.2h-1.7v-2.18h-1.64zm-268.57.94V474h.5v-44.5h-.5zm110 0V474h.5v-44.5h-.5zm-239.99 1.06c-1.23 0-2.2.43-2.93 1.3a4.94 4.94 0 0 0-1.08 3.28v.18a4.9 4.9 0 0 0 1.09 3.28c.72.86 1.7 1.29 2.94 1.29s2.22-.43 2.94-1.28a4.92 4.92 0 0 0 1.08-3.29v-.18c0-1.33-.37-2.43-1.09-3.29a3.66 3.66 0 0 0-2.95-1.29zm15.4 0c-1.05 0-1.95.43-2.71 1.28a4.6 4.6 0 0 0-1.14 3.19v.36c0 1.33.37 2.41 1.1 3.25a3.79 3.79 0 0 0 2.99 1.25c.75 0 1.38-.11 1.9-.32.54-.21.96-.48 1.28-.8l-.64-1.06c-.3.28-.66.5-1.08.65-.42.16-.9.24-1.46.24-.76 0-1.35-.28-1.77-.83a3.53 3.53 0 0 1-.65-2.13l.02-.04h5.83v-1.02c0-1.22-.31-2.2-.93-2.92-.62-.73-1.54-1.1-2.75-1.1zm376.6 0c-4.3 0-4.92 5.68-2.92 8.04.72.86 1.7 1.29 2.94 1.29 4.38 0 4.92-5.68 2.93-8.04a3.66 3.66 0 0 0-2.95-1.29zm12.69 1.28c-1.33 1.48-1.12 3.4-1.14 3.56 0 5.1 5.34 5.29 7.27 3.38l-.64-1.07c-1.5 1.37-4.9 1.53-4.96-2.06l.02-.05h5.83c-.05-.53.28-2.5-.93-3.94-1.12-1.32-3.78-1.68-5.45.18zm-404.69.01a2 2 0 0 1 1.8.94c.4.62.6 1.4.6 2.35v.18c0 .95-.2 1.73-.6 2.35-.4.62-1 .93-1.78.93a2 2 0 0 1-1.79-.93c-.4-.62-.6-1.4-.6-2.35v-.18c0-.94.2-1.73.6-2.35.4-.63 1-.94 1.77-.94zm15.39 0c.68 0 1.19.22 1.53.65.34.43.51.96.51 1.6v.22h-4.14l-.02-.04c.1-.7.33-1.28.72-1.74.38-.46.85-.69 1.4-.69zm376.61 0c2.67 0 2.9 4.12 1.8 5.82-.4.62-1 .93-1.78.93a2 2 0 0 1-1.79-.93c-1.09-1.68-.87-5.82 1.77-5.82zm16.92.65c.64.79.5 1.66.51 1.82h-4.14l-.01-.05c.08-.69.32-1.27.7-1.73a1.93 1.93 0 0 1 2.94-.04zm-246.65 8.75a3.19 3.19 0 0 0-3.19 3.18v15.14a3.19 3.19 0 0 0 3.19 3.18h15.13a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18h-15.13zm92.71 0a3.19 3.19 0 0 0-3.18 3.18v15.14a3.19 3.19 0 0 0 3.18 3.18h15.14a3.19 3.19 0 0 0 3.18-3.18v-15.14a3.19 3.19 0 0 0-3.18-3.18h-15.14zm-92.71.5h15.13c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68h-15.13a2.69 2.69 0 0 1-2.69-2.68v-15.14c0-1.48 1.2-2.68 2.69-2.68zm92.71 0h15.14c1.48 0 2.68 1.2 2.68 2.68v15.14c0 1.48-1.2 2.68-2.68 2.68h-15.14a2.69 2.69 0 0 1-2.68-2.68v-15.14c0-1.48 1.2-2.68 2.68-2.68zm53.24 3.01v12.95h1.64v-12.95h-1.64zm28.75 0v4.94a2.94 2.94 0 0 0-2.44-1.13c-3.94 0-4.21 6.05-2.59 8.13 1.16 1.49 3.86 1.74 5.14-.1l.19 1.11h1.33v-12.95h-1.63zm-166.68.85c-6.86 0-7.14 9.24-3.23 11.78.82.53 1.89.8 3.2.8 2.46 0 4.34-1.34 5.04-4.07l-1.61-.4c-.45 2.07-1.79 3.1-3.56 3.1-3.67 0-4.6-4.23-3.55-7.36.5-1.47 1.76-2.48 3.67-2.48 1.73 0 2.73.88 3.26 2.54l1.58-.37a4.68 4.68 0 0 0-4.8-3.54zm87.43.2v12.17c3.68-.04 6.12.3 7.8-.82 3.22-2.15 3.3-10.08-1.44-11.18-1.16-.27-2.87-.13-6.36-.17zm1.62 1.44c3.39.06 4.92-.42 6.16 1.62.8 1.3.77 3.89.3 5.28-.63 1.93-1.81 2.4-3.87 2.4h-2.6v-9.3zm40.66 2.82l-.11-1.34h-1.46v8.98h1.63v-6.55c.83-1.51 2.8-1.56 3.55-.77.31.33.47.9.47 1.68v5.64h1.64c-.17-4.73.45-6.96-.8-8.3a3.2 3.2 0 0 0-4.92.66zm-113.2-1.5c-4.31 0-4.94 5.65-2.92 8.03a4 4 0 0 0 5.88 0c2-2.35 1.42-8.04-2.95-8.04zm7.55 1.32l-.26-1.16h-1.25v12.43h1.64v-4.39c1.15 1.46 3.8 1.57 5.09-.07 1.04-1.35.91-3.2.93-3.31 0-5.57-4.63-5.74-6.15-3.5zm85.17-1.33c-1.23 0-2.2.43-2.93 1.3-2 2.39-1.42 8.03 2.95 8.03 1.24 0 2.22-.43 2.94-1.28 2.04-2.42 1.38-8.05-2.96-8.05zm36.48 0c-4.32 0-4.92 5.68-2.92 8.04a3.99 3.99 0 0 0 5.87 0c1.98-2.33 1.47-8.04-2.95-8.04zm6.18 2.61l.01.05h1.56c0-1.38 2.21-1.8 3.14-.9.68.64.43 1.51.48 2.13-1.18.07-3.15-.28-4.6.73-1.47 1.02-1.24 3.08-.3 3.99.48.48 1.2.72 2.13.72.56 0 1.1-.15 1.58-.44a3.8 3.8 0 0 0 1.2-1.08c0 .44.08.9.18 1.34H596c-.09-.28-.15-.58-.18-.88s-.05-.6-.05-.93c-.19-3.63.5-5.36-.93-6.56-2.02-1.69-6.02-.46-5.9 1.83zm-120.74-2.44l3.34 8.8c-.35.58-.68 2.43-1.8 2.43l-.73-.04-.17 1.28c3.57.87 3.43-1.82 7.45-12.47h-1.82l-2.2 6.78h-.06l-.29-1.13-1.9-5.65h-1.82zm83.31 0l2.6 8.98h1.32l1.71-5.47.36-1.52h.05l.38 1.52 1.73 5.47h1.32l2.6-8.98h-1.63l-1.4 5.71-.24 1.21h-.06l-.25-1.21-1.8-5.71h-1.32l-1.8 5.71-.22 1.09h-.05l-.2-1.09-1.48-5.71h-1.62zm-96.15 2.06c1.07 1.65.91 5.81-1.77 5.81-1.72 0-2.4-1.59-2.4-3.28v-.19c0-3.77 3.13-3.93 4.17-2.34zm92.71 0c.71 1.09.6 2.4.61 2.53 0 3.77-3.14 3.93-4.17 2.35a5.17 5.17 0 0 1 0-4.88 2.15 2.15 0 0 1 3.56 0zm37.09 2.34c-.01.13.1 1.45-.6 2.54-1.05 1.6-4.17 1.41-4.17-2.35.01-.13-.1-1.44.6-2.53 1.03-1.61 4.17-1.4 4.17 2.34zm-119.54.25c-.01.12.1 1.37-.6 2.37s-2.17 1.04-2.98.54c-.33-.21-.6-.5-.8-.87v-4.33c1.03-1.88 4.38-1.91 4.38 2.3zm138.1-2.28v4.2c-.9 1.73-3.03 1.51-3.76.44-.81-1.2-.7-3.66 0-4.88.77-1.32 2.86-1.36 3.77.24zm-9.59 2.45v1.46c-.26.72-1.26 1.5-2.53 1.5-1.67 0-1.88-1.62-.88-2.46.88-.74 2.03-.42 3.41-.5zM561.75 463v10.48h.5V463h-.5zm-111 .52V474h.5v-10.48h-.5z\");\n\nexport class HelpScreen {\n\tpublic hidden: boolean = true;\n\tpublic click?: { (): boolean };\n\tmouseDown(pos: MouseOffset, capture: boolean): boolean {\n\t\t// @ts-ignore\n\t\tconst _ = pos;\n\t\treturn capture && !this.hidden;\n\t}\n\tmouseMove(pos: MouseOffset, capture: boolean): string | undefined {\n\t\t// @ts-ignore\n\t\tconst _ = pos;\n\t\treturn capture && !this.hidden ? \"default\" : undefined;\n\t}\n\tmouseUp(pos: MouseOffset, capture: boolean): boolean {\n\t\t// @ts-ignore\n\t\tconst _ = pos;\n\t\tif (capture && !this.hidden && this.click !== undefined) {\n\t\t\treturn this.click();\n\t\t}\n\t\treturn false;\n\t}\n\n\trender(target: CanvasRenderingContext2D, delta: number) {\n\t\t// @ts-ignore\n\t\tconst _ = delta;\n\t\tif (!this.hidden) {\n\t\t\ttarget.fillStyle = \"#eeff55ee\";\n\t\t\ttarget.fill(HELP_SCREEN);\n\t\t}\n\t}\n}",null,null,null,null,null]}