{"version":3,"file":"static/js/main.b4624642.js","mappings":"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WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAGtFA,EAAK,GAAK,CACR,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WACpF,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AAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WACpF,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,YAGtFA,EAAK,GAAK,CACR,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAGtFA,EAAK,GAAK,CACR,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UACpF,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UACpF,UAAY,WAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,W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Y,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,QAAY,UAC5D,UAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,SAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,YAEtC,CACE,WAAY,WAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,UAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,UAAY,UAAY,UAAY,WAAY,UAC5D,WAAY,UAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,UAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,UAAY,UAAY,WAAY,WAAY,UAAY,WAC5D,SAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,UAAY,UAAY,WAAY,UAC5D,UAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,YAEtC,CACE,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,UAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,UAC5D,UAAY,WAAY,UAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,UAAY,SAAY,WAAY,WAC5D,WAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,UAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,UAAY,UAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,QAAY,UAAY,UAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,YAEtC,CACE,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,W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,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KACxC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAA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mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINiB,IAAK,CACHb,IAAK,EACLJ,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEA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","sources":["../node_modules/classnames/index.js","../node_modules/invariant/browser.js","../node_modules/prop-types-extra/lib/all.js","../node_modules/prop-types-extra/lib/utils/createChainableTypeChecker.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/warning/warning.js","../node_modules/openpgp/node_modules/@openpgp/web-stream-tools/lib/writer.js","../node_modules/openpgp/node_modules/@openpgp/web-stream-tools/lib/util.js","../node_modules/openpgp/node_modules/@openpgp/web-stream-tools/lib/node-conversions.js","../node_modules/openpgp/node_modules/@openpgp/web-stream-tools/lib/reader.js","../node_modules/openpgp/node_modules/@openpgp/web-stream-tools/lib/streams.js","../node_modules/openpgp/src/biginteger/native.interface.js","../node_modules/openpgp/src/biginteger/index.js","../node_modules/openpgp/src/enums.js","../node_modules/openpgp/src/util.js","../node_modules/openpgp/src/encoding/base64.js","../node_modules/openpgp/src/config/config.js","../node_modules/openpgp/src/encoding/armor.js","../node_modules/openpgp/src/type/keyid.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/aes.asm.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/other/utils.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/other/errors.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/aes.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/ecb.js","../node_modules/openpgp/src/crypto/cipher/aes.js","../node_modules/openpgp/src/crypto/cipher/des.js","../node_modules/openpgp/src/crypto/cipher/cast5.js","../node_modules/openpgp/src/crypto/cipher/twofish.js","../node_modules/openpgp/src/crypto/cipher/blowfish.js","../node_modules/openpgp/src/crypto/cipher/index.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/hash/sha1/sha1.asm.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/hash/hash.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/hash/sha1/sha1.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/hash/sha256/sha256.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/hash/sha256/sha256.asm.js","../node_modules/openpgp/node_modules/minimalistic-assert/index.js","../node_modules/openpgp/node_modules/inherits/inherits_browser.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/utils.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/common.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha/common.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha/256.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha/224.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha/512.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha/384.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/ripemd.js","../node_modules/openpgp/src/crypto/hash/md5.js","../node_modules/openpgp/src/crypto/hash/index.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/cfb.js","../node_modules/openpgp/src/crypto/cipher/getCipher.js","../node_modules/openpgp/src/crypto/mode/cfb.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/ctr.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/cbc.js","../node_modules/openpgp/src/crypto/cmac.js","../node_modules/openpgp/src/crypto/mode/eax.js","../node_modules/openpgp/src/crypto/mode/ocb.js","../node_modules/openpgp/node_modules/@openpgp/asmcrypto.js/dist_es8/aes/gcm.js","../node_modules/openpgp/src/crypto/mode/gcm.js","../node_modules/openpgp/src/crypto/mode/index.js","../node_modules/openpgp/node_modules/@openpgp/tweetnacl/nacl-fast-light.js","../node_modules/openpgp/src/crypto/random.js","../node_modules/openpgp/src/crypto/public_key/prime.js","../node_modules/openpgp/src/crypto/pkcs1.js","../node_modules/openpgp/src/crypto/public_key/rsa.js","../node_modules/openpgp/src/crypto/public_key/elgamal.js","../node_modules/openpgp/src/type/oid.js","../node_modules/openpgp/src/crypto/public_key/elliptic/indutnyKey.js","../node_modules/openpgp/src/packet/packet.js","../node_modules/openpgp/src/crypto/public_key/elliptic/oid_curves.js","../node_modules/openpgp/src/crypto/public_key/elliptic/ecdsa.js","../node_modules/openpgp/src/crypto/public_key/elliptic/eddsa_legacy.js","../node_modules/openpgp/src/crypto/public_key/elliptic/eddsa.js","../node_modules/openpgp/src/crypto/aes_kw.js","../node_modules/openpgp/src/crypto/pkcs5.js","../node_modules/openpgp/src/crypto/public_key/elliptic/ecdh.js","../node_modules/openpgp/src/crypto/hkdf.js","../node_modules/openpgp/src/crypto/public_key/elliptic/ecdh_x.js","../node_modules/openpgp/src/crypto/public_key/dsa.js","../node_modules/openpgp/src/crypto/public_key/index.js","../node_modules/openpgp/src/crypto/signature.js","../node_modules/openpgp/src/type/ecdh_symkey.js","../node_modules/openpgp/src/type/kdf_params.js","../node_modules/openpgp/src/type/ecdh_x_symkey.js","../node_modules/openpgp/src/crypto/crypto.js","../node_modules/openpgp/src/crypto/index.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/utils/common.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/constants.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/trees.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/adler32.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/crc32.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/messages.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/deflate.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/utils/strings.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/zstream.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/deflate.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/inffast.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/inftrees.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/inflate.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/zlib/gzheader.js","../node_modules/openpgp/node_modules/@openpgp/pako/lib/inflate.js","../node_modules/openpgp/node_modules/@openpgp/seek-bzip/lib/bitreader.js","../node_modules/openpgp/node_modules/@openpgp/seek-bzip/lib/stream.js","../node_modules/openpgp/node_modules/@openpgp/seek-bzip/lib/crc32.js","../node_modules/openpgp/node_modules/@openpgp/seek-bzip/lib/index.js","../node_modules/openpgp/src/packet/literal_data.js","../node_modules/openpgp/src/packet/signature.js","../node_modules/openpgp/src/packet/one_pass_signature.js","../node_modules/openpgp/src/packet/packetlist.js","../node_modules/openpgp/src/packet/compressed_data.js","../node_modules/openpgp/src/packet/sym_encrypted_integrity_protected_data.js","../node_modules/openpgp/src/packet/aead_encrypted_data.js","../node_modules/openpgp/src/packet/public_key_encrypted_session_key.js","../node_modules/openpgp/src/type/s2k.js","../node_modules/openpgp/src/packet/sym_encrypted_session_key.js","../node_modules/openpgp/src/packet/public_key.js","../node_modules/openpgp/src/packet/symmetrically_encrypted_data.js","../node_modules/openpgp/src/packet/marker.js","../node_modules/openpgp/src/packet/public_subkey.js","../node_modules/openpgp/src/packet/user_attribute.js","../node_modules/openpgp/src/packet/secret_key.js","../node_modules/openpgp/node_modules/email-addresses/lib/email-addresses.js","../node_modules/openpgp/src/packet/userid.js","../node_modules/openpgp/src/packet/secret_subkey.js","../node_modules/openpgp/src/packet/trust.js","../node_modules/openpgp/src/signature.js","../node_modules/openpgp/src/key/helper.js","../node_modules/openpgp/src/key/user.js","../node_modules/openpgp/src/key/subkey.js","../node_modules/openpgp/src/key/key.js","../node_modules/openpgp/src/key/public_key.js","../node_modules/openpgp/src/key/private_key.js","../node_modules/openpgp/src/key/factory.js","../node_modules/openpgp/src/message.js","../node_modules/openpgp/src/cleartext.js","../node_modules/openpgp/src/openpgp.js","../node_modules/openpgp/node_modules/@openpgp/web-stream-tools/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs","../node_modules/openpgp/node_modules/@mattiasbuelens/web-streams-adapter/dist/web-streams-adapter.mjs","../node_modules/openpgp/node_modules/bn.js/lib/bn.js","../node_modules/openpgp/src/biginteger/bn.interface.js","../node_modules/openpgp/node_modules/brorand/index.js","../node_modules/openpgp/node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/utils.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/curve/base.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/curve/short.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/curve/mont.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/curve/edwards.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/curve/index.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha/1.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/sha.js","../node_modules/openpgp/node_modules/hash.js/lib/hash/hmac.js","../node_modules/openpgp/node_modules/hash.js/lib/hash.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/precomputed/secp256k1.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/curves.js","../node_modules/openpgp/node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/ec/key.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/ec/signature.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/ec/index.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/eddsa/key.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/eddsa/signature.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic/eddsa/index.js","../node_modules/openpgp/node_modules/@openpgp/elliptic/lib/elliptic.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/react-bootstrap/esm/ThemeProvider.js","../node_modules/react-bootstrap/esm/Container.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/uncontrollable/lib/esm/utils.js","../node_modules/uncontrollable/lib/esm/hook.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/dom-helpers/esm/querySelectorAll.js","../node_modules/@restart/hooks/esm/useForceUpdate.js","../node_modules/@restart/hooks/esm/useMergedRefs.js","../node_modules/@restart/ui/esm/NavContext.js","../node_modules/@restart/ui/esm/SelectableContext.js","../node_modules/@restart/ui/esm/TabContext.js","../node_modules/@restart/ui/esm/DataKey.js","../node_modules/@restart/hooks/esm/useCommittedRef.js","../node_modules/@restart/hooks/esm/useEventCallback.js","../node_modules/@restart/ui/esm/Button.js","../node_modules/@restart/ui/esm/NavItem.js","../node_modules/@restart/ui/esm/Nav.js","../node_modules/react-bootstrap/esm/NavbarContext.js","../node_modules/react-bootstrap/esm/CardHeaderContext.js","../node_modules/react-bootstrap/esm/NavItem.js","../node_modules/@restart/hooks/esm/useCallbackRef.js","../node_modules/@restart/hooks/esm/useMounted.js","../node_modules/@restart/hooks/esm/usePrevious.js","../node_modules/@restart/hooks/esm/useIsomorphicEffect.js","../node_modules/@restart/hooks/esm/useResizeObserver.js","../node_modules/@restart/ui/esm/Anchor.js","../node_modules/react-bootstrap/esm/NavLink.js","../node_modules/react-bootstrap/esm/Nav.js","../node_modules/react-bootstrap/esm/NavbarBrand.js","../node_modules/dom-helpers/esm/ownerDocument.js","../node_modules/dom-helpers/esm/getComputedStyle.js","../node_modules/dom-helpers/esm/ownerWindow.js","../node_modules/dom-helpers/esm/hyphenate.js","../node_modules/dom-helpers/esm/hyphenateStyle.js","../node_modules/dom-helpers/esm/isTransform.js","../node_modules/dom-helpers/esm/css.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/dom-helpers/esm/canUseDOM.js","../node_modules/dom-helpers/esm/addEventListener.js","../node_modules/dom-helpers/esm/removeEventListener.js","../node_modules/dom-helpers/esm/listen.js","../node_modules/dom-helpers/esm/transitionEnd.js","../node_modules/dom-helpers/esm/triggerEvent.js","../node_modules/react-bootstrap/esm/transitionEndListener.js","../node_modules/react-bootstrap/esm/createChainedFunction.js","../node_modules/react-bootstrap/esm/triggerBrowserReflow.js","../node_modules/react-bootstrap/esm/TransitionWrapper.js","../node_modules/react-bootstrap/esm/safeFindDOMNode.js","../node_modules/react-bootstrap/esm/Collapse.js","../node_modules/react-bootstrap/esm/NavbarCollapse.js","../node_modules/react-bootstrap/esm/NavbarToggle.js","../node_modules/@restart/hooks/esm/useMediaQuery.js","../node_modules/@restart/hooks/esm/useBreakpoint.js","../node_modules/dom-helpers/esm/activeElement.js","../node_modules/dom-helpers/esm/contains.js","../node_modules/@restart/hooks/esm/useWillUnmount.js","../node_modules/@restart/hooks/esm/useUpdatedRef.js","../node_modules/@restart/ui/esm/ModalManager.js","../node_modules/@restart/ui/esm/getScrollbarWidth.js","../node_modules/@restart/ui/esm/useWindow.js","../node_modules/@restart/ui/esm/useWaitForDOMRef.js","../node_modules/@restart/ui/esm/NoopTransition.js","../node_modules/@restart/ui/esm/ImperativeTransition.js","../node_modules/@restart/ui/esm/Modal.js","../node_modules/@restart/ui/esm/utils.js","../node_modules/react-bootstrap/esm/Fade.js","../node_modules/react-bootstrap/esm/OffcanvasBody.js","../node_modules/react-bootstrap/esm/OffcanvasToggling.js","../node_modules/react-bootstrap/esm/ModalContext.js","../node_modules/react-bootstrap/esm/CloseButton.js","../node_modules/react-bootstrap/esm/AbstractModalHeader.js","../node_modules/react-bootstrap/esm/OffcanvasHeader.js","../node_modules/react-bootstrap/esm/divWithClassName.js","../node_modules/react-bootstrap/esm/OffcanvasTitle.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/react-bootstrap/esm/BootstrapModalManager.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/hasClass.js","../node_modules/react-bootstrap/esm/Offcanvas.js","../node_modules/react-bootstrap/esm/NavbarOffcanvas.js","../node_modules/react-bootstrap/esm/NavbarText.js","../node_modules/react-bootstrap/esm/Navbar.js","../node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.js","../node_modules/@restart/ui/esm/DropdownContext.js","../node_modules/dequal/dist/index.mjs","../node_modules/@restart/hooks/esm/useSafeState.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@restart/ui/esm/popper.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@restart/ui/esm/usePopper.js","../node_modules/@restart/ui/esm/useClickOutside.js","../node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.js","../node_modules/@restart/ui/esm/DropdownMenu.js","../packages/@react-aria/ssr/src/SSRProvider.tsx","../node_modules/@restart/ui/esm/DropdownToggle.js","../node_modules/@restart/ui/esm/DropdownItem.js","../node_modules/@restart/ui/esm/Dropdown.js","../node_modules/@restart/hooks/esm/useEventListener.js","../node_modules/react-bootstrap/esm/DropdownContext.js","../node_modules/react-bootstrap/esm/DropdownDivider.js","../node_modules/react-bootstrap/esm/DropdownHeader.js","../node_modules/react-bootstrap/esm/DropdownItem.js","../node_modules/react-bootstrap/esm/DropdownItemText.js","../node_modules/react-bootstrap/esm/InputGroupContext.js","../node_modules/react-bootstrap/esm/useWrappedRefWithWarning.js","../node_modules/react-bootstrap/esm/DropdownMenu.js","../node_modules/react-bootstrap/esm/Button.js","../node_modules/react-bootstrap/esm/DropdownToggle.js","../node_modules/react-bootstrap/esm/Dropdown.js","../node_modules/react-bootstrap/esm/NavDropdown.js","service/AuthService.tsx","service/FetchService.tsx","pages/Layout.tsx","../node_modules/react-bootstrap/esm/Row.js","../node_modules/react-bootstrap/esm/Col.js","../node_modules/react-bootstrap/esm/AlertHeading.js","../node_modules/react-bootstrap/esm/AlertLink.js","../node_modules/react-bootstrap/esm/Alert.js","../node_modules/react-bootstrap/esm/Feedback.js","../node_modules/react-bootstrap/esm/FormContext.js","../node_modules/react-bootstrap/esm/FormCheckInput.js","../node_modules/react-bootstrap/esm/FormCheckLabel.js","../node_modules/react-bootstrap/esm/FormCheck.js","../node_modules/react-bootstrap/esm/ElementChildren.js","../node_modules/react-bootstrap/esm/FormControl.js","../node_modules/react-bootstrap/esm/FormFloating.js","../node_modules/react-bootstrap/esm/FormGroup.js","../node_modules/react-bootstrap/esm/FormLabel.js","../node_modules/react-bootstrap/esm/FormRange.js","../node_modules/react-bootstrap/esm/FormSelect.js","../node_modules/react-bootstrap/esm/FormText.js","../node_modules/react-bootstrap/esm/Switch.js","../node_modules/react-bootstrap/esm/FloatingLabel.js","../node_modules/react-bootstrap/esm/Form.js","components/Login/Login.tsx","pages/Home.tsx","components/Button/Button.tsx","components/ButtonGroup/ButtonGroup.tsx","components/ToDoList/ToDoList.tsx","components/Banner/Banner.tsx","pages/ToDo.tsx","../node_modules/react-bootstrap/esm/CardBody.js","../node_modules/react-bootstrap/esm/CardFooter.js","../node_modules/react-bootstrap/esm/CardHeader.js","../node_modules/react-bootstrap/esm/CardImg.js","../node_modules/react-bootstrap/esm/CardImgOverlay.js","../node_modules/react-bootstrap/esm/CardLink.js","../node_modules/react-bootstrap/esm/CardSubtitle.js","../node_modules/react-bootstrap/esm/CardText.js","../node_modules/react-bootstrap/esm/CardTitle.js","../node_modules/react-bootstrap/esm/Card.js","../node_modules/dom-helpers/esm/scrollbarSize.js","../node_modules/react-bootstrap/esm/ModalBody.js","../node_modules/react-bootstrap/esm/ModalDialog.js","../node_modules/react-bootstrap/esm/ModalFooter.js","../node_modules/react-bootstrap/esm/ModalHeader.js","../node_modules/react-bootstrap/esm/ModalTitle.js","../node_modules/react-bootstrap/esm/Modal.js","pages/Steg.tsx","pages/PGP.tsx","pages/CesarianShift.tsx","../node_modules/@restart/hooks/esm/useTimeout.js","../node_modules/react-bootstrap/esm/ToastFade.js","../node_modules/react-bootstrap/esm/ToastContext.js","../node_modules/react-bootstrap/esm/ToastHeader.js","../node_modules/react-bootstrap/esm/ToastBody.js","../node_modules/react-bootstrap/esm/Toast.js","webpack://todo/./src/components/CmdNode/CmdNode.module.css?6e61","components/CmdNode/CmdNode.js","components/CmdBuilder/CmdBuilder.js","webpack://todo/./src/components/CmdSaved/CmdSaved.module.css?401c","components/CmdSaved/CmdSaved.tsx","webpack://todo/./src/components/CmdSavedList/CmdSavedList.module.css?c8d7","components/CmdSavedList/CmdSavedList.tsx","pages/BuildCmd.tsx","components/ResumeBuilder/Types.tsx","components/ResumeBuilder/MyResumeData.tsx","components/ResumeBuilder/ResumeParser.tsx","pages/ResumeBuilder.tsx","pages/Projects.tsx","pages/UrlShortener.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = all;\n\nvar _createChainableTypeChecker = require('./utils/createChainableTypeChecker');\n\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction all() {\n for (var _len = arguments.length, validators = Array(_len), _key = 0; _key < _len; _key++) {\n validators[_key] = arguments[_key];\n }\n\n function allPropTypes() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var error = null;\n\n validators.forEach(function (validator) {\n if (error != null) {\n return;\n }\n\n var result = validator.apply(undefined, args);\n if (result != null) {\n error = result;\n }\n });\n\n return error;\n }\n\n return (0, _createChainableTypeChecker2.default)(allPropTypes);\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createChainableTypeChecker;\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n// Mostly taken from ReactPropTypes.\n\nfunction createChainableTypeChecker(validate) {\n function checkType(isRequired, props, propName, componentName, location, propFullName) {\n var componentNameSafe = componentName || '<>';\n var propFullNameSafe = propFullName || propName;\n\n if (props[propName] == null) {\n if (isRequired) {\n return new Error('Required ' + location + ' `' + propFullNameSafe + '` was not specified ' + ('in `' + componentNameSafe + '`.'));\n }\n\n return null;\n }\n\n for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n args[_key - 6] = arguments[_key];\n }\n\n return validate.apply(undefined, [props, propName, componentNameSafe, location, propFullNameSafe].concat(args));\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n}\nmodule.exports = exports['default'];","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","const doneWritingPromise = Symbol('doneWritingPromise');\nconst doneWritingResolve = Symbol('doneWritingResolve');\nconst doneWritingReject = Symbol('doneWritingReject');\n\nconst readingIndex = Symbol('readingIndex');\n\nclass ArrayStream extends Array {\n constructor() {\n super();\n this[doneWritingPromise] = new Promise((resolve, reject) => {\n this[doneWritingResolve] = resolve;\n this[doneWritingReject] = reject;\n });\n this[doneWritingPromise].catch(() => {});\n }\n}\n\nArrayStream.prototype.getReader = function() {\n if (this[readingIndex] === undefined) {\n this[readingIndex] = 0;\n }\n return {\n read: async () => {\n await this[doneWritingPromise];\n if (this[readingIndex] === this.length) {\n return { value: undefined, done: true };\n }\n return { value: this[this[readingIndex]++], done: false };\n }\n };\n};\n\nArrayStream.prototype.readToEnd = async function(join) {\n await this[doneWritingPromise];\n const result = join(this.slice(this[readingIndex]));\n this.length = 0;\n return result;\n};\n\nArrayStream.prototype.clone = function() {\n const clone = new ArrayStream();\n clone[doneWritingPromise] = this[doneWritingPromise].then(() => {\n clone.push(...this);\n });\n return clone;\n};\n\n/**\n * Check whether data is an ArrayStream\n * @param {Any} input data to check\n * @returns {boolean}\n */\nfunction isArrayStream(input) {\n return input && input.getReader && Array.isArray(input);\n}\n\n/**\n * A wrapper class over the native WritableStreamDefaultWriter.\n * It also lets you \"write data to\" array streams instead of streams.\n * @class\n */\nfunction Writer(input) {\n if (!isArrayStream(input)) {\n const writer = input.getWriter();\n const releaseLock = writer.releaseLock;\n writer.releaseLock = () => {\n writer.closed.catch(function() {});\n releaseLock.call(writer);\n };\n return writer;\n }\n this.stream = input;\n}\n\n/**\n * Write a chunk of data.\n * @returns {Promise}\n * @async\n */\nWriter.prototype.write = async function(chunk) {\n this.stream.push(chunk);\n};\n\n/**\n * Close the stream.\n * @returns {Promise}\n * @async\n */\nWriter.prototype.close = async function() {\n this.stream[doneWritingResolve]();\n};\n\n/**\n * Error the stream.\n * @returns {Promise}\n * @async\n */\nWriter.prototype.abort = async function(reason) {\n this.stream[doneWritingReject](reason);\n return reason;\n};\n\n/**\n * Release the writer's lock.\n * @returns {undefined}\n * @async\n */\nWriter.prototype.releaseLock = function() {};\n\n\nexport { ArrayStream, isArrayStream, Writer, doneWritingPromise };\n","import * as streams from './streams';\nimport { isArrayStream } from './writer';\n\nconst isNode = typeof globalThis.process === 'object' &&\n typeof globalThis.process.versions === 'object';\n\nconst NodeReadableStream = isNode && require('stream').Readable;\n\n/**\n * Check whether data is a Stream, and if so of which type\n * @param {Any} input data to check\n * @returns {'web'|'ponyfill'|'node'|'array'|'web-like'|false}\n */\nfunction isStream(input) {\n if (isArrayStream(input)) {\n return 'array';\n }\n if (globalThis.ReadableStream && globalThis.ReadableStream.prototype.isPrototypeOf(input)) {\n return 'web';\n }\n if (streams.ReadableStream && streams.ReadableStream.prototype.isPrototypeOf(input)) {\n return 'ponyfill';\n }\n if (NodeReadableStream && NodeReadableStream.prototype.isPrototypeOf(input)) {\n return 'node';\n }\n if (input && input.getReader) {\n return 'web-like';\n }\n return false;\n}\n\n/**\n * Check whether data is a Uint8Array\n * @param {Any} input data to check\n * @returns {Boolean}\n */\nfunction isUint8Array(input) {\n return Uint8Array.prototype.isPrototypeOf(input);\n}\n\n/**\n * Concat Uint8Arrays\n * @param {Array} Array of Uint8Arrays to concatenate\n * @returns {Uint8array} Concatenated array\n */\nfunction concatUint8Array(arrays) {\n if (arrays.length === 1) return arrays[0];\n\n let totalLength = 0;\n for (let i = 0; i < arrays.length; i++) {\n if (!isUint8Array(arrays[i])) {\n throw new Error('concatUint8Array: Data must be in the form of a Uint8Array');\n }\n\n totalLength += arrays[i].length;\n }\n\n const result = new Uint8Array(totalLength);\n let pos = 0;\n arrays.forEach(function (element) {\n result.set(element, pos);\n pos += element.length;\n });\n\n return result;\n}\n\nexport { isNode, isStream, isArrayStream, isUint8Array, concatUint8Array };\n","import { isNode } from './util';\nimport * as streams from './streams';\n\nconst NodeBuffer = isNode && require('buffer').Buffer;\nconst NodeReadableStream = isNode && require('stream').Readable;\n\n/**\n * Web / node stream conversion functions\n * From https://github.com/gwicke/node-web-streams\n */\n\nlet nodeToWeb;\nlet webToNode;\n\nif (NodeReadableStream) {\n\n /**\n * Convert a Node Readable Stream to a Web ReadableStream\n * @param {Readable} nodeStream\n * @returns {ReadableStream}\n */\n nodeToWeb = function(nodeStream) {\n let canceled = false;\n return new streams.ReadableStream({\n start(controller) {\n nodeStream.pause();\n nodeStream.on('data', chunk => {\n if (canceled) {\n return;\n }\n if (NodeBuffer.isBuffer(chunk)) {\n chunk = new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n controller.enqueue(chunk);\n nodeStream.pause();\n });\n nodeStream.on('end', () => {\n if (canceled) {\n return;\n }\n controller.close();\n });\n nodeStream.on('error', e => controller.error(e));\n },\n pull() {\n nodeStream.resume();\n },\n cancel(reason) {\n canceled = true;\n nodeStream.destroy(reason);\n }\n });\n };\n\n\n class NodeReadable extends NodeReadableStream {\n constructor(webStream, options) {\n super(options);\n this._reader = streams.getReader(webStream);\n }\n\n async _read(size) {\n try {\n while (true) {\n const { done, value } = await this._reader.read();\n if (done) {\n this.push(null);\n break;\n }\n if (!this.push(value)) {\n break;\n }\n }\n } catch (e) {\n this.destroy(e);\n }\n }\n\n async _destroy(error, callback) {\n this._reader.cancel(error).then(callback, callback);\n }\n }\n\n /**\n * Convert a Web ReadableStream to a Node Readable Stream\n * @param {ReadableStream} webStream\n * @param {Object} options\n * @returns {Readable}\n */\n webToNode = function(webStream, options) {\n return new NodeReadable(webStream, options);\n };\n\n}\n\nexport { nodeToWeb, webToNode };\n","import * as streams from './streams';\nimport { isUint8Array } from './util';\n\nconst doneReadingSet = new WeakSet();\nconst externalBuffer = Symbol('externalBuffer');\n\n/**\n * A wrapper class over the native ReadableStreamDefaultReader.\n * This additionally implements pushing back data on the stream, which\n * lets us implement peeking and a host of convenience functions.\n * It also lets you read data other than streams, such as a Uint8Array.\n * @class\n */\nfunction Reader(input) {\n this.stream = input;\n if (input[externalBuffer]) {\n this[externalBuffer] = input[externalBuffer].slice();\n }\n if (streams.isArrayStream(input)) {\n const reader = input.getReader();\n this._read = reader.read.bind(reader);\n this._releaseLock = () => {};\n this._cancel = async () => {};\n return;\n }\n let streamType = streams.isStream(input);\n if (streamType === 'node') {\n input = streams.nodeToWeb(input);\n }\n if (streamType) {\n const reader = input.getReader();\n this._read = reader.read.bind(reader);\n this._releaseLock = () => {\n reader.closed.catch(function() {});\n reader.releaseLock();\n };\n this._cancel = reader.cancel.bind(reader);\n return;\n }\n let doneReading = false;\n this._read = async () => {\n if (doneReading || doneReadingSet.has(input)) {\n return { value: undefined, done: true };\n }\n doneReading = true;\n return { value: input, done: false };\n };\n this._releaseLock = () => {\n if (doneReading) {\n try {\n doneReadingSet.add(input);\n } catch(e) {}\n }\n };\n}\n\n/**\n * Read a chunk of data.\n * @returns {Promise} Either { done: false, value: Uint8Array | String } or { done: true, value: undefined }\n * @async\n */\nReader.prototype.read = async function() {\n if (this[externalBuffer] && this[externalBuffer].length) {\n const value = this[externalBuffer].shift();\n return { done: false, value };\n }\n return this._read();\n};\n\n/**\n * Allow others to read the stream.\n */\nReader.prototype.releaseLock = function() {\n if (this[externalBuffer]) {\n this.stream[externalBuffer] = this[externalBuffer];\n }\n this._releaseLock();\n};\n\n/**\n * Cancel the stream.\n */\nReader.prototype.cancel = function(reason) {\n return this._cancel(reason);\n};\n\n/**\n * Read up to and including the first \\n character.\n * @returns {Promise}\n * @async\n */\nReader.prototype.readLine = async function() {\n let buffer = [];\n let returnVal;\n while (!returnVal) {\n let { done, value } = await this.read();\n value += '';\n if (done) {\n if (buffer.length) return streams.concat(buffer);\n return;\n }\n const lineEndIndex = value.indexOf('\\n') + 1;\n if (lineEndIndex) {\n returnVal = streams.concat(buffer.concat(value.substr(0, lineEndIndex)));\n buffer = [];\n }\n if (lineEndIndex !== value.length) {\n buffer.push(value.substr(lineEndIndex));\n }\n }\n this.unshift(...buffer);\n return returnVal;\n};\n\n/**\n * Read a single byte/character.\n * @returns {Promise}\n * @async\n */\nReader.prototype.readByte = async function() {\n const { done, value } = await this.read();\n if (done) return;\n const byte = value[0];\n this.unshift(streams.slice(value, 1));\n return byte;\n};\n\n/**\n * Read a specific amount of bytes/characters, unless the stream ends before that amount.\n * @returns {Promise}\n * @async\n */\nReader.prototype.readBytes = async function(length) {\n const buffer = [];\n let bufferLength = 0;\n while (true) {\n const { done, value } = await this.read();\n if (done) {\n if (buffer.length) return streams.concat(buffer);\n return;\n }\n buffer.push(value);\n bufferLength += value.length;\n if (bufferLength >= length) {\n const bufferConcat = streams.concat(buffer);\n this.unshift(streams.slice(bufferConcat, length));\n return streams.slice(bufferConcat, 0, length);\n }\n }\n};\n\n/**\n * Peek (look ahead) a specific amount of bytes/characters, unless the stream ends before that amount.\n * @returns {Promise}\n * @async\n */\nReader.prototype.peekBytes = async function(length) {\n const bytes = await this.readBytes(length);\n this.unshift(bytes);\n return bytes;\n};\n\n/**\n * Push data to the front of the stream.\n * Data must have been read in the last call to read*.\n * @param {...(Uint8Array|String|Undefined)} values\n */\nReader.prototype.unshift = function(...values) {\n if (!this[externalBuffer]) {\n this[externalBuffer] = [];\n }\n if (\n values.length === 1 && isUint8Array(values[0]) &&\n this[externalBuffer].length && values[0].length &&\n this[externalBuffer][0].byteOffset >= values[0].length\n ) {\n this[externalBuffer][0] = new Uint8Array(\n this[externalBuffer][0].buffer,\n this[externalBuffer][0].byteOffset - values[0].length,\n this[externalBuffer][0].byteLength + values[0].length\n );\n return;\n }\n this[externalBuffer].unshift(...values.filter(value => value && value.length));\n};\n\n/**\n * Read the stream to the end and return its contents, concatenated by the join function (defaults to streams.concat).\n * @param {Function} join\n * @returns {Promise} the return value of join()\n * @async\n */\nReader.prototype.readToEnd = async function(join=streams.concat) {\n const result = [];\n while (true) {\n const { done, value } = await this.read();\n if (done) break;\n result.push(value);\n }\n return join(result);\n};\n\nexport { Reader, externalBuffer };\n","import { isNode, isStream, isArrayStream, isUint8Array, concatUint8Array } from './util';\nimport { nodeToWeb, webToNode } from './node-conversions';\nimport { Reader, externalBuffer } from './reader';\nimport { ArrayStream, Writer } from './writer';\n\nlet { ReadableStream, WritableStream, TransformStream } = globalThis;\n\nlet toPonyfillReadable, toNativeReadable;\n\nasync function loadStreamsPonyfill() {\n if (TransformStream) {\n return;\n }\n\n const [ponyfill, adapter] = await Promise.all([\n import('web-streams-polyfill/ponyfill/es6'),\n import('@mattiasbuelens/web-streams-adapter')\n ]);\n\n ({ ReadableStream, WritableStream, TransformStream } = ponyfill);\n\n const { createReadableStreamWrapper } = adapter;\n\n if (globalThis.ReadableStream && ReadableStream !== globalThis.ReadableStream) {\n toPonyfillReadable = createReadableStreamWrapper(ReadableStream);\n toNativeReadable = createReadableStreamWrapper(globalThis.ReadableStream);\n }\n}\n\nconst NodeBuffer = isNode && require('buffer').Buffer;\n\n/**\n * Convert data to Stream\n * @param {ReadableStream|Uint8array|String} input data to convert\n * @returns {ReadableStream} Converted data\n */\nfunction toStream(input) {\n let streamType = isStream(input);\n if (streamType === 'node') {\n return nodeToWeb(input);\n }\n if (streamType === 'web' && toPonyfillReadable) {\n return toPonyfillReadable(input);\n }\n if (streamType) {\n return input;\n }\n return new ReadableStream({\n start(controller) {\n controller.enqueue(input);\n controller.close();\n }\n });\n}\n\n/**\n * Convert data to ArrayStream\n * @param {Object} input data to convert\n * @returns {ArrayStream} Converted data\n */\nfunction toArrayStream(input) {\n if (isStream(input)) {\n return input;\n }\n const stream = new ArrayStream();\n (async () => {\n const writer = getWriter(stream);\n await writer.write(input);\n await writer.close();\n })();\n return stream;\n}\n\n/**\n * Concat a list of Uint8Arrays, Strings or Streams\n * The caller should not mix Uint8Arrays with Strings, but may mix Streams with non-Streams.\n * @param {Array} Array of Uint8Arrays/Strings/Streams to concatenate\n * @returns {Uint8array|String|ReadableStream} Concatenated array\n */\nfunction concat(list) {\n if (list.some(stream => isStream(stream) && !isArrayStream(stream))) {\n return concatStream(list);\n }\n if (list.some(stream => isArrayStream(stream))) {\n return concatArrayStream(list);\n }\n if (typeof list[0] === 'string') {\n return list.join('');\n }\n if (NodeBuffer && NodeBuffer.isBuffer(list[0])) {\n return NodeBuffer.concat(list);\n }\n return concatUint8Array(list);\n}\n\n/**\n * Concat a list of Streams\n * @param {Array} list Array of Uint8Arrays/Strings/Streams to concatenate\n * @returns {ReadableStream} Concatenated list\n */\nfunction concatStream(list) {\n list = list.map(toStream);\n const transform = transformWithCancel(async function(reason) {\n await Promise.all(transforms.map(stream => cancel(stream, reason)));\n });\n let prev = Promise.resolve();\n const transforms = list.map((stream, i) => transformPair(stream, (readable, writable) => {\n prev = prev.then(() => pipe(readable, transform.writable, {\n preventClose: i !== list.length - 1\n }));\n return prev;\n }));\n return transform.readable;\n}\n\n/**\n * Concat a list of ArrayStreams\n * @param {Array} list Array of Uint8Arrays/Strings/ArrayStreams to concatenate\n * @returns {ArrayStream} Concatenated streams\n */\nfunction concatArrayStream(list) {\n const result = new ArrayStream();\n let prev = Promise.resolve();\n list.forEach((stream, i) => {\n prev = prev.then(() => pipe(stream, result, {\n preventClose: i !== list.length - 1\n }));\n return prev;\n });\n return result;\n}\n\n/**\n * Get a Reader\n * @param {ReadableStream|Uint8array|String} input\n * @returns {Reader}\n */\nfunction getReader(input) {\n return new Reader(input);\n}\n\n/**\n * Get a Writer\n * @param {WritableStream} input\n * @returns {Writer}\n */\nfunction getWriter(input) {\n return new Writer(input);\n}\n\n/**\n * Pipe a readable stream to a writable stream. Don't throw on input stream errors, but forward them to the output stream.\n * @param {ReadableStream|Uint8array|String} input\n * @param {WritableStream} target\n * @param {Object} (optional) options\n * @returns {Promise} Promise indicating when piping has finished (input stream closed or errored)\n * @async\n */\nasync function pipe(input, target, {\n preventClose = false,\n preventAbort = false,\n preventCancel = false\n} = {}) {\n if (isStream(input) && !isArrayStream(input)) {\n input = toStream(input);\n try {\n if (input[externalBuffer]) {\n const writer = getWriter(target);\n for (let i = 0; i < input[externalBuffer].length; i++) {\n await writer.ready;\n await writer.write(input[externalBuffer][i]);\n }\n writer.releaseLock();\n }\n await input.pipeTo(target, {\n preventClose,\n preventAbort,\n preventCancel\n });\n } catch(e) {}\n return;\n }\n input = toArrayStream(input);\n const reader = getReader(input);\n const writer = getWriter(target);\n try {\n while (true) {\n await writer.ready;\n const { done, value } = await reader.read();\n if (done) {\n if (!preventClose) await writer.close();\n break;\n }\n await writer.write(value);\n }\n } catch (e) {\n if (!preventAbort) await writer.abort(e);\n } finally {\n reader.releaseLock();\n writer.releaseLock();\n }\n}\n\n/**\n * Pipe a readable stream through a transform stream.\n * @param {ReadableStream|Uint8array|String} input\n * @param {Object} (optional) options\n * @returns {ReadableStream} transformed stream\n */\nfunction transformRaw(input, options) {\n const transformStream = new TransformStream(options);\n pipe(input, transformStream.writable);\n return transformStream.readable;\n}\n\n/**\n * Create a cancelable TransformStream.\n * @param {Function} cancel\n * @returns {TransformStream}\n */\nfunction transformWithCancel(cancel) {\n let pulled = false;\n let backpressureChangePromiseResolve;\n let outputController;\n return {\n readable: new ReadableStream({\n start(controller) {\n outputController = controller;\n },\n pull() {\n if (backpressureChangePromiseResolve) {\n backpressureChangePromiseResolve();\n } else {\n pulled = true;\n }\n },\n cancel\n }, {highWaterMark: 0}),\n writable: new WritableStream({\n write: async function(chunk) {\n outputController.enqueue(chunk);\n if (!pulled) {\n await new Promise(resolve => {\n backpressureChangePromiseResolve = resolve;\n });\n backpressureChangePromiseResolve = null;\n } else {\n pulled = false;\n }\n },\n close: outputController.close.bind(outputController),\n abort: outputController.error.bind(outputController)\n })\n };\n}\n\n/**\n * Transform a stream using helper functions which are called on each chunk, and on stream close, respectively.\n * @param {ReadableStream|Uint8array|String} input\n * @param {Function} process\n * @param {Function} finish\n * @returns {ReadableStream|Uint8array|String}\n */\nfunction transform(input, process = () => undefined, finish = () => undefined) {\n if (isArrayStream(input)) {\n const output = new ArrayStream();\n (async () => {\n const writer = getWriter(output);\n try {\n const data = await readToEnd(input);\n const result1 = process(data);\n const result2 = finish();\n let result;\n if (result1 !== undefined && result2 !== undefined) result = concat([result1, result2]);\n else result = result1 !== undefined ? result1 : result2;\n await writer.write(result);\n await writer.close();\n } catch (e) {\n await writer.abort(e);\n }\n })();\n return output;\n }\n if (isStream(input)) {\n return transformRaw(input, {\n async transform(value, controller) {\n try {\n const result = await process(value);\n if (result !== undefined) controller.enqueue(result);\n } catch(e) {\n controller.error(e);\n }\n },\n async flush(controller) {\n try {\n const result = await finish();\n if (result !== undefined) controller.enqueue(result);\n } catch(e) {\n controller.error(e);\n }\n }\n });\n }\n const result1 = process(input);\n const result2 = finish();\n if (result1 !== undefined && result2 !== undefined) return concat([result1, result2]);\n return result1 !== undefined ? result1 : result2;\n}\n\n/**\n * Transform a stream using a helper function which is passed a readable and a writable stream.\n * This function also maintains the possibility to cancel the input stream,\n * and does so on cancelation of the output stream, despite cancelation\n * normally being impossible when the input stream is being read from.\n * @param {ReadableStream|Uint8array|String} input\n * @param {Function} fn\n * @returns {ReadableStream}\n */\nfunction transformPair(input, fn) {\n if (isStream(input) && !isArrayStream(input)) {\n let incomingTransformController;\n const incoming = new TransformStream({\n start(controller) {\n incomingTransformController = controller;\n }\n });\n\n const pipeDonePromise = pipe(input, incoming.writable);\n\n const outgoing = transformWithCancel(async function(reason) {\n incomingTransformController.error(reason);\n await pipeDonePromise;\n await new Promise(setTimeout);\n });\n fn(incoming.readable, outgoing.writable);\n return outgoing.readable;\n }\n input = toArrayStream(input);\n const output = new ArrayStream();\n fn(input, output);\n return output;\n}\n\n/**\n * Parse a stream using a helper function which is passed a Reader.\n * The reader additionally has a remainder() method which returns a\n * stream pointing to the remainder of input, and is linked to input\n * for cancelation.\n * @param {ReadableStream|Uint8array|String} input\n * @param {Function} fn\n * @returns {Any} the return value of fn()\n */\nfunction parse(input, fn) {\n let returnValue;\n const transformed = transformPair(input, (readable, writable) => {\n const reader = getReader(readable);\n reader.remainder = () => {\n reader.releaseLock();\n pipe(readable, writable);\n return transformed;\n };\n returnValue = fn(reader);\n });\n return returnValue;\n}\n\n/**\n * Tee a Stream for reading it twice. The input stream can no longer be read after tee()ing.\n * Reading either of the two returned streams will pull from the input stream.\n * The input stream will only be canceled if both of the returned streams are canceled.\n * @param {ReadableStream|Uint8array|String} input\n * @returns {Array} array containing two copies of input\n */\nfunction tee(input) {\n if (isArrayStream(input)) {\n throw new Error('ArrayStream cannot be tee()d, use clone() instead');\n }\n if (isStream(input)) {\n const teed = toStream(input).tee();\n teed[0][externalBuffer] = teed[1][externalBuffer] = input[externalBuffer];\n return teed;\n }\n return [slice(input), slice(input)];\n}\n\n/**\n * Clone a Stream for reading it twice. The input stream can still be read after clone()ing.\n * Reading from the clone will pull from the input stream.\n * The input stream will only be canceled if both the clone and the input stream are canceled.\n * @param {ReadableStream|Uint8array|String} input\n * @returns {ReadableStream|Uint8array|String} cloned input\n */\nfunction clone(input) {\n if (isArrayStream(input)) {\n return input.clone();\n }\n if (isStream(input)) {\n const teed = tee(input);\n overwrite(input, teed[0]);\n return teed[1];\n }\n return slice(input);\n}\n\n/**\n * Clone a Stream for reading it twice. Data will arrive at the same rate as the input stream is being read.\n * Reading from the clone will NOT pull from the input stream. Data only arrives when reading the input stream.\n * The input stream will NOT be canceled if the clone is canceled, only if the input stream are canceled.\n * If the input stream is canceled, the clone will be errored.\n * @param {ReadableStream|Uint8array|String} input\n * @returns {ReadableStream|Uint8array|String} cloned input\n */\nfunction passiveClone(input) {\n if (isArrayStream(input)) {\n return clone(input);\n }\n if (isStream(input)) {\n return new ReadableStream({\n start(controller) {\n const transformed = transformPair(input, async (readable, writable) => {\n const reader = getReader(readable);\n const writer = getWriter(writable);\n try {\n while (true) {\n await writer.ready;\n const { done, value } = await reader.read();\n if (done) {\n try { controller.close(); } catch(e) {}\n await writer.close();\n return;\n }\n try { controller.enqueue(value); } catch(e) {}\n await writer.write(value);\n }\n } catch(e) {\n controller.error(e);\n await writer.abort(e);\n }\n });\n overwrite(input, transformed);\n }\n });\n }\n return slice(input);\n}\n\n/**\n * Modify a stream object to point to a different stream object.\n * This is used internally by clone() and passiveClone() to provide an abstraction over tee().\n * @param {ReadableStream} input\n * @param {ReadableStream} clone\n */\nfunction overwrite(input, clone) {\n // Overwrite input.getReader, input.locked, etc to point to clone\n Object.entries(Object.getOwnPropertyDescriptors(input.constructor.prototype)).forEach(([name, descriptor]) => {\n if (name === 'constructor') {\n return;\n }\n if (descriptor.value) {\n descriptor.value = descriptor.value.bind(clone);\n } else {\n descriptor.get = descriptor.get.bind(clone);\n }\n Object.defineProperty(input, name, descriptor);\n });\n}\n\n/**\n * Return a stream pointing to a part of the input stream.\n * @param {ReadableStream|Uint8array|String} input\n * @returns {ReadableStream|Uint8array|String} clone\n */\nfunction slice(input, begin=0, end=Infinity) {\n if (isArrayStream(input)) {\n throw new Error('Not implemented');\n }\n if (isStream(input)) {\n if (begin >= 0 && end >= 0) {\n let bytesRead = 0;\n return transformRaw(input, {\n transform(value, controller) {\n if (bytesRead < end) {\n if (bytesRead + value.length >= begin) {\n controller.enqueue(slice(value, Math.max(begin - bytesRead, 0), end - bytesRead));\n }\n bytesRead += value.length;\n } else {\n controller.terminate();\n }\n }\n });\n }\n if (begin < 0 && (end < 0 || end === Infinity)) {\n let lastBytes = [];\n return transform(input, value => {\n if (value.length >= -begin) lastBytes = [value];\n else lastBytes.push(value);\n }, () => slice(concat(lastBytes), begin, end));\n }\n if (begin === 0 && end < 0) {\n let lastBytes;\n return transform(input, value => {\n const returnValue = lastBytes ? concat([lastBytes, value]) : value;\n if (returnValue.length >= -end) {\n lastBytes = slice(returnValue, end);\n return slice(returnValue, begin, end);\n } else {\n lastBytes = returnValue;\n }\n });\n }\n console.warn(`stream.slice(input, ${begin}, ${end}) not implemented efficiently.`);\n return fromAsync(async () => slice(await readToEnd(input), begin, end));\n }\n if (input[externalBuffer]) {\n input = concat(input[externalBuffer].concat([input]));\n }\n if (isUint8Array(input) && !(NodeBuffer && NodeBuffer.isBuffer(input))) {\n if (end === Infinity) end = input.length;\n return input.subarray(begin, end);\n }\n return input.slice(begin, end);\n}\n\n/**\n * Read a stream to the end and return its contents, concatenated by the join function (defaults to concat).\n * @param {ReadableStream|Uint8array|String} input\n * @param {Function} join\n * @returns {Promise} the return value of join()\n * @async\n */\nasync function readToEnd(input, join=concat) {\n if (isArrayStream(input)) {\n return input.readToEnd(join);\n }\n if (isStream(input)) {\n return getReader(input).readToEnd(join);\n }\n return input;\n}\n\n/**\n * Cancel a stream.\n * @param {ReadableStream|Uint8array|String} input\n * @param {Any} reason\n * @returns {Promise} indicates when the stream has been canceled\n * @async\n */\nasync function cancel(input, reason) {\n if (isStream(input)) {\n if (input.cancel) {\n return input.cancel(reason);\n }\n if (input.destroy) {\n input.destroy(reason);\n await new Promise(setTimeout);\n return reason;\n }\n }\n}\n\n/**\n * Convert an async function to an ArrayStream. When the function returns, its return value is written to the stream.\n * @param {Function} fn\n * @returns {ArrayStream}\n */\nfunction fromAsync(fn) {\n const arrayStream = new ArrayStream();\n (async () => {\n const writer = getWriter(arrayStream);\n try {\n await writer.write(await fn());\n await writer.close();\n } catch (e) {\n await writer.abort(e);\n }\n })();\n return arrayStream;\n}\n\n\nexport { ReadableStream, WritableStream, TransformStream, ArrayStream, loadStreamsPonyfill, isStream, isArrayStream, isUint8Array, toStream, toPonyfillReadable, toNativeReadable, concatUint8Array, concatStream, concat, getReader, getWriter, pipe, transformRaw, transform, transformPair, parse, clone, passiveClone, slice, readToEnd, cancel, fromAsync, nodeToWeb, webToNode };\n","/* eslint-disable new-cap */\n\n/**\n * @fileoverview\n * BigInteger implementation of basic operations\n * that wraps the native BigInt library.\n * Operations are not constant time,\n * but we try and limit timing leakage where we can\n * @module biginteger/native\n * @private\n */\n\n/**\n * @private\n */\nexport default class BigInteger {\n /**\n * Get a BigInteger (input must be big endian for strings and arrays)\n * @param {Number|String|Uint8Array} n - Value to convert\n * @throws {Error} on null or undefined input\n */\n constructor(n) {\n if (n === undefined) {\n throw new Error('Invalid BigInteger input');\n }\n\n if (n instanceof Uint8Array) {\n const bytes = n;\n const hex = new Array(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n const hexByte = bytes[i].toString(16);\n hex[i] = (bytes[i] <= 0xF) ? ('0' + hexByte) : hexByte;\n }\n this.value = BigInt('0x0' + hex.join(''));\n } else {\n this.value = BigInt(n);\n }\n }\n\n clone() {\n return new BigInteger(this.value);\n }\n\n /**\n * BigInteger increment in place\n */\n iinc() {\n this.value++;\n return this;\n }\n\n /**\n * BigInteger increment\n * @returns {BigInteger} this + 1.\n */\n inc() {\n return this.clone().iinc();\n }\n\n /**\n * BigInteger decrement in place\n */\n idec() {\n this.value--;\n return this;\n }\n\n /**\n * BigInteger decrement\n * @returns {BigInteger} this - 1.\n */\n dec() {\n return this.clone().idec();\n }\n\n /**\n * BigInteger addition in place\n * @param {BigInteger} x - Value to add\n */\n iadd(x) {\n this.value += x.value;\n return this;\n }\n\n /**\n * BigInteger addition\n * @param {BigInteger} x - Value to add\n * @returns {BigInteger} this + x.\n */\n add(x) {\n return this.clone().iadd(x);\n }\n\n /**\n * BigInteger subtraction in place\n * @param {BigInteger} x - Value to subtract\n */\n isub(x) {\n this.value -= x.value;\n return this;\n }\n\n /**\n * BigInteger subtraction\n * @param {BigInteger} x - Value to subtract\n * @returns {BigInteger} this - x.\n */\n sub(x) {\n return this.clone().isub(x);\n }\n\n /**\n * BigInteger multiplication in place\n * @param {BigInteger} x - Value to multiply\n */\n imul(x) {\n this.value *= x.value;\n return this;\n }\n\n /**\n * BigInteger multiplication\n * @param {BigInteger} x - Value to multiply\n * @returns {BigInteger} this * x.\n */\n mul(x) {\n return this.clone().imul(x);\n }\n\n /**\n * Compute value modulo m, in place\n * @param {BigInteger} m - Modulo\n */\n imod(m) {\n this.value %= m.value;\n if (this.isNegative()) {\n this.iadd(m);\n }\n return this;\n }\n\n /**\n * Compute value modulo m\n * @param {BigInteger} m - Modulo\n * @returns {BigInteger} this mod m.\n */\n mod(m) {\n return this.clone().imod(m);\n }\n\n /**\n * Compute modular exponentiation using square and multiply\n * @param {BigInteger} e - Exponent\n * @param {BigInteger} n - Modulo\n * @returns {BigInteger} this ** e mod n.\n */\n modExp(e, n) {\n if (n.isZero()) throw Error('Modulo cannot be zero');\n if (n.isOne()) return new BigInteger(0);\n if (e.isNegative()) throw Error('Unsopported negative exponent');\n\n let exp = e.value;\n let x = this.value;\n\n x %= n.value;\n let r = BigInt(1);\n while (exp > BigInt(0)) {\n const lsb = exp & BigInt(1);\n exp >>= BigInt(1); // e / 2\n // Always compute multiplication step, to reduce timing leakage\n const rx = (r * x) % n.value;\n // Update r only if lsb is 1 (odd exponent)\n r = lsb ? rx : r;\n x = (x * x) % n.value; // Square\n }\n return new BigInteger(r);\n }\n\n\n /**\n * Compute the inverse of this value modulo n\n * Note: this and and n must be relatively prime\n * @param {BigInteger} n - Modulo\n * @returns {BigInteger} x such that this*x = 1 mod n\n * @throws {Error} if the inverse does not exist\n */\n modInv(n) {\n const { gcd, x } = this._egcd(n);\n if (!gcd.isOne()) {\n throw new Error('Inverse does not exist');\n }\n return x.add(n).mod(n);\n }\n\n /**\n * Extended Eucleadian algorithm (http://anh.cs.luc.edu/331/notes/xgcd.pdf)\n * Given a = this and b, compute (x, y) such that ax + by = gdc(a, b)\n * @param {BigInteger} b - Second operand\n * @returns {{ gcd, x, y: BigInteger }}\n */\n _egcd(b) {\n let x = BigInt(0);\n let y = BigInt(1);\n let xPrev = BigInt(1);\n let yPrev = BigInt(0);\n\n let a = this.value;\n b = b.value;\n\n while (b !== BigInt(0)) {\n const q = a / b;\n let tmp = x;\n x = xPrev - q * x;\n xPrev = tmp;\n\n tmp = y;\n y = yPrev - q * y;\n yPrev = tmp;\n\n tmp = b;\n b = a % b;\n a = tmp;\n }\n\n return {\n x: new BigInteger(xPrev),\n y: new BigInteger(yPrev),\n gcd: new BigInteger(a)\n };\n }\n\n /**\n * Compute greatest common divisor between this and n\n * @param {BigInteger} b - Operand\n * @returns {BigInteger} gcd\n */\n gcd(b) {\n let a = this.value;\n b = b.value;\n while (b !== BigInt(0)) {\n const tmp = b;\n b = a % b;\n a = tmp;\n }\n return new BigInteger(a);\n }\n\n /**\n * Shift this to the left by x, in place\n * @param {BigInteger} x - Shift value\n */\n ileftShift(x) {\n this.value <<= x.value;\n return this;\n }\n\n /**\n * Shift this to the left by x\n * @param {BigInteger} x - Shift value\n * @returns {BigInteger} this << x.\n */\n leftShift(x) {\n return this.clone().ileftShift(x);\n }\n\n /**\n * Shift this to the right by x, in place\n * @param {BigInteger} x - Shift value\n */\n irightShift(x) {\n this.value >>= x.value;\n return this;\n }\n\n /**\n * Shift this to the right by x\n * @param {BigInteger} x - Shift value\n * @returns {BigInteger} this >> x.\n */\n rightShift(x) {\n return this.clone().irightShift(x);\n }\n\n /**\n * Whether this value is equal to x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n equal(x) {\n return this.value === x.value;\n }\n\n /**\n * Whether this value is less than x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n lt(x) {\n return this.value < x.value;\n }\n\n /**\n * Whether this value is less than or equal to x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n lte(x) {\n return this.value <= x.value;\n }\n\n /**\n * Whether this value is greater than x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n gt(x) {\n return this.value > x.value;\n }\n\n /**\n * Whether this value is greater than or equal to x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n gte(x) {\n return this.value >= x.value;\n }\n\n isZero() {\n return this.value === BigInt(0);\n }\n\n isOne() {\n return this.value === BigInt(1);\n }\n\n isNegative() {\n return this.value < BigInt(0);\n }\n\n isEven() {\n return !(this.value & BigInt(1));\n }\n\n abs() {\n const res = this.clone();\n if (this.isNegative()) {\n res.value = -res.value;\n }\n return res;\n }\n\n /**\n * Get this value as a string\n * @returns {String} this value.\n */\n toString() {\n return this.value.toString();\n }\n\n /**\n * Get this value as an exact Number (max 53 bits)\n * Fails if this value is too large\n * @returns {Number}\n */\n toNumber() {\n const number = Number(this.value);\n if (number > Number.MAX_SAFE_INTEGER) {\n // We throw and error to conform with the bn.js implementation\n throw new Error('Number can only safely store up to 53 bits');\n }\n return number;\n }\n\n /**\n * Get value of i-th bit\n * @param {Number} i - Bit index\n * @returns {Number} Bit value.\n */\n getBit(i) {\n const bit = (this.value >> BigInt(i)) & BigInt(1);\n return (bit === BigInt(0)) ? 0 : 1;\n }\n\n /**\n * Compute bit length\n * @returns {Number} Bit length.\n */\n bitLength() {\n const zero = new BigInteger(0);\n const one = new BigInteger(1);\n const negOne = new BigInteger(-1);\n\n // -1n >> -1n is -1n\n // 1n >> 1n is 0n\n const target = this.isNegative() ? negOne : zero;\n let bitlen = 1;\n const tmp = this.clone();\n while (!tmp.irightShift(one).equal(target)) {\n bitlen++;\n }\n return bitlen;\n }\n\n /**\n * Compute byte length\n * @returns {Number} Byte length.\n */\n byteLength() {\n const zero = new BigInteger(0);\n const negOne = new BigInteger(-1);\n\n const target = this.isNegative() ? negOne : zero;\n const eight = new BigInteger(8);\n let len = 1;\n const tmp = this.clone();\n while (!tmp.irightShift(eight).equal(target)) {\n len++;\n }\n return len;\n }\n\n /**\n * Get Uint8Array representation of this number\n * @param {String} endian - Endianess of output array (defaults to 'be')\n * @param {Number} length - Of output array\n * @returns {Uint8Array}\n */\n toUint8Array(endian = 'be', length) {\n // we get and parse the hex string (https://coolaj86.com/articles/convert-js-bigints-to-typedarrays/)\n // this is faster than shift+mod iterations\n let hex = this.value.toString(16);\n if (hex.length % 2 === 1) {\n hex = '0' + hex;\n }\n\n const rawLength = hex.length / 2;\n const bytes = new Uint8Array(length || rawLength);\n // parse hex\n const offset = length ? (length - rawLength) : 0;\n let i = 0;\n while (i < rawLength) {\n bytes[i + offset] = parseInt(hex.slice(2 * i, 2 * i + 2), 16);\n i++;\n }\n\n if (endian !== 'be') {\n bytes.reverse();\n }\n\n return bytes;\n }\n}\n","import BigInteger from './native.interface';\n\nconst detectBigInt = () => typeof BigInt !== 'undefined';\n\nasync function getBigInteger() {\n if (detectBigInt()) {\n return BigInteger;\n } else {\n const { default: BigInteger } = await import('./bn.interface');\n return BigInteger;\n }\n}\n\nexport { getBigInteger };\n","/**\n * @module enums\n */\n\nconst byValue = Symbol('byValue');\n\nexport default {\n\n /** Maps curve names under various standards to one\n * @see {@link https://wiki.gnupg.org/ECC|ECC - GnuPG wiki}\n * @enum {String}\n * @readonly\n */\n curve: {\n /** NIST P-256 Curve */\n 'p256': 'p256',\n 'P-256': 'p256',\n 'secp256r1': 'p256',\n 'prime256v1': 'p256',\n '1.2.840.10045.3.1.7': 'p256',\n '2a8648ce3d030107': 'p256',\n '2A8648CE3D030107': 'p256',\n\n /** NIST P-384 Curve */\n 'p384': 'p384',\n 'P-384': 'p384',\n 'secp384r1': 'p384',\n '1.3.132.0.34': 'p384',\n '2b81040022': 'p384',\n '2B81040022': 'p384',\n\n /** NIST P-521 Curve */\n 'p521': 'p521',\n 'P-521': 'p521',\n 'secp521r1': 'p521',\n '1.3.132.0.35': 'p521',\n '2b81040023': 'p521',\n '2B81040023': 'p521',\n\n /** SECG SECP256k1 Curve */\n 'secp256k1': 'secp256k1',\n '1.3.132.0.10': 'secp256k1',\n '2b8104000a': 'secp256k1',\n '2B8104000A': 'secp256k1',\n\n /** Ed25519 - deprecated by crypto-refresh (replaced by standaone Ed25519 algo) */\n 'ed25519Legacy': 'ed25519',\n 'ED25519': 'ed25519',\n /** @deprecated use `ed25519Legacy` instead */\n 'ed25519': 'ed25519',\n 'Ed25519': 'ed25519',\n '1.3.6.1.4.1.11591.15.1': 'ed25519',\n '2b06010401da470f01': 'ed25519',\n '2B06010401DA470F01': 'ed25519',\n\n /** Curve25519 - deprecated by crypto-refresh (replaced by standaone X25519 algo) */\n 'curve25519Legacy': 'curve25519',\n 'X25519': 'curve25519',\n 'cv25519': 'curve25519',\n /** @deprecated use `curve25519Legacy` instead */\n 'curve25519': 'curve25519',\n 'Curve25519': 'curve25519',\n '1.3.6.1.4.1.3029.1.5.1': 'curve25519',\n '2b060104019755010501': 'curve25519',\n '2B060104019755010501': 'curve25519',\n\n /** BrainpoolP256r1 Curve */\n 'brainpoolP256r1': 'brainpoolP256r1',\n '1.3.36.3.3.2.8.1.1.7': 'brainpoolP256r1',\n '2b2403030208010107': 'brainpoolP256r1',\n '2B2403030208010107': 'brainpoolP256r1',\n\n /** BrainpoolP384r1 Curve */\n 'brainpoolP384r1': 'brainpoolP384r1',\n '1.3.36.3.3.2.8.1.1.11': 'brainpoolP384r1',\n '2b240303020801010b': 'brainpoolP384r1',\n '2B240303020801010B': 'brainpoolP384r1',\n\n /** BrainpoolP512r1 Curve */\n 'brainpoolP512r1': 'brainpoolP512r1',\n '1.3.36.3.3.2.8.1.1.13': 'brainpoolP512r1',\n '2b240303020801010d': 'brainpoolP512r1',\n '2B240303020801010D': 'brainpoolP512r1'\n },\n\n /** A string to key specifier type\n * @enum {Integer}\n * @readonly\n */\n s2k: {\n simple: 0,\n salted: 1,\n iterated: 3,\n gnu: 101\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-crypto-refresh-08.html#section-9.1|crypto-refresh RFC, section 9.1}\n * @enum {Integer}\n * @readonly\n */\n publicKey: {\n /** RSA (Encrypt or Sign) [HAC] */\n rsaEncryptSign: 1,\n /** RSA (Encrypt only) [HAC] */\n rsaEncrypt: 2,\n /** RSA (Sign only) [HAC] */\n rsaSign: 3,\n /** Elgamal (Encrypt only) [ELGAMAL] [HAC] */\n elgamal: 16,\n /** DSA (Sign only) [FIPS186] [HAC] */\n dsa: 17,\n /** ECDH (Encrypt only) [RFC6637] */\n ecdh: 18,\n /** ECDSA (Sign only) [RFC6637] */\n ecdsa: 19,\n /** EdDSA (Sign only) - deprecated by crypto-refresh (replaced by `ed25519` identifier below)\n * [{@link https://tools.ietf.org/html/draft-koch-eddsa-for-openpgp-04|Draft RFC}] */\n eddsaLegacy: 22, // NB: this is declared before `eddsa` to translate 22 to 'eddsa' for backwards compatibility\n /** @deprecated use `eddsaLegacy` instead */\n ed25519Legacy: 22,\n /** @deprecated use `eddsaLegacy` instead */\n eddsa: 22,\n /** Reserved for AEDH */\n aedh: 23,\n /** Reserved for AEDSA */\n aedsa: 24,\n /** X25519 (Encrypt only) */\n x25519: 25,\n /** X448 (Encrypt only) */\n x448: 26,\n /** Ed25519 (Sign only) */\n ed25519: 27,\n /** Ed448 (Sign only) */\n ed448: 28\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC4880, section 9.2}\n * @enum {Integer}\n * @readonly\n */\n symmetric: {\n plaintext: 0,\n /** Not implemented! */\n idea: 1,\n tripledes: 2,\n cast5: 3,\n blowfish: 4,\n aes128: 7,\n aes192: 8,\n aes256: 9,\n twofish: 10\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.3|RFC4880, section 9.3}\n * @enum {Integer}\n * @readonly\n */\n compression: {\n uncompressed: 0,\n /** RFC1951 */\n zip: 1,\n /** RFC1950 */\n zlib: 2,\n bzip2: 3\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC4880, section 9.4}\n * @enum {Integer}\n * @readonly\n */\n hash: {\n md5: 1,\n sha1: 2,\n ripemd: 3,\n sha256: 8,\n sha384: 9,\n sha512: 10,\n sha224: 11\n },\n\n /** A list of hash names as accepted by webCrypto functions.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest|Parameters, algo}\n * @enum {String}\n */\n webHash: {\n 'SHA-1': 2,\n 'SHA-256': 8,\n 'SHA-384': 9,\n 'SHA-512': 10\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-9.6|RFC4880bis-04, section 9.6}\n * @enum {Integer}\n * @readonly\n */\n aead: {\n eax: 1,\n ocb: 2,\n experimentalGCM: 100 // Private algorithm\n },\n\n /** A list of packet types and numeric tags associated with them.\n * @enum {Integer}\n * @readonly\n */\n packet: {\n publicKeyEncryptedSessionKey: 1,\n signature: 2,\n symEncryptedSessionKey: 3,\n onePassSignature: 4,\n secretKey: 5,\n publicKey: 6,\n secretSubkey: 7,\n compressedData: 8,\n symmetricallyEncryptedData: 9,\n marker: 10,\n literalData: 11,\n trust: 12,\n userID: 13,\n publicSubkey: 14,\n userAttribute: 17,\n symEncryptedIntegrityProtectedData: 18,\n modificationDetectionCode: 19,\n aeadEncryptedData: 20 // see IETF draft: https://tools.ietf.org/html/draft-ford-openpgp-format-00#section-2.1\n },\n\n /** Data types in the literal packet\n * @enum {Integer}\n * @readonly\n */\n literal: {\n /** Binary data 'b' */\n binary: 'b'.charCodeAt(),\n /** Text data 't' */\n text: 't'.charCodeAt(),\n /** Utf8 data 'u' */\n utf8: 'u'.charCodeAt(),\n /** MIME message body part 'm' */\n mime: 'm'.charCodeAt()\n },\n\n\n /** One pass signature packet type\n * @enum {Integer}\n * @readonly\n */\n signature: {\n /** 0x00: Signature of a binary document. */\n binary: 0,\n /** 0x01: Signature of a canonical text document.\n *\n * Canonicalyzing the document by converting line endings. */\n text: 1,\n /** 0x02: Standalone signature.\n *\n * This signature is a signature of only its own subpacket contents.\n * It is calculated identically to a signature over a zero-lengh\n * binary document. Note that it doesn't make sense to have a V3\n * standalone signature. */\n standalone: 2,\n /** 0x10: Generic certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification does not make any particular\n * assertion as to how well the certifier has checked that the owner\n * of the key is in fact the person described by the User ID. */\n certGeneric: 16,\n /** 0x11: Persona certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has not done any verification of\n * the claim that the owner of this key is the User ID specified. */\n certPersona: 17,\n /** 0x12: Casual certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has done some casual\n * verification of the claim of identity. */\n certCasual: 18,\n /** 0x13: Positive certification of a User ID and Public-Key packet.\n *\n * The issuer of this certification has done substantial\n * verification of the claim of identity.\n *\n * Most OpenPGP implementations make their \"key signatures\" as 0x10\n * certifications. Some implementations can issue 0x11-0x13\n * certifications, but few differentiate between the types. */\n certPositive: 19,\n /** 0x30: Certification revocation signature\n *\n * This signature revokes an earlier User ID certification signature\n * (signature class 0x10 through 0x13) or direct-key signature\n * (0x1F). It should be issued by the same key that issued the\n * revoked signature or an authorized revocation key. The signature\n * is computed over the same data as the certificate that it\n * revokes, and should have a later creation date than that\n * certificate. */\n certRevocation: 48,\n /** 0x18: Subkey Binding Signature\n *\n * This signature is a statement by the top-level signing key that\n * indicates that it owns the subkey. This signature is calculated\n * directly on the primary key and subkey, and not on any User ID or\n * other packets. A signature that binds a signing subkey MUST have\n * an Embedded Signature subpacket in this binding signature that\n * contains a 0x19 signature made by the signing subkey on the\n * primary key and subkey. */\n subkeyBinding: 24,\n /** 0x19: Primary Key Binding Signature\n *\n * This signature is a statement by a signing subkey, indicating\n * that it is owned by the primary key and subkey. This signature\n * is calculated the same way as a 0x18 signature: directly on the\n * primary key and subkey, and not on any User ID or other packets.\n *\n * When a signature is made over a key, the hash data starts with the\n * octet 0x99, followed by a two-octet length of the key, and then body\n * of the key packet. (Note that this is an old-style packet header for\n * a key packet with two-octet length.) A subkey binding signature\n * (type 0x18) or primary key binding signature (type 0x19) then hashes\n * the subkey using the same format as the main key (also using 0x99 as\n * the first octet). */\n keyBinding: 25,\n /** 0x1F: Signature directly on a key\n *\n * This signature is calculated directly on a key. It binds the\n * information in the Signature subpackets to the key, and is\n * appropriate to be used for subpackets that provide information\n * about the key, such as the Revocation Key subpacket. It is also\n * appropriate for statements that non-self certifiers want to make\n * about the key itself, rather than the binding between a key and a\n * name. */\n key: 31,\n /** 0x20: Key revocation signature\n *\n * The signature is calculated directly on the key being revoked. A\n * revoked key is not to be used. Only revocation signatures by the\n * key being revoked, or by an authorized revocation key, should be\n * considered valid revocation signatures.a */\n keyRevocation: 32,\n /** 0x28: Subkey revocation signature\n *\n * The signature is calculated directly on the subkey being revoked.\n * A revoked subkey is not to be used. Only revocation signatures\n * by the top-level signature key that is bound to this subkey, or\n * by an authorized revocation key, should be considered valid\n * revocation signatures.\n *\n * Key revocation signatures (types 0x20 and 0x28)\n * hash only the key being revoked. */\n subkeyRevocation: 40,\n /** 0x40: Timestamp signature.\n * This signature is only meaningful for the timestamp contained in\n * it. */\n timestamp: 64,\n /** 0x50: Third-Party Confirmation signature.\n *\n * This signature is a signature over some other OpenPGP Signature\n * packet(s). It is analogous to a notary seal on the signed data.\n * A third-party signature SHOULD include Signature Target\n * subpacket(s) to give easy identification. Note that we really do\n * mean SHOULD. There are plausible uses for this (such as a blind\n * party that only sees the signature, not the key or source\n * document) that cannot include a target subpacket. */\n thirdParty: 80\n },\n\n /** Signature subpacket type\n * @enum {Integer}\n * @readonly\n */\n signatureSubpacket: {\n signatureCreationTime: 2,\n signatureExpirationTime: 3,\n exportableCertification: 4,\n trustSignature: 5,\n regularExpression: 6,\n revocable: 7,\n keyExpirationTime: 9,\n placeholderBackwardsCompatibility: 10,\n preferredSymmetricAlgorithms: 11,\n revocationKey: 12,\n issuer: 16,\n notationData: 20,\n preferredHashAlgorithms: 21,\n preferredCompressionAlgorithms: 22,\n keyServerPreferences: 23,\n preferredKeyServer: 24,\n primaryUserID: 25,\n policyURI: 26,\n keyFlags: 27,\n signersUserID: 28,\n reasonForRevocation: 29,\n features: 30,\n signatureTarget: 31,\n embeddedSignature: 32,\n issuerFingerprint: 33,\n preferredAEADAlgorithms: 34\n },\n\n /** Key flags\n * @enum {Integer}\n * @readonly\n */\n keyFlags: {\n /** 0x01 - This key may be used to certify other keys. */\n certifyKeys: 1,\n /** 0x02 - This key may be used to sign data. */\n signData: 2,\n /** 0x04 - This key may be used to encrypt communications. */\n encryptCommunication: 4,\n /** 0x08 - This key may be used to encrypt storage. */\n encryptStorage: 8,\n /** 0x10 - The private component of this key may have been split\n * by a secret-sharing mechanism. */\n splitPrivateKey: 16,\n /** 0x20 - This key may be used for authentication. */\n authentication: 32,\n /** 0x80 - The private component of this key may be in the\n * possession of more than one person. */\n sharedPrivateKey: 128\n },\n\n /** Armor type\n * @enum {Integer}\n * @readonly\n */\n armor: {\n multipartSection: 0,\n multipartLast: 1,\n signed: 2,\n message: 3,\n publicKey: 4,\n privateKey: 5,\n signature: 6\n },\n\n /** {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.23|RFC4880, section 5.2.3.23}\n * @enum {Integer}\n * @readonly\n */\n reasonForRevocation: {\n /** No reason specified (key revocations or cert revocations) */\n noReason: 0,\n /** Key is superseded (key revocations) */\n keySuperseded: 1,\n /** Key material has been compromised (key revocations) */\n keyCompromised: 2,\n /** Key is retired and no longer used (key revocations) */\n keyRetired: 3,\n /** User ID information is no longer valid (cert revocations) */\n userIDInvalid: 32\n },\n\n /** {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.2.3.25|RFC4880bis-04, section 5.2.3.25}\n * @enum {Integer}\n * @readonly\n */\n features: {\n /** 0x01 - Modification Detection (packets 18 and 19) */\n modificationDetection: 1,\n /** 0x02 - AEAD Encrypted Data Packet (packet 20) and version 5\n * Symmetric-Key Encrypted Session Key Packets (packet 3) */\n aead: 2,\n /** 0x04 - Version 5 Public-Key Packet format and corresponding new\n * fingerprint format */\n v5Keys: 4\n },\n\n /**\n * Asserts validity of given value and converts from string/integer to integer.\n * @param {Object} type target enum type\n * @param {String|Integer} e value to check and/or convert\n * @returns {Integer} enum value if it exists\n * @throws {Error} if the value is invalid\n */\n write: function(type, e) {\n if (typeof e === 'number') {\n e = this.read(type, e);\n }\n\n if (type[e] !== undefined) {\n return type[e];\n }\n\n throw new Error('Invalid enum value.');\n },\n\n /**\n * Converts enum integer value to the corresponding string, if it exists.\n * @param {Object} type target enum type\n * @param {Integer} e value to convert\n * @returns {String} name of enum value if it exists\n * @throws {Error} if the value is invalid\n */\n read: function(type, e) {\n if (!type[byValue]) {\n type[byValue] = [];\n Object.entries(type).forEach(([key, value]) => {\n type[byValue][value] = key;\n });\n }\n\n if (type[byValue][e] !== undefined) {\n return type[byValue][e];\n }\n\n throw new Error('Invalid enum value.');\n }\n};\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/* eslint-disable no-console */\n\n/**\n * This object contains utility functions\n * @module util\n * @private\n */\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport { getBigInteger } from './biginteger';\nimport enums from './enums';\n\nconst debugMode = (() => {\n try {\n return process.env.NODE_ENV === 'development'; // eslint-disable-line no-process-env\n } catch (e) {}\n return false;\n})();\n\nconst util = {\n isString: function(data) {\n return typeof data === 'string' || data instanceof String;\n },\n\n isArray: function(data) {\n return data instanceof Array;\n },\n\n isUint8Array: stream.isUint8Array,\n\n isStream: stream.isStream,\n\n readNumber: function (bytes) {\n let n = 0;\n for (let i = 0; i < bytes.length; i++) {\n n += (256 ** i) * bytes[bytes.length - 1 - i];\n }\n return n;\n },\n\n writeNumber: function (n, bytes) {\n const b = new Uint8Array(bytes);\n for (let i = 0; i < bytes; i++) {\n b[i] = (n >> (8 * (bytes - i - 1))) & 0xFF;\n }\n\n return b;\n },\n\n readDate: function (bytes) {\n const n = util.readNumber(bytes);\n const d = new Date(n * 1000);\n return d;\n },\n\n writeDate: function (time) {\n const numeric = Math.floor(time.getTime() / 1000);\n\n return util.writeNumber(numeric, 4);\n },\n\n normalizeDate: function (time = Date.now()) {\n return time === null || time === Infinity ? time : new Date(Math.floor(+time / 1000) * 1000);\n },\n\n /**\n * Read one MPI from bytes in input\n * @param {Uint8Array} bytes - Input data to parse\n * @returns {Uint8Array} Parsed MPI.\n */\n readMPI: function (bytes) {\n const bits = (bytes[0] << 8) | bytes[1];\n const bytelen = (bits + 7) >>> 3;\n return bytes.subarray(2, 2 + bytelen);\n },\n\n /**\n * Left-pad Uint8Array to length by adding 0x0 bytes\n * @param {Uint8Array} bytes - Data to pad\n * @param {Number} length - Padded length\n * @returns {Uint8Array} Padded bytes.\n */\n leftPad(bytes, length) {\n const padded = new Uint8Array(length);\n const offset = length - bytes.length;\n padded.set(bytes, offset);\n return padded;\n },\n\n /**\n * Convert a Uint8Array to an MPI-formatted Uint8Array.\n * @param {Uint8Array} bin - An array of 8-bit integers to convert\n * @returns {Uint8Array} MPI-formatted Uint8Array.\n */\n uint8ArrayToMPI: function (bin) {\n const bitSize = util.uint8ArrayBitLength(bin);\n if (bitSize === 0) {\n throw new Error('Zero MPI');\n }\n const stripped = bin.subarray(bin.length - Math.ceil(bitSize / 8));\n const prefix = new Uint8Array([(bitSize & 0xFF00) >> 8, bitSize & 0xFF]);\n return util.concatUint8Array([prefix, stripped]);\n },\n\n /**\n * Return bit length of the input data\n * @param {Uint8Array} bin input data (big endian)\n * @returns bit length\n */\n uint8ArrayBitLength: function (bin) {\n let i; // index of leading non-zero byte\n for (i = 0; i < bin.length; i++) if (bin[i] !== 0) break;\n if (i === bin.length) {\n return 0;\n }\n const stripped = bin.subarray(i);\n return (stripped.length - 1) * 8 + util.nbits(stripped[0]);\n },\n\n /**\n * Convert a hex string to an array of 8-bit integers\n * @param {String} hex - A hex string to convert\n * @returns {Uint8Array} An array of 8-bit integers.\n */\n hexToUint8Array: function (hex) {\n const result = new Uint8Array(hex.length >> 1);\n for (let k = 0; k < hex.length >> 1; k++) {\n result[k] = parseInt(hex.substr(k << 1, 2), 16);\n }\n return result;\n },\n\n /**\n * Convert an array of 8-bit integers to a hex string\n * @param {Uint8Array} bytes - Array of 8-bit integers to convert\n * @returns {String} Hexadecimal representation of the array.\n */\n uint8ArrayToHex: function (bytes) {\n const r = [];\n const e = bytes.length;\n let c = 0;\n let h;\n while (c < e) {\n h = bytes[c++].toString(16);\n while (h.length < 2) {\n h = '0' + h;\n }\n r.push('' + h);\n }\n return r.join('');\n },\n\n /**\n * Convert a string to an array of 8-bit integers\n * @param {String} str - String to convert\n * @returns {Uint8Array} An array of 8-bit integers.\n */\n stringToUint8Array: function (str) {\n return stream.transform(str, str => {\n if (!util.isString(str)) {\n throw new Error('stringToUint8Array: Data must be in the form of a string');\n }\n\n const result = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n result[i] = str.charCodeAt(i);\n }\n return result;\n });\n },\n\n /**\n * Convert an array of 8-bit integers to a string\n * @param {Uint8Array} bytes - An array of 8-bit integers to convert\n * @returns {String} String representation of the array.\n */\n uint8ArrayToString: function (bytes) {\n bytes = new Uint8Array(bytes);\n const result = [];\n const bs = 1 << 14;\n const j = bytes.length;\n\n for (let i = 0; i < j; i += bs) {\n result.push(String.fromCharCode.apply(String, bytes.subarray(i, i + bs < j ? i + bs : j)));\n }\n return result.join('');\n },\n\n /**\n * Convert a native javascript string to a Uint8Array of utf8 bytes\n * @param {String|ReadableStream} str - The string to convert\n * @returns {Uint8Array|ReadableStream} A valid squence of utf8 bytes.\n */\n encodeUTF8: function (str) {\n const encoder = new TextEncoder('utf-8');\n // eslint-disable-next-line no-inner-declarations\n function process(value, lastChunk = false) {\n return encoder.encode(value, { stream: !lastChunk });\n }\n return stream.transform(str, process, () => process('', true));\n },\n\n /**\n * Convert a Uint8Array of utf8 bytes to a native javascript string\n * @param {Uint8Array|ReadableStream} utf8 - A valid squence of utf8 bytes\n * @returns {String|ReadableStream} A native javascript string.\n */\n decodeUTF8: function (utf8) {\n const decoder = new TextDecoder('utf-8');\n // eslint-disable-next-line no-inner-declarations\n function process(value, lastChunk = false) {\n return decoder.decode(value, { stream: !lastChunk });\n }\n return stream.transform(utf8, process, () => process(new Uint8Array(), true));\n },\n\n /**\n * Concat a list of Uint8Arrays, Strings or Streams\n * The caller must not mix Uint8Arrays with Strings, but may mix Streams with non-Streams.\n * @param {Array} Array - Of Uint8Arrays/Strings/Streams to concatenate\n * @returns {Uint8Array|String|ReadableStream} Concatenated array.\n */\n concat: stream.concat,\n\n /**\n * Concat Uint8Arrays\n * @param {Array} Array - Of Uint8Arrays to concatenate\n * @returns {Uint8Array} Concatenated array.\n */\n concatUint8Array: stream.concatUint8Array,\n\n /**\n * Check Uint8Array equality\n * @param {Uint8Array} array1 - First array\n * @param {Uint8Array} array2 - Second array\n * @returns {Boolean} Equality.\n */\n equalsUint8Array: function (array1, array2) {\n if (!util.isUint8Array(array1) || !util.isUint8Array(array2)) {\n throw new Error('Data must be in the form of a Uint8Array');\n }\n\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (let i = 0; i < array1.length; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Calculates a 16bit sum of a Uint8Array by adding each character\n * codes modulus 65535\n * @param {Uint8Array} Uint8Array - To create a sum of\n * @returns {Uint8Array} 2 bytes containing the sum of all charcodes % 65535.\n */\n writeChecksum: function (text) {\n let s = 0;\n for (let i = 0; i < text.length; i++) {\n s = (s + text[i]) & 0xFFFF;\n }\n return util.writeNumber(s, 2);\n },\n\n /**\n * Helper function to print a debug message. Debug\n * messages are only printed if\n * @param {String} str - String of the debug message\n */\n printDebug: function (str) {\n if (debugMode) {\n console.log('[OpenPGP.js debug]', str);\n }\n },\n\n /**\n * Helper function to print a debug error. Debug\n * messages are only printed if\n * @param {String} str - String of the debug message\n */\n printDebugError: function (error) {\n if (debugMode) {\n console.error('[OpenPGP.js debug]', error);\n }\n },\n\n // returns bit length of the integer x\n nbits: function (x) {\n let r = 1;\n let t = x >>> 16;\n if (t !== 0) {\n x = t;\n r += 16;\n }\n t = x >> 8;\n if (t !== 0) {\n x = t;\n r += 8;\n }\n t = x >> 4;\n if (t !== 0) {\n x = t;\n r += 4;\n }\n t = x >> 2;\n if (t !== 0) {\n x = t;\n r += 2;\n }\n t = x >> 1;\n if (t !== 0) {\n x = t;\n r += 1;\n }\n return r;\n },\n\n /**\n * If S[1] == 0, then double(S) == (S[2..128] || 0);\n * otherwise, double(S) == (S[2..128] || 0) xor\n * (zeros(120) || 10000111).\n *\n * Both OCB and EAX (through CMAC) require this function to be constant-time.\n *\n * @param {Uint8Array} data\n */\n double: function(data) {\n const doubleVar = new Uint8Array(data.length);\n const last = data.length - 1;\n for (let i = 0; i < last; i++) {\n doubleVar[i] = (data[i] << 1) ^ (data[i + 1] >> 7);\n }\n doubleVar[last] = (data[last] << 1) ^ ((data[0] >> 7) * 0x87);\n return doubleVar;\n },\n\n /**\n * Shift a Uint8Array to the right by n bits\n * @param {Uint8Array} array - The array to shift\n * @param {Integer} bits - Amount of bits to shift (MUST be smaller\n * than 8)\n * @returns {String} Resulting array.\n */\n shiftRight: function (array, bits) {\n if (bits) {\n for (let i = array.length - 1; i >= 0; i--) {\n array[i] >>= bits;\n if (i > 0) {\n array[i] |= (array[i - 1] << (8 - bits));\n }\n }\n }\n return array;\n },\n\n /**\n * Get native Web Cryptography api, only the current version of the spec.\n * @returns {Object} The SubtleCrypto api or 'undefined'.\n */\n getWebCrypto: function() {\n return typeof globalThis !== 'undefined' && globalThis.crypto && globalThis.crypto.subtle;\n },\n\n /**\n * Get BigInteger class\n * It wraps the native BigInt type if it's available\n * Otherwise it relies on bn.js\n * @returns {BigInteger}\n * @async\n */\n getBigInteger,\n\n /**\n * Get native Node.js crypto api.\n * @returns {Object} The crypto module or 'undefined'.\n */\n getNodeCrypto: function() {\n return require('crypto');\n },\n\n getNodeZlib: function() {\n return require('zlib');\n },\n\n /**\n * Get native Node.js Buffer constructor. This should be used since\n * Buffer is not available under browserify.\n * @returns {Function} The Buffer constructor or 'undefined'.\n */\n getNodeBuffer: function() {\n return (require('buffer') || {}).Buffer;\n },\n\n getHardwareConcurrency: function() {\n if (typeof navigator !== 'undefined') {\n return navigator.hardwareConcurrency || 1;\n }\n\n const os = require('os'); // Assume we're on Node.js.\n return os.cpus().length;\n },\n\n isEmailAddress: function(data) {\n if (!util.isString(data)) {\n return false;\n }\n const re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+([a-zA-Z]{2,}[0-9]*|xn--[a-zA-Z\\-0-9]+)))$/;\n return re.test(data);\n },\n\n /**\n * Normalize line endings to \n * Support any encoding where CR=0x0D, LF=0x0A\n */\n canonicalizeEOL: function(data) {\n const CR = 13;\n const LF = 10;\n let carryOverCR = false;\n\n return stream.transform(data, bytes => {\n if (carryOverCR) {\n bytes = util.concatUint8Array([new Uint8Array([CR]), bytes]);\n }\n\n if (bytes[bytes.length - 1] === CR) {\n carryOverCR = true;\n bytes = bytes.subarray(0, -1);\n } else {\n carryOverCR = false;\n }\n\n let index;\n const indices = [];\n for (let i = 0; ; i = index) {\n index = bytes.indexOf(LF, i) + 1;\n if (index) {\n if (bytes[index - 2] !== CR) indices.push(index);\n } else {\n break;\n }\n }\n if (!indices.length) {\n return bytes;\n }\n\n const normalized = new Uint8Array(bytes.length + indices.length);\n let j = 0;\n for (let i = 0; i < indices.length; i++) {\n const sub = bytes.subarray(indices[i - 1] || 0, indices[i]);\n normalized.set(sub, j);\n j += sub.length;\n normalized[j - 1] = CR;\n normalized[j] = LF;\n j++;\n }\n normalized.set(bytes.subarray(indices[indices.length - 1] || 0), j);\n return normalized;\n }, () => (carryOverCR ? new Uint8Array([CR]) : undefined));\n },\n\n /**\n * Convert line endings from canonicalized to native \n * Support any encoding where CR=0x0D, LF=0x0A\n */\n nativeEOL: function(data) {\n const CR = 13;\n const LF = 10;\n let carryOverCR = false;\n\n return stream.transform(data, bytes => {\n if (carryOverCR && bytes[0] !== LF) {\n bytes = util.concatUint8Array([new Uint8Array([CR]), bytes]);\n } else {\n bytes = new Uint8Array(bytes); // Don't mutate passed bytes\n }\n\n if (bytes[bytes.length - 1] === CR) {\n carryOverCR = true;\n bytes = bytes.subarray(0, -1);\n } else {\n carryOverCR = false;\n }\n\n let index;\n let j = 0;\n for (let i = 0; i !== bytes.length; i = index) {\n index = bytes.indexOf(CR, i) + 1;\n if (!index) index = bytes.length;\n const last = index - (bytes[index] === LF ? 1 : 0);\n if (i) bytes.copyWithin(j, i, last);\n j += last - i;\n }\n return bytes.subarray(0, j);\n }, () => (carryOverCR ? new Uint8Array([CR]) : undefined));\n },\n\n /**\n * Remove trailing spaces, carriage returns and tabs from each line\n */\n removeTrailingSpaces: function(text) {\n return text.split('\\n').map(line => {\n let i = line.length - 1;\n for (; i >= 0 && (line[i] === ' ' || line[i] === '\\t' || line[i] === '\\r'); i--);\n return line.substr(0, i + 1);\n }).join('\\n');\n },\n\n wrapError: function(message, error) {\n if (!error) {\n return new Error(message);\n }\n\n // update error message\n try {\n error.message = message + ': ' + error.message;\n } catch (e) {}\n\n return error;\n },\n\n /**\n * Map allowed packet tags to corresponding classes\n * Meant to be used to format `allowedPacket` for Packetlist.read\n * @param {Array} allowedClasses\n * @returns {Object} map from enum.packet to corresponding *Packet class\n */\n constructAllowedPackets: function(allowedClasses) {\n const map = {};\n allowedClasses.forEach(PacketClass => {\n if (!PacketClass.tag) {\n throw new Error('Invalid input: expected a packet class');\n }\n map[PacketClass.tag] = PacketClass;\n });\n return map;\n },\n\n /**\n * Return a Promise that will resolve as soon as one of the promises in input resolves\n * or will reject if all input promises all rejected\n * (similar to Promise.any, but with slightly different error handling)\n * @param {Array} promises\n * @return {Promise} Promise resolving to the result of the fastest fulfilled promise\n * or rejected with the Error of the last resolved Promise (if all promises are rejected)\n */\n anyPromise: function(promises) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let exception;\n await Promise.all(promises.map(async promise => {\n try {\n resolve(await promise);\n } catch (e) {\n exception = e;\n }\n }));\n reject(exception);\n });\n },\n\n /**\n * Return either `a` or `b` based on `cond`, in algorithmic constant time.\n * @param {Boolean} cond\n * @param {Uint8Array} a\n * @param {Uint8Array} b\n * @returns `a` if `cond` is true, `b` otherwise\n */\n selectUint8Array: function(cond, a, b) {\n const length = Math.max(a.length, b.length);\n const result = new Uint8Array(length);\n let end = 0;\n for (let i = 0; i < result.length; i++) {\n result[i] = (a[i] & (256 - cond)) | (b[i] & (255 + cond));\n end += (cond & i < a.length) | ((1 - cond) & i < b.length);\n }\n return result.subarray(0, end);\n },\n /**\n * Return either `a` or `b` based on `cond`, in algorithmic constant time.\n * NB: it only supports `a, b` with values between 0-255.\n * @param {Boolean} cond\n * @param {Uint8} a\n * @param {Uint8} b\n * @returns `a` if `cond` is true, `b` otherwise\n */\n selectUint8: function(cond, a, b) {\n return (a & (256 - cond)) | (b & (255 + cond));\n },\n /**\n * @param {module:enums.symmetric} cipherAlgo\n */\n isAES: function(cipherAlgo) {\n return cipherAlgo === enums.symmetric.aes128 || cipherAlgo === enums.symmetric.aes192 || cipherAlgo === enums.symmetric.aes256;\n }\n};\n\nexport default util;\n","/* OpenPGP radix-64/base64 string encoding/decoding\n * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de\n * version 1.0, check www.haneWIN.de for the latest version\n *\n * This software is provided as-is, without express or implied warranty.\n * Permission to use, copy, modify, distribute or sell this software, with or\n * without fee, for any purpose and by any individual or organization, is hereby\n * granted, provided that the above copyright notice and this paragraph appear\n * in all copies. Distribution as a part of an application or binary must\n * include the above copyright notice in the documentation and/or other materials\n * provided with the application or distribution.\n */\n\n/**\n * @module encoding/base64\n * @private\n */\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport util from '../util';\n\nconst Buffer = util.getNodeBuffer();\n\nlet encodeChunk;\nlet decodeChunk;\nif (Buffer) {\n encodeChunk = buf => Buffer.from(buf).toString('base64');\n decodeChunk = str => {\n const b = Buffer.from(str, 'base64');\n return new Uint8Array(b.buffer, b.byteOffset, b.byteLength);\n };\n} else {\n encodeChunk = buf => btoa(util.uint8ArrayToString(buf));\n decodeChunk = str => util.stringToUint8Array(atob(str));\n}\n\n/**\n * Convert binary array to radix-64\n * @param {Uint8Array | ReadableStream} data - Uint8Array to convert\n * @returns {String | ReadableStream} Radix-64 version of input string.\n * @static\n */\nexport function encode(data) {\n let buf = new Uint8Array();\n return stream.transform(data, value => {\n buf = util.concatUint8Array([buf, value]);\n const r = [];\n const bytesPerLine = 45; // 60 chars per line * (3 bytes / 4 chars of base64).\n const lines = Math.floor(buf.length / bytesPerLine);\n const bytes = lines * bytesPerLine;\n const encoded = encodeChunk(buf.subarray(0, bytes));\n for (let i = 0; i < lines; i++) {\n r.push(encoded.substr(i * 60, 60));\n r.push('\\n');\n }\n buf = buf.subarray(bytes);\n return r.join('');\n }, () => (buf.length ? encodeChunk(buf) + '\\n' : ''));\n}\n\n/**\n * Convert radix-64 to binary array\n * @param {String | ReadableStream} data - Radix-64 string to convert\n * @returns {Uint8Array | ReadableStream} Binary array version of input string.\n * @static\n */\nexport function decode(data) {\n let buf = '';\n return stream.transform(data, value => {\n buf += value;\n\n // Count how many whitespace characters there are in buf\n let spaces = 0;\n const spacechars = [' ', '\\t', '\\r', '\\n'];\n for (let i = 0; i < spacechars.length; i++) {\n const spacechar = spacechars[i];\n for (let pos = buf.indexOf(spacechar); pos !== -1; pos = buf.indexOf(spacechar, pos + 1)) {\n spaces++;\n }\n }\n\n // Backtrack until we have 4n non-whitespace characters\n // that we can safely base64-decode\n let length = buf.length;\n for (; length > 0 && (length - spaces) % 4 !== 0; length--) {\n if (spacechars.includes(buf[length])) spaces--;\n }\n\n const decoded = decodeChunk(buf.substr(0, length));\n buf = buf.substr(length);\n return decoded;\n }, () => decodeChunk(buf));\n}\n\n/**\n * Convert a Base-64 encoded string an array of 8-bit integer\n *\n * Note: accepts both Radix-64 and URL-safe strings\n * @param {String} base64 - Base-64 encoded string to convert\n * @returns {Uint8Array} An array of 8-bit integers.\n */\nexport function b64ToUint8Array(base64) {\n return decode(base64.replace(/-/g, '+').replace(/_/g, '/'));\n}\n\n/**\n * Convert an array of 8-bit integer to a Base-64 encoded string\n * @param {Uint8Array} bytes - An array of 8-bit integers to convert\n * @param {bool} url - If true, output is URL-safe\n * @returns {String} Base-64 encoded string.\n */\nexport function uint8ArrayToB64(bytes, url) {\n let encoded = encode(bytes).replace(/[\\r\\n]/g, '');\n if (url) {\n encoded = encoded.replace(/[+]/g, '-').replace(/[/]/g, '_').replace(/[=]/g, '');\n }\n return encoded;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Global configuration values.\n */\n\nimport enums from '../enums';\n\nexport default {\n /**\n * @memberof module:config\n * @property {Integer} preferredHashAlgorithm Default hash algorithm {@link module:enums.hash}\n */\n preferredHashAlgorithm: enums.hash.sha256,\n /**\n * @memberof module:config\n * @property {Integer} preferredSymmetricAlgorithm Default encryption cipher {@link module:enums.symmetric}\n */\n preferredSymmetricAlgorithm: enums.symmetric.aes256,\n /**\n * @memberof module:config\n * @property {Integer} compression Default compression algorithm {@link module:enums.compression}\n */\n preferredCompressionAlgorithm: enums.compression.uncompressed,\n /**\n * @memberof module:config\n * @property {Integer} deflateLevel Default zip/zlib compression level, between 1 and 9\n */\n deflateLevel: 6,\n\n /**\n * Use Authenticated Encryption with Additional Data (AEAD) protection for symmetric encryption.\n * Note: not all OpenPGP implementations are compatible with this option.\n * **FUTURE OPENPGP.JS VERSIONS MAY BREAK COMPATIBILITY WHEN USING THIS OPTION**\n * @see {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-07|RFC4880bis-07}\n * @memberof module:config\n * @property {Boolean} aeadProtect\n */\n aeadProtect: false,\n /**\n * Default Authenticated Encryption with Additional Data (AEAD) encryption mode\n * Only has an effect when aeadProtect is set to true.\n * @memberof module:config\n * @property {Integer} preferredAEADAlgorithm Default AEAD mode {@link module:enums.aead}\n */\n preferredAEADAlgorithm: enums.aead.eax,\n /**\n * Chunk Size Byte for Authenticated Encryption with Additional Data (AEAD) mode\n * Only has an effect when aeadProtect is set to true.\n * Must be an integer value from 0 to 56.\n * @memberof module:config\n * @property {Integer} aeadChunkSizeByte\n */\n aeadChunkSizeByte: 12,\n /**\n * Use V5 keys.\n * Note: not all OpenPGP implementations are compatible with this option.\n * **FUTURE OPENPGP.JS VERSIONS MAY BREAK COMPATIBILITY WHEN USING THIS OPTION**\n * @memberof module:config\n * @property {Boolean} v5Keys\n */\n v5Keys: false,\n /**\n * {@link https://tools.ietf.org/html/rfc4880#section-3.7.1.3|RFC4880 3.7.1.3}:\n * Iteration Count Byte for S2K (String to Key)\n * @memberof module:config\n * @property {Integer} s2kIterationCountByte\n */\n s2kIterationCountByte: 224,\n /**\n * Allow decryption of messages without integrity protection.\n * This is an **insecure** setting:\n * - message modifications cannot be detected, thus processing the decrypted data is potentially unsafe.\n * - it enables downgrade attacks against integrity-protected messages.\n * @memberof module:config\n * @property {Boolean} allowUnauthenticatedMessages\n */\n allowUnauthenticatedMessages: false,\n /**\n * Allow streaming unauthenticated data before its integrity has been checked. This would allow the application to\n * process large streams while limiting memory usage by releasing the decrypted chunks as soon as possible\n * and deferring checking their integrity until the decrypted stream has been read in full.\n *\n * This setting is **insecure** if the partially decrypted message is processed further or displayed to the user.\n * @memberof module:config\n * @property {Boolean} allowUnauthenticatedStream\n */\n allowUnauthenticatedStream: false,\n /**\n * @memberof module:config\n * @property {Boolean} checksumRequired Do not throw error when armor is missing a checksum\n */\n checksumRequired: false,\n /**\n * Minimum RSA key size allowed for key generation and message signing, verification and encryption.\n * The default is 2047 since due to a bug, previous versions of OpenPGP.js could generate 2047-bit keys instead of 2048-bit ones.\n * @memberof module:config\n * @property {Number} minRSABits\n */\n minRSABits: 2047,\n /**\n * Work-around for rare GPG decryption bug when encrypting with multiple passwords.\n * **Slower and slightly less secure**\n * @memberof module:config\n * @property {Boolean} passwordCollisionCheck\n */\n passwordCollisionCheck: false,\n /**\n * @memberof module:config\n * @property {Boolean} revocationsExpire If true, expired revocation signatures are ignored\n */\n revocationsExpire: false,\n /**\n * Allow decryption using RSA keys without `encrypt` flag.\n * This setting is potentially insecure, but it is needed to get around an old openpgpjs bug\n * where key flags were ignored when selecting a key for encryption.\n * @memberof module:config\n * @property {Boolean} allowInsecureDecryptionWithSigningKeys\n */\n allowInsecureDecryptionWithSigningKeys: false,\n /**\n * Allow verification of message signatures with keys whose validity at the time of signing cannot be determined.\n * Instead, a verification key will also be consider valid as long as it is valid at the current time.\n * This setting is potentially insecure, but it is needed to verify messages signed with keys that were later reformatted,\n * and have self-signature's creation date that does not match the primary key creation date.\n * @memberof module:config\n * @property {Boolean} allowInsecureDecryptionWithSigningKeys\n */\n allowInsecureVerificationWithReformattedKeys: false,\n\n /**\n * Enable constant-time decryption of RSA- and ElGamal-encrypted session keys, to hinder Bleichenbacher-like attacks (https://link.springer.com/chapter/10.1007/BFb0055716).\n * This setting has measurable performance impact and it is only helpful in application scenarios where both of the following conditions apply:\n * - new/incoming messages are automatically decrypted (without user interaction);\n * - an attacker can determine how long it takes to decrypt each message (e.g. due to decryption errors being logged remotely).\n * See also `constantTimePKCS1DecryptionSupportedSymmetricAlgorithms`.\n * @memberof module:config\n * @property {Boolean} constantTimePKCS1Decryption\n */\n constantTimePKCS1Decryption: false,\n /**\n * This setting is only meaningful if `constantTimePKCS1Decryption` is enabled.\n * Decryption of RSA- and ElGamal-encrypted session keys of symmetric algorithms different from the ones specified here will fail.\n * However, the more algorithms are added, the slower the decryption procedure becomes.\n * @memberof module:config\n * @property {Set} constantTimePKCS1DecryptionSupportedSymmetricAlgorithms {@link module:enums.symmetric}\n */\n constantTimePKCS1DecryptionSupportedSymmetricAlgorithms: new Set([enums.symmetric.aes128, enums.symmetric.aes192, enums.symmetric.aes256]),\n\n /**\n * @memberof module:config\n * @property {Integer} minBytesForWebCrypto The minimum amount of bytes for which to use native WebCrypto APIs when available\n */\n minBytesForWebCrypto: 1000,\n /**\n * @memberof module:config\n * @property {Boolean} ignoreUnsupportedPackets Ignore unsupported/unrecognizable packets on parsing instead of throwing an error\n */\n ignoreUnsupportedPackets: true,\n /**\n * @memberof module:config\n * @property {Boolean} ignoreMalformedPackets Ignore malformed packets on parsing instead of throwing an error\n */\n ignoreMalformedPackets: false,\n /**\n * Parsing of packets is normally restricted to a predefined set of packets. For example a Sym. Encrypted Integrity Protected Data Packet can only\n * contain a certain set of packets including LiteralDataPacket. With this setting we can allow additional packets, which is probably not advisable\n * as a global config setting, but can be used for specific function calls (e.g. decrypt method of Message).\n * @memberof module:config\n * @property {Array} additionalAllowedPackets Allow additional packets on parsing. Defined as array of packet classes, e.g. [PublicKeyPacket]\n */\n additionalAllowedPackets: [],\n /**\n * @memberof module:config\n * @property {Boolean} showVersion Whether to include {@link module:config/config.versionString} in armored messages\n */\n showVersion: false,\n /**\n * @memberof module:config\n * @property {Boolean} showComment Whether to include {@link module:config/config.commentString} in armored messages\n */\n showComment: false,\n /**\n * @memberof module:config\n * @property {String} versionString A version string to be included in armored messages\n */\n versionString: 'OpenPGP.js VERSION',\n /**\n * @memberof module:config\n * @property {String} commentString A comment string to be included in armored messages\n */\n commentString: 'https://openpgpjs.org',\n\n /**\n * Max userID string length (used for parsing)\n * @memberof module:config\n * @property {Integer} maxUserIDLength\n */\n maxUserIDLength: 1024 * 5,\n /**\n * Contains notatations that are considered \"known\". Known notations do not trigger\n * validation error when the notation is marked as critical.\n * @memberof module:config\n * @property {Array} knownNotations\n */\n knownNotations: [],\n /**\n * Whether to use the indutny/elliptic library for curves (other than Curve25519) that are not supported by the available native crypto API.\n * When false, certain standard curves will not be supported (depending on the platform).\n * Note: the indutny/elliptic curve library is not designed to be constant time.\n * @memberof module:config\n * @property {Boolean} useIndutnyElliptic\n */\n useIndutnyElliptic: true,\n /**\n * Reject insecure hash algorithms\n * @memberof module:config\n * @property {Set} rejectHashAlgorithms {@link module:enums.hash}\n */\n rejectHashAlgorithms: new Set([enums.hash.md5, enums.hash.ripemd]),\n /**\n * Reject insecure message hash algorithms\n * @memberof module:config\n * @property {Set} rejectMessageHashAlgorithms {@link module:enums.hash}\n */\n rejectMessageHashAlgorithms: new Set([enums.hash.md5, enums.hash.ripemd, enums.hash.sha1]),\n /**\n * Reject insecure public key algorithms for key generation and message encryption, signing or verification\n * @memberof module:config\n * @property {Set} rejectPublicKeyAlgorithms {@link module:enums.publicKey}\n */\n rejectPublicKeyAlgorithms: new Set([enums.publicKey.elgamal, enums.publicKey.dsa]),\n /**\n * Reject non-standard curves for key generation, message encryption, signing or verification\n * @memberof module:config\n * @property {Set} rejectCurves {@link module:enums.curve}\n */\n rejectCurves: new Set([enums.curve.secp256k1])\n};\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport * as base64 from './base64';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\n\n/**\n * Finds out which Ascii Armoring type is used. Throws error if unknown type.\n * @param {String} text - ascii armored text\n * @returns {Integer} 0 = MESSAGE PART n of m.\n * 1 = MESSAGE PART n\n * 2 = SIGNED MESSAGE\n * 3 = PGP MESSAGE\n * 4 = PUBLIC KEY BLOCK\n * 5 = PRIVATE KEY BLOCK\n * 6 = SIGNATURE\n * @private\n */\nfunction getType(text) {\n const reHeader = /^-----BEGIN PGP (MESSAGE, PART \\d+\\/\\d+|MESSAGE, PART \\d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$/m;\n\n const header = text.match(reHeader);\n\n if (!header) {\n throw new Error('Unknown ASCII armor type');\n }\n\n // BEGIN PGP MESSAGE, PART X/Y\n // Used for multi-part messages, where the armor is split amongst Y\n // parts, and this is the Xth part out of Y.\n if (/MESSAGE, PART \\d+\\/\\d+/.test(header[1])) {\n return enums.armor.multipartSection;\n } else\n // BEGIN PGP MESSAGE, PART X\n // Used for multi-part messages, where this is the Xth part of an\n // unspecified number of parts. Requires the MESSAGE-ID Armor\n // Header to be used.\n if (/MESSAGE, PART \\d+/.test(header[1])) {\n return enums.armor.multipartLast;\n } else\n // BEGIN PGP SIGNED MESSAGE\n if (/SIGNED MESSAGE/.test(header[1])) {\n return enums.armor.signed;\n } else\n // BEGIN PGP MESSAGE\n // Used for signed, encrypted, or compressed files.\n if (/MESSAGE/.test(header[1])) {\n return enums.armor.message;\n } else\n // BEGIN PGP PUBLIC KEY BLOCK\n // Used for armoring public keys.\n if (/PUBLIC KEY BLOCK/.test(header[1])) {\n return enums.armor.publicKey;\n } else\n // BEGIN PGP PRIVATE KEY BLOCK\n // Used for armoring private keys.\n if (/PRIVATE KEY BLOCK/.test(header[1])) {\n return enums.armor.privateKey;\n } else\n // BEGIN PGP SIGNATURE\n // Used for detached signatures, OpenPGP/MIME signatures, and\n // cleartext signatures. Note that PGP 2.x uses BEGIN PGP MESSAGE\n // for detached signatures.\n if (/SIGNATURE/.test(header[1])) {\n return enums.armor.signature;\n }\n}\n\n/**\n * Add additional information to the armor version of an OpenPGP binary\n * packet block.\n * @author Alex\n * @version 2011-12-16\n * @param {String} [customComment] - Additional comment to add to the armored string\n * @returns {String} The header information.\n * @private\n */\nfunction addheader(customComment, config) {\n let result = '';\n if (config.showVersion) {\n result += 'Version: ' + config.versionString + '\\n';\n }\n if (config.showComment) {\n result += 'Comment: ' + config.commentString + '\\n';\n }\n if (customComment) {\n result += 'Comment: ' + customComment + '\\n';\n }\n result += '\\n';\n return result;\n}\n\n\n/**\n * Calculates a checksum over the given data and returns it base64 encoded\n * @param {String | ReadableStream} data - Data to create a CRC-24 checksum for\n * @returns {String | ReadableStream} Base64 encoded checksum.\n * @private\n */\nfunction getCheckSum(data) {\n const crc = createcrc24(data);\n return base64.encode(crc);\n}\n\n// https://create.stephan-brumme.com/crc32/#slicing-by-8-overview\n\nconst crc_table = [\n new Array(0xFF),\n new Array(0xFF),\n new Array(0xFF),\n new Array(0xFF)\n];\n\nfor (let i = 0; i <= 0xFF; i++) {\n let crc = i << 16;\n for (let j = 0; j < 8; j++) {\n crc = (crc << 1) ^ ((crc & 0x800000) !== 0 ? 0x864CFB : 0);\n }\n crc_table[0][i] =\n ((crc & 0xFF0000) >> 16) |\n (crc & 0x00FF00) |\n ((crc & 0x0000FF) << 16);\n}\nfor (let i = 0; i <= 0xFF; i++) {\n crc_table[1][i] = (crc_table[0][i] >> 8) ^ crc_table[0][crc_table[0][i] & 0xFF];\n}\nfor (let i = 0; i <= 0xFF; i++) {\n crc_table[2][i] = (crc_table[1][i] >> 8) ^ crc_table[0][crc_table[1][i] & 0xFF];\n}\nfor (let i = 0; i <= 0xFF; i++) {\n crc_table[3][i] = (crc_table[2][i] >> 8) ^ crc_table[0][crc_table[2][i] & 0xFF];\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView#Endianness\nconst isLittleEndian = (function() {\n const buffer = new ArrayBuffer(2);\n new DataView(buffer).setInt16(0, 0xFF, true /* littleEndian */);\n // Int16Array uses the platform's endianness.\n return new Int16Array(buffer)[0] === 0xFF;\n}());\n\n/**\n * Internal function to calculate a CRC-24 checksum over a given string (data)\n * @param {String | ReadableStream} input - Data to create a CRC-24 checksum for\n * @returns {Uint8Array | ReadableStream} The CRC-24 checksum.\n * @private\n */\nfunction createcrc24(input) {\n let crc = 0xCE04B7;\n return stream.transform(input, value => {\n const len32 = isLittleEndian ? Math.floor(value.length / 4) : 0;\n const arr32 = new Uint32Array(value.buffer, value.byteOffset, len32);\n for (let i = 0; i < len32; i++) {\n crc ^= arr32[i];\n crc =\n crc_table[0][(crc >> 24) & 0xFF] ^\n crc_table[1][(crc >> 16) & 0xFF] ^\n crc_table[2][(crc >> 8) & 0xFF] ^\n crc_table[3][(crc >> 0) & 0xFF];\n }\n for (let i = len32 * 4; i < value.length; i++) {\n crc = (crc >> 8) ^ crc_table[0][(crc & 0xFF) ^ value[i]];\n }\n }, () => new Uint8Array([crc, crc >> 8, crc >> 16]));\n}\n\n/**\n * Verify armored headers. crypto-refresh-06, section 6.2:\n * \"An OpenPGP implementation may consider improperly formatted Armor\n * Headers to be corruption of the ASCII Armor, but SHOULD make an\n * effort to recover.\"\n * @private\n * @param {Array} headers - Armor headers\n */\nfunction verifyHeaders(headers) {\n for (let i = 0; i < headers.length; i++) {\n if (!/^([^\\s:]|[^\\s:][^:]*[^\\s:]): .+$/.test(headers[i])) {\n util.printDebugError(new Error('Improperly formatted armor header: ' + headers[i]));\n }\n if (!/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(headers[i])) {\n util.printDebugError(new Error('Unknown header: ' + headers[i]));\n }\n }\n}\n\n/**\n * Splits a message into two parts, the body and the checksum. This is an internal function\n * @param {String} text - OpenPGP armored message part\n * @returns {Object} An object with attribute \"body\" containing the body.\n * and an attribute \"checksum\" containing the checksum.\n * @private\n */\nfunction splitChecksum(text) {\n let body = text;\n let checksum = '';\n\n const lastEquals = text.lastIndexOf('=');\n\n if (lastEquals >= 0 && lastEquals !== text.length - 1) { // '=' as the last char means no checksum\n body = text.slice(0, lastEquals);\n checksum = text.slice(lastEquals + 1).substr(0, 4);\n }\n\n return { body: body, checksum: checksum };\n}\n\n/**\n * Dearmor an OpenPGP armored message; verify the checksum and return\n * the encoded bytes\n * @param {String} input - OpenPGP armored message\n * @returns {Promise} An object with attribute \"text\" containing the message text,\n * an attribute \"data\" containing a stream of bytes and \"type\" for the ASCII armor type\n * @async\n * @static\n */\nexport function unarmor(input, config = defaultConfig) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n const reSplit = /^-----[^-]+-----$/m;\n const reEmptyLine = /^[ \\f\\r\\t\\u00a0\\u2000-\\u200a\\u202f\\u205f\\u3000]*$/;\n\n let type;\n const headers = [];\n let lastHeaders = headers;\n let headersDone;\n let text = [];\n let textDone;\n let checksum;\n let data = base64.decode(stream.transformPair(input, async (readable, writable) => {\n const reader = stream.getReader(readable);\n try {\n while (true) {\n let line = await reader.readLine();\n if (line === undefined) {\n throw new Error('Misformed armored text');\n }\n // remove trailing whitespace at end of lines\n line = util.removeTrailingSpaces(line.replace(/[\\r\\n]/g, ''));\n if (!type) {\n if (reSplit.test(line)) {\n type = getType(line);\n }\n } else if (!headersDone) {\n if (reSplit.test(line)) {\n reject(new Error('Mandatory blank line missing between armor headers and armor data'));\n }\n if (!reEmptyLine.test(line)) {\n lastHeaders.push(line);\n } else {\n verifyHeaders(lastHeaders);\n headersDone = true;\n if (textDone || type !== 2) {\n resolve({ text, data, headers, type });\n break;\n }\n }\n } else if (!textDone && type === 2) {\n if (!reSplit.test(line)) {\n // Reverse dash-escaping for msg\n text.push(line.replace(/^- /, ''));\n } else {\n text = text.join('\\r\\n');\n textDone = true;\n verifyHeaders(lastHeaders);\n lastHeaders = [];\n headersDone = false;\n }\n }\n }\n } catch (e) {\n reject(e);\n return;\n }\n const writer = stream.getWriter(writable);\n try {\n while (true) {\n await writer.ready;\n const { done, value } = await reader.read();\n if (done) {\n throw new Error('Misformed armored text');\n }\n const line = value + '';\n if (line.indexOf('=') === -1 && line.indexOf('-') === -1) {\n await writer.write(line);\n } else {\n let remainder = await reader.readToEnd();\n if (!remainder.length) remainder = '';\n remainder = line + remainder;\n remainder = util.removeTrailingSpaces(remainder.replace(/\\r/g, ''));\n const parts = remainder.split(reSplit);\n if (parts.length === 1) {\n throw new Error('Misformed armored text');\n }\n const split = splitChecksum(parts[0].slice(0, -1));\n checksum = split.checksum;\n await writer.write(split.body);\n break;\n }\n }\n await writer.ready;\n await writer.close();\n } catch (e) {\n await writer.abort(e);\n }\n }));\n data = stream.transformPair(data, async (readable, writable) => {\n const checksumVerified = stream.readToEnd(getCheckSum(stream.passiveClone(readable)));\n checksumVerified.catch(() => {});\n await stream.pipe(readable, writable, {\n preventClose: true\n });\n const writer = stream.getWriter(writable);\n try {\n const checksumVerifiedString = (await checksumVerified).replace('\\n', '');\n if (checksum !== checksumVerifiedString && (checksum || config.checksumRequired)) {\n throw new Error('Ascii armor integrity check failed');\n }\n await writer.ready;\n await writer.close();\n } catch (e) {\n await writer.abort(e);\n }\n });\n } catch (e) {\n reject(e);\n }\n }).then(async result => {\n if (stream.isArrayStream(result.data)) {\n result.data = await stream.readToEnd(result.data);\n }\n return result;\n });\n}\n\n\n/**\n * Armor an OpenPGP binary packet block\n * @param {module:enums.armor} messageType - Type of the message\n * @param {Uint8Array | ReadableStream} body - The message body to armor\n * @param {Integer} [partIndex]\n * @param {Integer} [partTotal]\n * @param {String} [customComment] - Additional comment to add to the armored string\n * @returns {String | ReadableStream} Armored text.\n * @static\n */\nexport function armor(messageType, body, partIndex, partTotal, customComment, config = defaultConfig) {\n let text;\n let hash;\n if (messageType === enums.armor.signed) {\n text = body.text;\n hash = body.hash;\n body = body.data;\n }\n const bodyClone = stream.passiveClone(body);\n const result = [];\n switch (messageType) {\n case enums.armor.multipartSection:\n result.push('-----BEGIN PGP MESSAGE, PART ' + partIndex + '/' + partTotal + '-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP MESSAGE, PART ' + partIndex + '/' + partTotal + '-----\\n');\n break;\n case enums.armor.multipartLast:\n result.push('-----BEGIN PGP MESSAGE, PART ' + partIndex + '-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP MESSAGE, PART ' + partIndex + '-----\\n');\n break;\n case enums.armor.signed:\n result.push('-----BEGIN PGP SIGNED MESSAGE-----\\n');\n result.push('Hash: ' + hash + '\\n\\n');\n result.push(text.replace(/^-/mg, '- -'));\n result.push('\\n-----BEGIN PGP SIGNATURE-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP SIGNATURE-----\\n');\n break;\n case enums.armor.message:\n result.push('-----BEGIN PGP MESSAGE-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP MESSAGE-----\\n');\n break;\n case enums.armor.publicKey:\n result.push('-----BEGIN PGP PUBLIC KEY BLOCK-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP PUBLIC KEY BLOCK-----\\n');\n break;\n case enums.armor.privateKey:\n result.push('-----BEGIN PGP PRIVATE KEY BLOCK-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP PRIVATE KEY BLOCK-----\\n');\n break;\n case enums.armor.signature:\n result.push('-----BEGIN PGP SIGNATURE-----\\n');\n result.push(addheader(customComment, config));\n result.push(base64.encode(body));\n result.push('=', getCheckSum(bodyClone));\n result.push('-----END PGP SIGNATURE-----\\n');\n break;\n }\n\n return util.concat(result);\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @module type/keyid\n * @private\n */\n\nimport util from '../util';\n\n/**\n * Implementation of type key id\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-3.3|RFC4880 3.3}:\n * A Key ID is an eight-octet scalar that identifies a key.\n * Implementations SHOULD NOT assume that Key IDs are unique. The\n * section \"Enhanced Key Formats\" below describes how Key IDs are\n * formed.\n */\nclass KeyID {\n constructor() {\n this.bytes = '';\n }\n\n /**\n * Parsing method for a key id\n * @param {Uint8Array} bytes - Input to read the key id from\n */\n read(bytes) {\n this.bytes = util.uint8ArrayToString(bytes.subarray(0, 8));\n return this.bytes.length;\n }\n\n /**\n * Serializes the Key ID\n * @returns {Uint8Array} Key ID as a Uint8Array.\n */\n write() {\n return util.stringToUint8Array(this.bytes);\n }\n\n /**\n * Returns the Key ID represented as a hexadecimal string\n * @returns {String} Key ID as a hexadecimal string.\n */\n toHex() {\n return util.uint8ArrayToHex(util.stringToUint8Array(this.bytes));\n }\n\n /**\n * Checks equality of Key ID's\n * @param {KeyID} keyID\n * @param {Boolean} matchWildcard - Indicates whether to check if either keyID is a wildcard\n */\n equals(keyID, matchWildcard = false) {\n return (matchWildcard && (keyID.isWildcard() || this.isWildcard())) || this.bytes === keyID.bytes;\n }\n\n /**\n * Checks to see if the Key ID is unset\n * @returns {Boolean} True if the Key ID is null.\n */\n isNull() {\n return this.bytes === '';\n }\n\n /**\n * Checks to see if the Key ID is a \"wildcard\" Key ID (all zeros)\n * @returns {Boolean} True if this is a wildcard Key ID.\n */\n isWildcard() {\n return /^0+$/.test(this.toHex());\n }\n\n static mapToHex(keyID) {\n return keyID.toHex();\n }\n\n static fromID(hex) {\n const keyID = new KeyID();\n keyID.read(util.hexToUint8Array(hex));\n return keyID;\n }\n\n static wildcard() {\n const keyID = new KeyID();\n keyID.read(new Uint8Array(8));\n return keyID;\n }\n}\n\nexport default KeyID;\n","/**\n * @file {@link http://asmjs.org Asm.js} implementation of the {@link https://en.wikipedia.org/wiki/Advanced_Encryption_Standard Advanced Encryption Standard}.\n * @author Artem S Vybornov \n * @license MIT\n */\nexport var AES_asm = function () {\n \"use strict\";\n\n /**\n * Galois Field stuff init flag\n */\n var ginit_done = false;\n\n /**\n * Galois Field exponentiation and logarithm tables for 3 (the generator)\n */\n var gexp3, glog3;\n\n /**\n * Init Galois Field tables\n */\n function ginit() {\n gexp3 = [],\n glog3 = [];\n\n var a = 1, c, d;\n for (c = 0; c < 255; c++) {\n gexp3[c] = a;\n\n // Multiply by three\n d = a & 0x80, a <<= 1, a &= 255;\n if (d === 0x80) a ^= 0x1b;\n a ^= gexp3[c];\n\n // Set the log table value\n glog3[gexp3[c]] = c;\n }\n gexp3[255] = gexp3[0];\n glog3[0] = 0;\n\n ginit_done = true;\n }\n\n /**\n * Galois Field multiplication\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\n function gmul(a, b) {\n var c = gexp3[(glog3[a] + glog3[b]) % 255];\n if (a === 0 || b === 0) c = 0;\n return c;\n }\n\n /**\n * Galois Field reciprocal\n * @param {number} a\n * @return {number}\n */\n function ginv(a) {\n var i = gexp3[255 - glog3[a]];\n if (a === 0) i = 0;\n return i;\n }\n\n /**\n * AES stuff init flag\n */\n var aes_init_done = false;\n\n /**\n * Encryption, Decryption, S-Box and KeyTransform tables\n *\n * @type {number[]}\n */\n var aes_sbox;\n\n /**\n * @type {number[]}\n */\n var aes_sinv;\n\n /**\n * @type {number[][]}\n */\n var aes_enc;\n\n /**\n * @type {number[][]}\n */\n var aes_dec;\n\n /**\n * Init AES tables\n */\n function aes_init() {\n if (!ginit_done) ginit();\n\n // Calculates AES S-Box value\n function _s(a) {\n var c, s, x;\n s = x = ginv(a);\n for (c = 0; c < 4; c++) {\n s = ((s << 1) | (s >>> 7)) & 255;\n x ^= s;\n }\n x ^= 99;\n return x;\n }\n\n // Tables\n aes_sbox = [],\n aes_sinv = [],\n aes_enc = [[], [], [], []],\n aes_dec = [[], [], [], []];\n\n for (var i = 0; i < 256; i++) {\n var s = _s(i);\n\n // S-Box and its inverse\n aes_sbox[i] = s;\n aes_sinv[s] = i;\n\n // Ecryption and Decryption tables\n aes_enc[0][i] = (gmul(2, s) << 24) | (s << 16) | (s << 8) | gmul(3, s);\n aes_dec[0][s] = (gmul(14, i) << 24) | (gmul(9, i) << 16) | (gmul(13, i) << 8) | gmul(11, i);\n // Rotate tables\n for (var t = 1; t < 4; t++) {\n aes_enc[t][i] = (aes_enc[t - 1][i] >>> 8) | (aes_enc[t - 1][i] << 24);\n aes_dec[t][s] = (aes_dec[t - 1][s] >>> 8) | (aes_dec[t - 1][s] << 24);\n }\n }\n\n aes_init_done = true;\n }\n\n /**\n * Asm.js module constructor.\n *\n *

\n * Heap buffer layout by offset:\n *

\n   * 0x0000   encryption key schedule\n   * 0x0400   decryption key schedule\n   * 0x0800   sbox\n   * 0x0c00   inv sbox\n   * 0x1000   encryption tables\n   * 0x2000   decryption tables\n   * 0x3000   reserved (future GCM multiplication lookup table)\n   * 0x4000   data\n   * 
\n * Don't touch anything before 0x400.\n *

\n *\n * @alias AES_asm\n * @class\n * @param foreign - ignored\n * @param buffer - heap buffer to link with\n */\n var wrapper = function (foreign, buffer) {\n // Init AES stuff for the first time\n if (!aes_init_done) aes_init();\n\n // Fill up AES tables\n var heap = new Uint32Array(buffer);\n heap.set(aes_sbox, 0x0800 >> 2);\n heap.set(aes_sinv, 0x0c00 >> 2);\n for (var i = 0; i < 4; i++) {\n heap.set(aes_enc[i], (0x1000 + 0x400 * i) >> 2);\n heap.set(aes_dec[i], (0x2000 + 0x400 * i) >> 2);\n }\n\n /**\n * Calculate AES key schedules.\n * @instance\n * @memberof AES_asm\n * @param {number} ks - key size, 4/6/8 (for 128/192/256-bit key correspondingly)\n * @param {number} k0 - key vector components\n * @param {number} k1 - key vector components\n * @param {number} k2 - key vector components\n * @param {number} k3 - key vector components\n * @param {number} k4 - key vector components\n * @param {number} k5 - key vector components\n * @param {number} k6 - key vector components\n * @param {number} k7 - key vector components\n */\n function set_key(ks, k0, k1, k2, k3, k4, k5, k6, k7) {\n var ekeys = heap.subarray(0x000, 60),\n dkeys = heap.subarray(0x100, 0x100 + 60);\n\n // Encryption key schedule\n ekeys.set([k0, k1, k2, k3, k4, k5, k6, k7]);\n for (var i = ks, rcon = 1; i < 4 * ks + 28; i++) {\n var k = ekeys[i - 1];\n if ((i % ks === 0) || (ks === 8 && i % ks === 4)) {\n k = aes_sbox[k >>> 24] << 24 ^ aes_sbox[k >>> 16 & 255] << 16 ^ aes_sbox[k >>> 8 & 255] << 8 ^ aes_sbox[k & 255];\n }\n if (i % ks === 0) {\n k = (k << 8) ^ (k >>> 24) ^ (rcon << 24);\n rcon = (rcon << 1) ^ ((rcon & 0x80) ? 0x1b : 0);\n }\n ekeys[i] = ekeys[i - ks] ^ k;\n }\n\n // Decryption key schedule\n for (var j = 0; j < i; j += 4) {\n for (var jj = 0; jj < 4; jj++) {\n var k = ekeys[i - (4 + j) + (4 - jj) % 4];\n if (j < 4 || j >= i - 4) {\n dkeys[j + jj] = k;\n } else {\n dkeys[j + jj] = aes_dec[0][aes_sbox[k >>> 24]]\n ^ aes_dec[1][aes_sbox[k >>> 16 & 255]]\n ^ aes_dec[2][aes_sbox[k >>> 8 & 255]]\n ^ aes_dec[3][aes_sbox[k & 255]];\n }\n }\n }\n\n // Set rounds number\n asm.set_rounds(ks + 5);\n }\n\n // create library object with necessary properties\n var stdlib = {Uint8Array: Uint8Array, Uint32Array: Uint32Array};\n\n var asm = function (stdlib, foreign, buffer) {\n \"use asm\";\n\n var S0 = 0, S1 = 0, S2 = 0, S3 = 0,\n I0 = 0, I1 = 0, I2 = 0, I3 = 0,\n N0 = 0, N1 = 0, N2 = 0, N3 = 0,\n M0 = 0, M1 = 0, M2 = 0, M3 = 0,\n H0 = 0, H1 = 0, H2 = 0, H3 = 0,\n R = 0;\n\n var HEAP = new stdlib.Uint32Array(buffer),\n DATA = new stdlib.Uint8Array(buffer);\n\n /**\n * AES core\n * @param {number} k - precomputed key schedule offset\n * @param {number} s - precomputed sbox table offset\n * @param {number} t - precomputed round table offset\n * @param {number} r - number of inner rounds to perform\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _core(k, s, t, r, x0, x1, x2, x3) {\n k = k | 0;\n s = s | 0;\n t = t | 0;\n r = r | 0;\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t1 = 0, t2 = 0, t3 = 0,\n y0 = 0, y1 = 0, y2 = 0, y3 = 0,\n i = 0;\n\n t1 = t | 0x400, t2 = t | 0x800, t3 = t | 0xc00;\n\n // round 0\n x0 = x0 ^ HEAP[(k | 0) >> 2],\n x1 = x1 ^ HEAP[(k | 4) >> 2],\n x2 = x2 ^ HEAP[(k | 8) >> 2],\n x3 = x3 ^ HEAP[(k | 12) >> 2];\n\n // round 1..r\n for (i = 16; (i | 0) <= (r << 4); i = (i + 16) | 0) {\n y0 = HEAP[(t | x0 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x1 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x2 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x3 << 2 & 1020) >> 2] ^ HEAP[(k | i | 0) >> 2],\n y1 = HEAP[(t | x1 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x2 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x3 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x0 << 2 & 1020) >> 2] ^ HEAP[(k | i | 4) >> 2],\n y2 = HEAP[(t | x2 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x3 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x0 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x1 << 2 & 1020) >> 2] ^ HEAP[(k | i | 8) >> 2],\n y3 = HEAP[(t | x3 >> 22 & 1020) >> 2] ^ HEAP[(t1 | x0 >> 14 & 1020) >> 2] ^ HEAP[(t2 | x1 >> 6 & 1020) >> 2] ^ HEAP[(t3 | x2 << 2 & 1020) >> 2] ^ HEAP[(k | i | 12) >> 2];\n x0 = y0, x1 = y1, x2 = y2, x3 = y3;\n }\n\n // final round\n S0 = HEAP[(s | x0 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x1 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x2 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x3 << 2 & 1020) >> 2] ^ HEAP[(k | i | 0) >> 2],\n S1 = HEAP[(s | x1 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x2 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x3 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x0 << 2 & 1020) >> 2] ^ HEAP[(k | i | 4) >> 2],\n S2 = HEAP[(s | x2 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x3 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x0 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x1 << 2 & 1020) >> 2] ^ HEAP[(k | i | 8) >> 2],\n S3 = HEAP[(s | x3 >> 22 & 1020) >> 2] << 24 ^ HEAP[(s | x0 >> 14 & 1020) >> 2] << 16 ^ HEAP[(s | x1 >> 6 & 1020) >> 2] << 8 ^ HEAP[(s | x2 << 2 & 1020) >> 2] ^ HEAP[(k | i | 12) >> 2];\n }\n\n /**\n * ECB mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ecb_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(\n 0x0000, 0x0800, 0x1000,\n R,\n x0,\n x1,\n x2,\n x3\n );\n }\n\n /**\n * ECB mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ecb_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t = 0;\n\n _core(\n 0x0400, 0x0c00, 0x2000,\n R,\n x0,\n x3,\n x2,\n x1\n );\n\n t = S1, S1 = S3, S3 = t;\n }\n\n\n /**\n * CBC mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cbc_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(\n 0x0000, 0x0800, 0x1000,\n R,\n I0 ^ x0,\n I1 ^ x1,\n I2 ^ x2,\n I3 ^ x3\n );\n\n I0 = S0,\n I1 = S1,\n I2 = S2,\n I3 = S3;\n }\n\n /**\n * CBC mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cbc_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var t = 0;\n\n _core(\n 0x0400, 0x0c00, 0x2000,\n R,\n x0,\n x3,\n x2,\n x1\n );\n\n t = S1, S1 = S3, S3 = t;\n\n S0 = S0 ^ I0,\n S1 = S1 ^ I1,\n S2 = S2 ^ I2,\n S3 = S3 ^ I3;\n\n I0 = x0,\n I1 = x1,\n I2 = x2,\n I3 = x3;\n }\n\n /**\n * CFB mode encryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cfb_enc(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(\n 0x0000, 0x0800, 0x1000,\n R,\n I0,\n I1,\n I2,\n I3\n );\n\n I0 = S0 = S0 ^ x0,\n I1 = S1 = S1 ^ x1,\n I2 = S2 = S2 ^ x2,\n I3 = S3 = S3 ^ x3;\n }\n\n\n /**\n * CFB mode decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _cfb_dec(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(\n 0x0000, 0x0800, 0x1000,\n R,\n I0,\n I1,\n I2,\n I3\n );\n\n S0 = S0 ^ x0,\n S1 = S1 ^ x1,\n S2 = S2 ^ x2,\n S3 = S3 ^ x3;\n\n I0 = x0,\n I1 = x1,\n I2 = x2,\n I3 = x3;\n }\n\n /**\n * OFB mode encryption / decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ofb(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(\n 0x0000, 0x0800, 0x1000,\n R,\n I0,\n I1,\n I2,\n I3\n );\n\n I0 = S0,\n I1 = S1,\n I2 = S2,\n I3 = S3;\n\n S0 = S0 ^ x0,\n S1 = S1 ^ x1,\n S2 = S2 ^ x2,\n S3 = S3 ^ x3;\n }\n\n /**\n * CTR mode encryption / decryption\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _ctr(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n _core(\n 0x0000, 0x0800, 0x1000,\n R,\n N0,\n N1,\n N2,\n N3\n );\n\n N3 = (~M3 & N3) | M3 & (N3 + 1);\n N2 = (~M2 & N2) | M2 & (N2 + ((N3 | 0) == 0));\n N1 = (~M1 & N1) | M1 & (N1 + ((N2 | 0) == 0));\n N0 = (~M0 & N0) | M0 & (N0 + ((N1 | 0) == 0));\n\n S0 = S0 ^ x0;\n S1 = S1 ^ x1;\n S2 = S2 ^ x2;\n S3 = S3 ^ x3;\n }\n\n /**\n * GCM mode MAC calculation\n * @param {number} x0 - 128-bit input block vector\n * @param {number} x1 - 128-bit input block vector\n * @param {number} x2 - 128-bit input block vector\n * @param {number} x3 - 128-bit input block vector\n */\n function _gcm_mac(x0, x1, x2, x3) {\n x0 = x0 | 0;\n x1 = x1 | 0;\n x2 = x2 | 0;\n x3 = x3 | 0;\n\n var y0 = 0, y1 = 0, y2 = 0, y3 = 0,\n z0 = 0, z1 = 0, z2 = 0, z3 = 0,\n i = 0, c = 0;\n\n x0 = x0 ^ I0,\n x1 = x1 ^ I1,\n x2 = x2 ^ I2,\n x3 = x3 ^ I3;\n\n y0 = H0 | 0,\n y1 = H1 | 0,\n y2 = H2 | 0,\n y3 = H3 | 0;\n\n for (; (i | 0) < 128; i = (i + 1) | 0) {\n if (y0 >>> 31) {\n z0 = z0 ^ x0,\n z1 = z1 ^ x1,\n z2 = z2 ^ x2,\n z3 = z3 ^ x3;\n }\n\n y0 = (y0 << 1) | (y1 >>> 31),\n y1 = (y1 << 1) | (y2 >>> 31),\n y2 = (y2 << 1) | (y3 >>> 31),\n y3 = (y3 << 1);\n\n c = x3 & 1;\n\n x3 = (x3 >>> 1) | (x2 << 31),\n x2 = (x2 >>> 1) | (x1 << 31),\n x1 = (x1 >>> 1) | (x0 << 31),\n x0 = (x0 >>> 1);\n\n if (c) x0 = x0 ^ 0xe1000000;\n }\n\n I0 = z0,\n I1 = z1,\n I2 = z2,\n I3 = z3;\n }\n\n /**\n * Set the internal rounds number.\n * @instance\n * @memberof AES_asm\n * @param {number} r - number if inner AES rounds\n */\n function set_rounds(r) {\n r = r | 0;\n R = r;\n }\n\n /**\n * Populate the internal state of the module.\n * @instance\n * @memberof AES_asm\n * @param {number} s0 - state vector\n * @param {number} s1 - state vector\n * @param {number} s2 - state vector\n * @param {number} s3 - state vector\n */\n function set_state(s0, s1, s2, s3) {\n s0 = s0 | 0;\n s1 = s1 | 0;\n s2 = s2 | 0;\n s3 = s3 | 0;\n\n S0 = s0,\n S1 = s1,\n S2 = s2,\n S3 = s3;\n }\n\n /**\n * Populate the internal iv of the module.\n * @instance\n * @memberof AES_asm\n * @param {number} i0 - iv vector\n * @param {number} i1 - iv vector\n * @param {number} i2 - iv vector\n * @param {number} i3 - iv vector\n */\n function set_iv(i0, i1, i2, i3) {\n i0 = i0 | 0;\n i1 = i1 | 0;\n i2 = i2 | 0;\n i3 = i3 | 0;\n\n I0 = i0,\n I1 = i1,\n I2 = i2,\n I3 = i3;\n }\n\n /**\n * Set nonce for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} n0 - nonce vector\n * @param {number} n1 - nonce vector\n * @param {number} n2 - nonce vector\n * @param {number} n3 - nonce vector\n */\n function set_nonce(n0, n1, n2, n3) {\n n0 = n0 | 0;\n n1 = n1 | 0;\n n2 = n2 | 0;\n n3 = n3 | 0;\n\n N0 = n0,\n N1 = n1,\n N2 = n2,\n N3 = n3;\n }\n\n /**\n * Set counter mask for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} m0 - counter mask vector\n * @param {number} m1 - counter mask vector\n * @param {number} m2 - counter mask vector\n * @param {number} m3 - counter mask vector\n */\n function set_mask(m0, m1, m2, m3) {\n m0 = m0 | 0;\n m1 = m1 | 0;\n m2 = m2 | 0;\n m3 = m3 | 0;\n\n M0 = m0,\n M1 = m1,\n M2 = m2,\n M3 = m3;\n }\n\n /**\n * Set counter for CTR-family modes.\n * @instance\n * @memberof AES_asm\n * @param {number} c0 - counter vector\n * @param {number} c1 - counter vector\n * @param {number} c2 - counter vector\n * @param {number} c3 - counter vector\n */\n function set_counter(c0, c1, c2, c3) {\n c0 = c0 | 0;\n c1 = c1 | 0;\n c2 = c2 | 0;\n c3 = c3 | 0;\n\n N3 = (~M3 & N3) | M3 & c3,\n N2 = (~M2 & N2) | M2 & c2,\n N1 = (~M1 & N1) | M1 & c1,\n N0 = (~M0 & N0) | M0 & c0;\n }\n\n /**\n * Store the internal state vector into the heap.\n * @instance\n * @memberof AES_asm\n * @param {number} pos - offset where to put the data\n * @return {number} The number of bytes have been written into the heap, always 16.\n */\n function get_state(pos) {\n pos = pos | 0;\n\n if (pos & 15) return -1;\n\n DATA[pos | 0] = S0 >>> 24,\n DATA[pos | 1] = S0 >>> 16 & 255,\n DATA[pos | 2] = S0 >>> 8 & 255,\n DATA[pos | 3] = S0 & 255,\n DATA[pos | 4] = S1 >>> 24,\n DATA[pos | 5] = S1 >>> 16 & 255,\n DATA[pos | 6] = S1 >>> 8 & 255,\n DATA[pos | 7] = S1 & 255,\n DATA[pos | 8] = S2 >>> 24,\n DATA[pos | 9] = S2 >>> 16 & 255,\n DATA[pos | 10] = S2 >>> 8 & 255,\n DATA[pos | 11] = S2 & 255,\n DATA[pos | 12] = S3 >>> 24,\n DATA[pos | 13] = S3 >>> 16 & 255,\n DATA[pos | 14] = S3 >>> 8 & 255,\n DATA[pos | 15] = S3 & 255;\n\n return 16;\n }\n\n /**\n * Store the internal iv vector into the heap.\n * @instance\n * @memberof AES_asm\n * @param {number} pos - offset where to put the data\n * @return {number} The number of bytes have been written into the heap, always 16.\n */\n function get_iv(pos) {\n pos = pos | 0;\n\n if (pos & 15) return -1;\n\n DATA[pos | 0] = I0 >>> 24,\n DATA[pos | 1] = I0 >>> 16 & 255,\n DATA[pos | 2] = I0 >>> 8 & 255,\n DATA[pos | 3] = I0 & 255,\n DATA[pos | 4] = I1 >>> 24,\n DATA[pos | 5] = I1 >>> 16 & 255,\n DATA[pos | 6] = I1 >>> 8 & 255,\n DATA[pos | 7] = I1 & 255,\n DATA[pos | 8] = I2 >>> 24,\n DATA[pos | 9] = I2 >>> 16 & 255,\n DATA[pos | 10] = I2 >>> 8 & 255,\n DATA[pos | 11] = I2 & 255,\n DATA[pos | 12] = I3 >>> 24,\n DATA[pos | 13] = I3 >>> 16 & 255,\n DATA[pos | 14] = I3 >>> 8 & 255,\n DATA[pos | 15] = I3 & 255;\n\n return 16;\n }\n\n /**\n * GCM initialization.\n * @instance\n * @memberof AES_asm\n */\n function gcm_init() {\n _ecb_enc(0, 0, 0, 0);\n H0 = S0,\n H1 = S1,\n H2 = S2,\n H3 = S3;\n }\n\n /**\n * Perform ciphering operation on the supplied data.\n * @instance\n * @memberof AES_asm\n * @param {number} mode - block cipher mode (see {@link AES_asm} mode constants)\n * @param {number} pos - offset of the data being processed\n * @param {number} len - length of the data being processed\n * @return {number} Actual amount of data have been processed.\n */\n function cipher(mode, pos, len) {\n mode = mode | 0;\n pos = pos | 0;\n len = len | 0;\n\n var ret = 0;\n\n if (pos & 15) return -1;\n\n while ((len | 0) >= 16) {\n _cipher_modes[mode & 7](\n DATA[pos | 0] << 24 | DATA[pos | 1] << 16 | DATA[pos | 2] << 8 | DATA[pos | 3],\n DATA[pos | 4] << 24 | DATA[pos | 5] << 16 | DATA[pos | 6] << 8 | DATA[pos | 7],\n DATA[pos | 8] << 24 | DATA[pos | 9] << 16 | DATA[pos | 10] << 8 | DATA[pos | 11],\n DATA[pos | 12] << 24 | DATA[pos | 13] << 16 | DATA[pos | 14] << 8 | DATA[pos | 15]\n );\n\n DATA[pos | 0] = S0 >>> 24,\n DATA[pos | 1] = S0 >>> 16 & 255,\n DATA[pos | 2] = S0 >>> 8 & 255,\n DATA[pos | 3] = S0 & 255,\n DATA[pos | 4] = S1 >>> 24,\n DATA[pos | 5] = S1 >>> 16 & 255,\n DATA[pos | 6] = S1 >>> 8 & 255,\n DATA[pos | 7] = S1 & 255,\n DATA[pos | 8] = S2 >>> 24,\n DATA[pos | 9] = S2 >>> 16 & 255,\n DATA[pos | 10] = S2 >>> 8 & 255,\n DATA[pos | 11] = S2 & 255,\n DATA[pos | 12] = S3 >>> 24,\n DATA[pos | 13] = S3 >>> 16 & 255,\n DATA[pos | 14] = S3 >>> 8 & 255,\n DATA[pos | 15] = S3 & 255;\n\n ret = (ret + 16) | 0,\n pos = (pos + 16) | 0,\n len = (len - 16) | 0;\n }\n\n return ret | 0;\n }\n\n /**\n * Calculates MAC of the supplied data.\n * @instance\n * @memberof AES_asm\n * @param {number} mode - block cipher mode (see {@link AES_asm} mode constants)\n * @param {number} pos - offset of the data being processed\n * @param {number} len - length of the data being processed\n * @return {number} Actual amount of data have been processed.\n */\n function mac(mode, pos, len) {\n mode = mode | 0;\n pos = pos | 0;\n len = len | 0;\n\n var ret = 0;\n\n if (pos & 15) return -1;\n\n while ((len | 0) >= 16) {\n _mac_modes[mode & 1](\n DATA[pos | 0] << 24 | DATA[pos | 1] << 16 | DATA[pos | 2] << 8 | DATA[pos | 3],\n DATA[pos | 4] << 24 | DATA[pos | 5] << 16 | DATA[pos | 6] << 8 | DATA[pos | 7],\n DATA[pos | 8] << 24 | DATA[pos | 9] << 16 | DATA[pos | 10] << 8 | DATA[pos | 11],\n DATA[pos | 12] << 24 | DATA[pos | 13] << 16 | DATA[pos | 14] << 8 | DATA[pos | 15]\n );\n\n ret = (ret + 16) | 0,\n pos = (pos + 16) | 0,\n len = (len - 16) | 0;\n }\n\n return ret | 0;\n }\n\n /**\n * AES cipher modes table (virual methods)\n */\n var _cipher_modes = [_ecb_enc, _ecb_dec, _cbc_enc, _cbc_dec, _cfb_enc, _cfb_dec, _ofb, _ctr];\n\n /**\n * AES MAC modes table (virual methods)\n */\n var _mac_modes = [_cbc_enc, _gcm_mac];\n\n /**\n * Asm.js module exports\n */\n return {\n set_rounds: set_rounds,\n set_state: set_state,\n set_iv: set_iv,\n set_nonce: set_nonce,\n set_mask: set_mask,\n set_counter: set_counter,\n get_state: get_state,\n get_iv: get_iv,\n gcm_init: gcm_init,\n cipher: cipher,\n mac: mac,\n };\n }(stdlib, foreign, buffer);\n\n asm.set_key = set_key;\n\n return asm;\n };\n\n /**\n * AES enciphering mode constants\n * @enum {number}\n * @const\n */\n wrapper.ENC = {\n ECB: 0,\n CBC: 2,\n CFB: 4,\n OFB: 6,\n CTR: 7,\n },\n\n /**\n * AES deciphering mode constants\n * @enum {number}\n * @const\n */\n wrapper.DEC = {\n ECB: 1,\n CBC: 3,\n CFB: 5,\n OFB: 6,\n CTR: 7,\n },\n\n /**\n * AES MAC mode constants\n * @enum {number}\n * @const\n */\n wrapper.MAC = {\n CBC: 0,\n GCM: 1,\n };\n\n /**\n * Heap data offset\n * @type {number}\n * @const\n */\n wrapper.HEAP_DATA = 0x4000;\n\n return wrapper;\n}();\n","const local_atob = typeof atob === 'undefined' ? (str) => require('buffer').Buffer.from(str, 'base64').toString('binary') : atob;\nconst local_btoa = typeof btoa === 'undefined' ? (str) => require('buffer').Buffer.from(str, 'binary').toString('base64') : btoa;\nexport function string_to_bytes(str, utf8 = false) {\n var len = str.length, bytes = new Uint8Array(utf8 ? 4 * len : len);\n for (var i = 0, j = 0; i < len; i++) {\n var c = str.charCodeAt(i);\n if (utf8 && 0xd800 <= c && c <= 0xdbff) {\n if (++i >= len)\n throw new Error('Malformed string, low surrogate expected at position ' + i);\n c = ((c ^ 0xd800) << 10) | 0x10000 | (str.charCodeAt(i) ^ 0xdc00);\n }\n else if (!utf8 && c >>> 8) {\n throw new Error('Wide characters are not allowed.');\n }\n if (!utf8 || c <= 0x7f) {\n bytes[j++] = c;\n }\n else if (c <= 0x7ff) {\n bytes[j++] = 0xc0 | (c >> 6);\n bytes[j++] = 0x80 | (c & 0x3f);\n }\n else if (c <= 0xffff) {\n bytes[j++] = 0xe0 | (c >> 12);\n bytes[j++] = 0x80 | ((c >> 6) & 0x3f);\n bytes[j++] = 0x80 | (c & 0x3f);\n }\n else {\n bytes[j++] = 0xf0 | (c >> 18);\n bytes[j++] = 0x80 | ((c >> 12) & 0x3f);\n bytes[j++] = 0x80 | ((c >> 6) & 0x3f);\n bytes[j++] = 0x80 | (c & 0x3f);\n }\n }\n return bytes.subarray(0, j);\n}\nexport function hex_to_bytes(str) {\n var len = str.length;\n if (len & 1) {\n str = '0' + str;\n len++;\n }\n var bytes = new Uint8Array(len >> 1);\n for (var i = 0; i < len; i += 2) {\n bytes[i >> 1] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n}\nexport function base64_to_bytes(str) {\n return string_to_bytes(local_atob(str));\n}\nexport function bytes_to_string(bytes, utf8 = false) {\n var len = bytes.length, chars = new Array(len);\n for (var i = 0, j = 0; i < len; i++) {\n var b = bytes[i];\n if (!utf8 || b < 128) {\n chars[j++] = b;\n }\n else if (b >= 192 && b < 224 && i + 1 < len) {\n chars[j++] = ((b & 0x1f) << 6) | (bytes[++i] & 0x3f);\n }\n else if (b >= 224 && b < 240 && i + 2 < len) {\n chars[j++] = ((b & 0xf) << 12) | ((bytes[++i] & 0x3f) << 6) | (bytes[++i] & 0x3f);\n }\n else if (b >= 240 && b < 248 && i + 3 < len) {\n var c = ((b & 7) << 18) | ((bytes[++i] & 0x3f) << 12) | ((bytes[++i] & 0x3f) << 6) | (bytes[++i] & 0x3f);\n if (c <= 0xffff) {\n chars[j++] = c;\n }\n else {\n c ^= 0x10000;\n chars[j++] = 0xd800 | (c >> 10);\n chars[j++] = 0xdc00 | (c & 0x3ff);\n }\n }\n else {\n throw new Error('Malformed UTF8 character at byte offset ' + i);\n }\n }\n var str = '', bs = 16384;\n for (var i = 0; i < j; i += bs) {\n str += String.fromCharCode.apply(String, chars.slice(i, i + bs <= j ? i + bs : j));\n }\n return str;\n}\nexport function bytes_to_hex(arr) {\n var str = '';\n for (var i = 0; i < arr.length; i++) {\n var h = (arr[i] & 0xff).toString(16);\n if (h.length < 2)\n str += '0';\n str += h;\n }\n return str;\n}\nexport function bytes_to_base64(arr) {\n return local_btoa(bytes_to_string(arr));\n}\nexport function pow2_ceil(a) {\n a -= 1;\n a |= a >>> 1;\n a |= a >>> 2;\n a |= a >>> 4;\n a |= a >>> 8;\n a |= a >>> 16;\n a += 1;\n return a;\n}\nexport function is_number(a) {\n return typeof a === 'number';\n}\nexport function is_string(a) {\n return typeof a === 'string';\n}\nexport function is_buffer(a) {\n return a instanceof ArrayBuffer;\n}\nexport function is_bytes(a) {\n return a instanceof Uint8Array;\n}\nexport function is_typed_array(a) {\n return (a instanceof Int8Array ||\n a instanceof Uint8Array ||\n a instanceof Int16Array ||\n a instanceof Uint16Array ||\n a instanceof Int32Array ||\n a instanceof Uint32Array ||\n a instanceof Float32Array ||\n a instanceof Float64Array);\n}\nexport function _heap_init(heap, heapSize) {\n const size = heap ? heap.byteLength : heapSize || 65536;\n if (size & 0xfff || size <= 0)\n throw new Error('heap size must be a positive integer and a multiple of 4096');\n heap = heap || new Uint8Array(new ArrayBuffer(size));\n return heap;\n}\nexport function _heap_write(heap, hpos, data, dpos, dlen) {\n const hlen = heap.length - hpos;\n const wlen = hlen < dlen ? hlen : dlen;\n heap.set(data.subarray(dpos, dpos + wlen), hpos);\n return wlen;\n}\nexport function joinBytes(...arg) {\n const totalLenght = arg.reduce((sum, curr) => sum + curr.length, 0);\n const ret = new Uint8Array(totalLenght);\n let cursor = 0;\n for (let i = 0; i < arg.length; i++) {\n ret.set(arg[i], cursor);\n cursor += arg[i].length;\n }\n return ret;\n}\n","export class IllegalStateError extends Error {\n constructor(...args) {\n super(...args);\n Object.create(Error.prototype, { name: { value: 'IllegalStateError' } });\n }\n}\nexport class IllegalArgumentError extends Error {\n constructor(...args) {\n super(...args);\n Object.create(Error.prototype, { name: { value: 'IllegalArgumentError' } });\n }\n}\nexport class SecurityError extends Error {\n constructor(...args) {\n super(...args);\n Object.create(Error.prototype, { name: { value: 'SecurityError' } });\n }\n}\n","import { AES_asm } from './aes.asm';\nimport { _heap_init, _heap_write, is_bytes } from '../other/utils';\nimport { IllegalArgumentError, SecurityError } from '../other/errors';\nconst heap_pool = [];\nconst asm_pool = [];\nexport class AES {\n constructor(key, iv, padding = true, mode, heap, asm) {\n this.pos = 0;\n this.len = 0;\n this.mode = mode;\n // The AES object state\n this.pos = 0;\n this.len = 0;\n this.key = key;\n this.iv = iv;\n this.padding = padding;\n // The AES \"worker\"\n this.acquire_asm(heap, asm);\n }\n acquire_asm(heap, asm) {\n if (this.heap === undefined || this.asm === undefined) {\n this.heap = heap || heap_pool.pop() || _heap_init().subarray(AES_asm.HEAP_DATA);\n this.asm = asm || asm_pool.pop() || new AES_asm(null, this.heap.buffer);\n this.reset(this.key, this.iv);\n }\n return { heap: this.heap, asm: this.asm };\n }\n release_asm() {\n if (this.heap !== undefined && this.asm !== undefined) {\n heap_pool.push(this.heap);\n asm_pool.push(this.asm);\n }\n this.heap = undefined;\n this.asm = undefined;\n }\n reset(key, iv) {\n const { asm } = this.acquire_asm();\n // Key\n const keylen = key.length;\n if (keylen !== 16 && keylen !== 24 && keylen !== 32)\n throw new IllegalArgumentError('illegal key size');\n const keyview = new DataView(key.buffer, key.byteOffset, key.byteLength);\n asm.set_key(keylen >> 2, keyview.getUint32(0), keyview.getUint32(4), keyview.getUint32(8), keyview.getUint32(12), keylen > 16 ? keyview.getUint32(16) : 0, keylen > 16 ? keyview.getUint32(20) : 0, keylen > 24 ? keyview.getUint32(24) : 0, keylen > 24 ? keyview.getUint32(28) : 0);\n // IV\n if (iv !== undefined) {\n if (iv.length !== 16)\n throw new IllegalArgumentError('illegal iv size');\n let ivview = new DataView(iv.buffer, iv.byteOffset, iv.byteLength);\n asm.set_iv(ivview.getUint32(0), ivview.getUint32(4), ivview.getUint32(8), ivview.getUint32(12));\n }\n else {\n asm.set_iv(0, 0, 0, 0);\n }\n }\n AES_Encrypt_process(data) {\n if (!is_bytes(data))\n throw new TypeError(\"data isn't of expected type\");\n let { heap, asm } = this.acquire_asm();\n let amode = AES_asm.ENC[this.mode];\n let hpos = AES_asm.HEAP_DATA;\n let pos = this.pos;\n let len = this.len;\n let dpos = 0;\n let dlen = data.length || 0;\n let rpos = 0;\n let rlen = (len + dlen) & -16;\n let wlen = 0;\n let result = new Uint8Array(rlen);\n while (dlen > 0) {\n wlen = _heap_write(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n wlen = asm.cipher(amode, hpos + pos, len);\n if (wlen)\n result.set(heap.subarray(pos, pos + wlen), rpos);\n rpos += wlen;\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n }\n else {\n pos = 0;\n len = 0;\n }\n }\n this.pos = pos;\n this.len = len;\n return result;\n }\n AES_Encrypt_finish() {\n let { heap, asm } = this.acquire_asm();\n let amode = AES_asm.ENC[this.mode];\n let hpos = AES_asm.HEAP_DATA;\n let pos = this.pos;\n let len = this.len;\n let plen = 16 - (len % 16);\n let rlen = len;\n if (this.hasOwnProperty('padding')) {\n if (this.padding) {\n for (let p = 0; p < plen; ++p) {\n heap[pos + len + p] = plen;\n }\n len += plen;\n rlen = len;\n }\n else if (len % 16) {\n throw new IllegalArgumentError('data length must be a multiple of the block size');\n }\n }\n else {\n len += plen;\n }\n const result = new Uint8Array(rlen);\n if (len)\n asm.cipher(amode, hpos + pos, len);\n if (rlen)\n result.set(heap.subarray(pos, pos + rlen));\n this.pos = 0;\n this.len = 0;\n this.release_asm();\n return result;\n }\n AES_Decrypt_process(data) {\n if (!is_bytes(data))\n throw new TypeError(\"data isn't of expected type\");\n let { heap, asm } = this.acquire_asm();\n let amode = AES_asm.DEC[this.mode];\n let hpos = AES_asm.HEAP_DATA;\n let pos = this.pos;\n let len = this.len;\n let dpos = 0;\n let dlen = data.length || 0;\n let rpos = 0;\n let rlen = (len + dlen) & -16;\n let plen = 0;\n let wlen = 0;\n if (this.padding) {\n plen = len + dlen - rlen || 16;\n rlen -= plen;\n }\n const result = new Uint8Array(rlen);\n while (dlen > 0) {\n wlen = _heap_write(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n wlen = asm.cipher(amode, hpos + pos, len - (!dlen ? plen : 0));\n if (wlen)\n result.set(heap.subarray(pos, pos + wlen), rpos);\n rpos += wlen;\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n }\n else {\n pos = 0;\n len = 0;\n }\n }\n this.pos = pos;\n this.len = len;\n return result;\n }\n AES_Decrypt_finish() {\n let { heap, asm } = this.acquire_asm();\n let amode = AES_asm.DEC[this.mode];\n let hpos = AES_asm.HEAP_DATA;\n let pos = this.pos;\n let len = this.len;\n let rlen = len;\n if (len > 0) {\n if (len % 16) {\n if (this.hasOwnProperty('padding')) {\n throw new IllegalArgumentError('data length must be a multiple of the block size');\n }\n else {\n len += 16 - (len % 16);\n }\n }\n asm.cipher(amode, hpos + pos, len);\n if (this.hasOwnProperty('padding') && this.padding) {\n let pad = heap[pos + rlen - 1];\n if (pad < 1 || pad > 16 || pad > rlen)\n throw new SecurityError('bad padding');\n let pcheck = 0;\n for (let i = pad; i > 1; i--)\n pcheck |= pad ^ heap[pos + rlen - i];\n if (pcheck)\n throw new SecurityError('bad padding');\n rlen -= pad;\n }\n }\n const result = new Uint8Array(rlen);\n if (rlen > 0) {\n result.set(heap.subarray(pos, pos + rlen));\n }\n this.pos = 0;\n this.len = 0;\n this.release_asm();\n return result;\n }\n}\n","import { AES } from './aes';\nimport { joinBytes } from '../other/utils';\nexport class AES_ECB {\n static encrypt(data, key, padding = false) {\n return new AES_ECB(key, padding).encrypt(data);\n }\n static decrypt(data, key, padding = false) {\n return new AES_ECB(key, padding).decrypt(data);\n }\n constructor(key, padding = false, aes) {\n this.aes = aes ? aes : new AES(key, undefined, padding, 'ECB');\n }\n encrypt(data) {\n const r1 = this.aes.AES_Encrypt_process(data);\n const r2 = this.aes.AES_Encrypt_finish();\n return joinBytes(r1, r2);\n }\n decrypt(data) {\n const r1 = this.aes.AES_Decrypt_process(data);\n const r2 = this.aes.AES_Decrypt_finish();\n return joinBytes(r1, r2);\n }\n}\n","import { AES_ECB } from '@openpgp/asmcrypto.js/dist_es8/aes/ecb';\n\n/**\n * Javascript AES implementation.\n * This is used as fallback if the native Crypto APIs are not available.\n */\nfunction aes(length) {\n const C = function(key) {\n const aesECB = new AES_ECB(key);\n\n this.encrypt = function(block) {\n return aesECB.encrypt(block);\n };\n\n this.decrypt = function(block) {\n return aesECB.decrypt(block);\n };\n };\n\n C.blockSize = C.prototype.blockSize = 16;\n C.keySize = C.prototype.keySize = length / 8;\n\n return C;\n}\n\nexport default aes;\n","//Paul Tero, July 2001\n//http://www.tero.co.uk/des/\n//\n//Optimised for performance with large blocks by Michael Hayworth, November 2001\n//http://www.netdealing.com\n//\n// Modified by Recurity Labs GmbH\n\n//THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n//ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n//HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n//OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n//SUCH DAMAGE.\n\n//des\n//this takes the key, the message, and whether to encrypt or decrypt\n\nfunction des(keys, message, encrypt, mode, iv, padding) {\n //declaring this locally speeds things up a bit\n const spfunction1 = [\n 0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400,\n 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000,\n 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4,\n 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404,\n 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400,\n 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004\n ];\n const spfunction2 = [\n -0x7fef7fe0, -0x7fff8000, 0x8000, 0x108020, 0x100000, 0x20, -0x7fefffe0, -0x7fff7fe0,\n -0x7fffffe0, -0x7fef7fe0, -0x7fef8000, -0x80000000, -0x7fff8000, 0x100000, 0x20, -0x7fefffe0, 0x108000, 0x100020,\n -0x7fff7fe0, 0, -0x80000000, 0x8000, 0x108020, -0x7ff00000, 0x100020, -0x7fffffe0, 0, 0x108000, 0x8020, -0x7fef8000,\n -0x7ff00000, 0x8020, 0, 0x108020, -0x7fefffe0, 0x100000, -0x7fff7fe0, -0x7ff00000, -0x7fef8000, 0x8000, -0x7ff00000,\n -0x7fff8000, 0x20, -0x7fef7fe0, 0x108020, 0x20, 0x8000, -0x80000000, 0x8020, -0x7fef8000, 0x100000, -0x7fffffe0,\n 0x100020, -0x7fff7fe0, -0x7fffffe0, 0x100020, 0x108000, 0, -0x7fff8000, 0x8020, -0x80000000, -0x7fefffe0,\n -0x7fef7fe0, 0x108000\n ];\n const spfunction3 = [\n 0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008,\n 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000,\n 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000,\n 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0,\n 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208,\n 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200\n ];\n const spfunction4 = [\n 0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000,\n 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080,\n 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0,\n 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001,\n 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080\n ];\n const spfunction5 = [\n 0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000,\n 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000,\n 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100,\n 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100,\n 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100,\n 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0,\n 0x40080000, 0x2080100, 0x40000100\n ];\n const spfunction6 = [\n 0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000,\n 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010,\n 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000,\n 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000,\n 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000,\n 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010\n ];\n const spfunction7 = [\n 0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802,\n 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002,\n 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000,\n 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000,\n 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0,\n 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002\n ];\n const spfunction8 = [\n 0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000,\n 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000,\n 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040,\n 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040,\n 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000,\n 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000\n ];\n\n //create the 16 or 48 subkeys we will need\n let m = 0;\n let i;\n let j;\n let temp;\n let right1;\n let right2;\n let left;\n let right;\n let looping;\n let cbcleft;\n let cbcleft2;\n let cbcright;\n let cbcright2;\n let endloop;\n let loopinc;\n let len = message.length;\n\n //set up the loops for single and triple des\n const iterations = keys.length === 32 ? 3 : 9; //single or triple des\n if (iterations === 3) {\n looping = encrypt ? [0, 32, 2] : [30, -2, -2];\n } else {\n looping = encrypt ? [0, 32, 2, 62, 30, -2, 64, 96, 2] : [94, 62, -2, 32, 64, 2, 30, -2, -2];\n }\n\n //pad the message depending on the padding parameter\n //only add padding if encrypting - note that you need to use the same padding option for both encrypt and decrypt\n if (encrypt) {\n message = desAddPadding(message, padding);\n len = message.length;\n }\n\n //store the result here\n let result = new Uint8Array(len);\n let k = 0;\n\n if (mode === 1) { //CBC mode\n cbcleft = (iv[m++] << 24) | (iv[m++] << 16) | (iv[m++] << 8) | iv[m++];\n cbcright = (iv[m++] << 24) | (iv[m++] << 16) | (iv[m++] << 8) | iv[m++];\n m = 0;\n }\n\n //loop through each 64 bit chunk of the message\n while (m < len) {\n left = (message[m++] << 24) | (message[m++] << 16) | (message[m++] << 8) | message[m++];\n right = (message[m++] << 24) | (message[m++] << 16) | (message[m++] << 8) | message[m++];\n\n //for Cipher Block Chaining mode, xor the message with the previous result\n if (mode === 1) {\n if (encrypt) {\n left ^= cbcleft;\n right ^= cbcright;\n } else {\n cbcleft2 = cbcleft;\n cbcright2 = cbcright;\n cbcleft = left;\n cbcright = right;\n }\n }\n\n //first each 64 but chunk of the message must be permuted according to IP\n temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= (temp << 4);\n temp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= temp;\n left ^= (temp << 16);\n temp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= temp;\n right ^= (temp << 2);\n temp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= (temp << 8);\n temp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= temp;\n left ^= (temp << 1);\n\n left = ((left << 1) | (left >>> 31));\n right = ((right << 1) | (right >>> 31));\n\n //do this either 1 or 3 times for each chunk of the message\n for (j = 0; j < iterations; j += 3) {\n endloop = looping[j + 1];\n loopinc = looping[j + 2];\n //now go through and perform the encryption or decryption\n for (i = looping[j]; i !== endloop; i += loopinc) { //for efficiency\n right1 = right ^ keys[i];\n right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];\n //the result is attained by passing these bytes through the S selection functions\n temp = left;\n left = right;\n right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f] | spfunction6[(right1 >>>\n 8) & 0x3f] | spfunction8[right1 & 0x3f] | spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) &\n 0x3f] | spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]);\n }\n temp = left;\n left = right;\n right = temp; //unreverse left and right\n } //for either 1 or 3 iterations\n\n //move then each one bit to the right\n left = ((left >>> 1) | (left << 31));\n right = ((right >>> 1) | (right << 31));\n\n //now perform IP-1, which is IP in the opposite direction\n temp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= temp;\n left ^= (temp << 1);\n temp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= (temp << 8);\n temp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= temp;\n right ^= (temp << 2);\n temp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= temp;\n left ^= (temp << 16);\n temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= (temp << 4);\n\n //for Cipher Block Chaining mode, xor the message with the previous result\n if (mode === 1) {\n if (encrypt) {\n cbcleft = left;\n cbcright = right;\n } else {\n left ^= cbcleft2;\n right ^= cbcright2;\n }\n }\n\n result[k++] = (left >>> 24);\n result[k++] = ((left >>> 16) & 0xff);\n result[k++] = ((left >>> 8) & 0xff);\n result[k++] = (left & 0xff);\n result[k++] = (right >>> 24);\n result[k++] = ((right >>> 16) & 0xff);\n result[k++] = ((right >>> 8) & 0xff);\n result[k++] = (right & 0xff);\n } //for every 8 characters, or 64 bits in the message\n\n //only remove padding if decrypting - note that you need to use the same padding option for both encrypt and decrypt\n if (!encrypt) {\n result = desRemovePadding(result, padding);\n }\n\n return result;\n} //end of des\n\n\n//desCreateKeys\n//this takes as input a 64 bit key (even though only 56 bits are used)\n//as an array of 2 integers, and returns 16 48 bit keys\n\nfunction desCreateKeys(key) {\n //declaring this locally speeds things up a bit\n const pc2bytes0 = [\n 0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204,\n 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204\n ];\n const pc2bytes1 = [\n 0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100,\n 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101\n ];\n const pc2bytes2 = [\n 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808,\n 0x1000000, 0x1000008, 0x1000800, 0x1000808\n ];\n const pc2bytes3 = [\n 0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000,\n 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000\n ];\n const pc2bytes4 = [\n 0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000,\n 0x41000, 0x1010, 0x41010\n ];\n const pc2bytes5 = [\n 0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420,\n 0x2000000, 0x2000400, 0x2000020, 0x2000420\n ];\n const pc2bytes6 = [\n 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000,\n 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002\n ];\n const pc2bytes7 = [\n 0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000,\n 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800\n ];\n const pc2bytes8 = [\n 0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000,\n 0x2000002, 0x2040002, 0x2000002, 0x2040002\n ];\n const pc2bytes9 = [\n 0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408,\n 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408\n ];\n const pc2bytes10 = [\n 0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020,\n 0x102000, 0x102020, 0x102000, 0x102020\n ];\n const pc2bytes11 = [\n 0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000,\n 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200\n ];\n const pc2bytes12 = [\n 0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010,\n 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010\n ];\n const pc2bytes13 = [0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105];\n\n //how many iterations (1 for des, 3 for triple des)\n const iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n //stores the return keys\n const keys = new Array(32 * iterations);\n //now define the left shifts which need to be done\n const shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n //other variables\n let lefttemp;\n let righttemp;\n let m = 0;\n let n = 0;\n let temp;\n\n for (let j = 0; j < iterations; j++) { //either 1 or 3 iterations\n let left = (key[m++] << 24) | (key[m++] << 16) | (key[m++] << 8) | key[m++];\n let right = (key[m++] << 24) | (key[m++] << 16) | (key[m++] << 8) | key[m++];\n\n temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= temp;\n left ^= (temp << 4);\n temp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= temp;\n right ^= (temp << -16);\n temp = ((left >>> 2) ^ right) & 0x33333333;\n right ^= temp;\n left ^= (temp << 2);\n temp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= temp;\n right ^= (temp << -16);\n temp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= temp;\n left ^= (temp << 1);\n temp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= temp;\n right ^= (temp << 8);\n temp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= temp;\n left ^= (temp << 1);\n\n //the right side needs to be shifted and to get the last four bits of the left side\n temp = (left << 8) | ((right >>> 20) & 0x000000f0);\n //left needs to be put upside down\n left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);\n right = temp;\n\n //now go through and perform these shifts on the left and right keys\n for (let i = 0; i < shifts.length; i++) {\n //shift the keys either one or two bits to the left\n if (shifts[i]) {\n left = (left << 2) | (left >>> 26);\n right = (right << 2) | (right >>> 26);\n } else {\n left = (left << 1) | (left >>> 27);\n right = (right << 1) | (right >>> 27);\n }\n left &= -0xf;\n right &= -0xf;\n\n //now apply PC-2, in such a way that E is easier when encrypting or decrypting\n //this conversion will look like PC-2 except only the last 6 bits of each byte are used\n //rather than 48 consecutive bits and the order of lines will be according to\n //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7\n lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] | pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(\n left >>> 16) & 0xf] | pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] | pc2bytes6[(left >>> 4) &\n 0xf];\n righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] | pc2bytes9[(right >>> 20) & 0xf] |\n pc2bytes10[(right >>> 16) & 0xf] | pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |\n pc2bytes13[(right >>> 4) & 0xf];\n temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;\n keys[n++] = lefttemp ^ temp;\n keys[n++] = righttemp ^ (temp << 16);\n }\n } //for each iterations\n //return the keys we've created\n return keys;\n} //end of desCreateKeys\n\n\nfunction desAddPadding(message, padding) {\n const padLength = 8 - (message.length % 8);\n\n let pad;\n if (padding === 2 && (padLength < 8)) { //pad the message with spaces\n pad = ' '.charCodeAt(0);\n } else if (padding === 1) { //PKCS7 padding\n pad = padLength;\n } else if (!padding && (padLength < 8)) { //pad the message out with null bytes\n pad = 0;\n } else if (padLength === 8) {\n return message;\n } else {\n throw new Error('des: invalid padding');\n }\n\n const paddedMessage = new Uint8Array(message.length + padLength);\n for (let i = 0; i < message.length; i++) {\n paddedMessage[i] = message[i];\n }\n for (let j = 0; j < padLength; j++) {\n paddedMessage[message.length + j] = pad;\n }\n\n return paddedMessage;\n}\n\nfunction desRemovePadding(message, padding) {\n let padLength = null;\n let pad;\n if (padding === 2) { // space padded\n pad = ' '.charCodeAt(0);\n } else if (padding === 1) { // PKCS7\n padLength = message[message.length - 1];\n } else if (!padding) { // null padding\n pad = 0;\n } else {\n throw new Error('des: invalid padding');\n }\n\n if (!padLength) {\n padLength = 1;\n while (message[message.length - padLength] === pad) {\n padLength++;\n }\n padLength--;\n }\n\n return message.subarray(0, message.length - padLength);\n}\n\n// added by Recurity Labs\n\nexport function TripleDES(key) {\n this.key = [];\n\n for (let i = 0; i < 3; i++) {\n this.key.push(new Uint8Array(key.subarray(i * 8, (i * 8) + 8)));\n }\n\n this.encrypt = function(block) {\n return des(\n desCreateKeys(this.key[2]),\n des(\n desCreateKeys(this.key[1]),\n des(\n desCreateKeys(this.key[0]),\n block, true, 0, null, null\n ),\n false, 0, null, null\n ), true, 0, null, null\n );\n };\n}\n\nTripleDES.keySize = TripleDES.prototype.keySize = 24;\nTripleDES.blockSize = TripleDES.prototype.blockSize = 8;\n\n// This is \"original\" DES\n\nexport function DES(key) {\n this.key = key;\n\n this.encrypt = function(block, padding) {\n const keys = desCreateKeys(this.key);\n return des(keys, block, true, 0, null, padding);\n };\n\n this.decrypt = function(block, padding) {\n const keys = desCreateKeys(this.key);\n return des(keys, block, false, 0, null, padding);\n };\n}\n","// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Copyright 2010 pjacobs@xeekr.com . All rights reserved.\n\n// Modified by Recurity Labs GmbH\n\n// fixed/modified by Herbert Hanewinkel, www.haneWIN.de\n// check www.haneWIN.de for the latest version\n\n// cast5.js is a Javascript implementation of CAST-128, as defined in RFC 2144.\n// CAST-128 is a common OpenPGP cipher.\n\n\n// CAST5 constructor\n\nfunction OpenPGPSymEncCAST5() {\n this.BlockSize = 8;\n this.KeySize = 16;\n\n this.setKey = function(key) {\n this.masking = new Array(16);\n this.rotate = new Array(16);\n\n this.reset();\n\n if (key.length === this.KeySize) {\n this.keySchedule(key);\n } else {\n throw new Error('CAST-128: keys must be 16 bytes');\n }\n return true;\n };\n\n this.reset = function() {\n for (let i = 0; i < 16; i++) {\n this.masking[i] = 0;\n this.rotate[i] = 0;\n }\n };\n\n this.getBlockSize = function() {\n return this.BlockSize;\n };\n\n this.encrypt = function(src) {\n const dst = new Array(src.length);\n\n for (let i = 0; i < src.length; i += 8) {\n let l = (src[i] << 24) | (src[i + 1] << 16) | (src[i + 2] << 8) | src[i + 3];\n let r = (src[i + 4] << 24) | (src[i + 5] << 16) | (src[i + 6] << 8) | src[i + 7];\n let t;\n\n t = r;\n r = l ^ f1(r, this.masking[0], this.rotate[0]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[1], this.rotate[1]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[2], this.rotate[2]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[3], this.rotate[3]);\n l = t;\n\n t = r;\n r = l ^ f2(r, this.masking[4], this.rotate[4]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[5], this.rotate[5]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[6], this.rotate[6]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[7], this.rotate[7]);\n l = t;\n\n t = r;\n r = l ^ f3(r, this.masking[8], this.rotate[8]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[9], this.rotate[9]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[10], this.rotate[10]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[11], this.rotate[11]);\n l = t;\n\n t = r;\n r = l ^ f1(r, this.masking[12], this.rotate[12]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[13], this.rotate[13]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[14], this.rotate[14]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[15], this.rotate[15]);\n l = t;\n\n dst[i] = (r >>> 24) & 255;\n dst[i + 1] = (r >>> 16) & 255;\n dst[i + 2] = (r >>> 8) & 255;\n dst[i + 3] = r & 255;\n dst[i + 4] = (l >>> 24) & 255;\n dst[i + 5] = (l >>> 16) & 255;\n dst[i + 6] = (l >>> 8) & 255;\n dst[i + 7] = l & 255;\n }\n\n return dst;\n };\n\n this.decrypt = function(src) {\n const dst = new Array(src.length);\n\n for (let i = 0; i < src.length; i += 8) {\n let l = (src[i] << 24) | (src[i + 1] << 16) | (src[i + 2] << 8) | src[i + 3];\n let r = (src[i + 4] << 24) | (src[i + 5] << 16) | (src[i + 6] << 8) | src[i + 7];\n let t;\n\n t = r;\n r = l ^ f1(r, this.masking[15], this.rotate[15]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[14], this.rotate[14]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[13], this.rotate[13]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[12], this.rotate[12]);\n l = t;\n\n t = r;\n r = l ^ f3(r, this.masking[11], this.rotate[11]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[10], this.rotate[10]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[9], this.rotate[9]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[8], this.rotate[8]);\n l = t;\n\n t = r;\n r = l ^ f2(r, this.masking[7], this.rotate[7]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[6], this.rotate[6]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[5], this.rotate[5]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[4], this.rotate[4]);\n l = t;\n\n t = r;\n r = l ^ f1(r, this.masking[3], this.rotate[3]);\n l = t;\n t = r;\n r = l ^ f3(r, this.masking[2], this.rotate[2]);\n l = t;\n t = r;\n r = l ^ f2(r, this.masking[1], this.rotate[1]);\n l = t;\n t = r;\n r = l ^ f1(r, this.masking[0], this.rotate[0]);\n l = t;\n\n dst[i] = (r >>> 24) & 255;\n dst[i + 1] = (r >>> 16) & 255;\n dst[i + 2] = (r >>> 8) & 255;\n dst[i + 3] = r & 255;\n dst[i + 4] = (l >>> 24) & 255;\n dst[i + 5] = (l >> 16) & 255;\n dst[i + 6] = (l >> 8) & 255;\n dst[i + 7] = l & 255;\n }\n\n return dst;\n };\n const scheduleA = new Array(4);\n\n scheduleA[0] = new Array(4);\n scheduleA[0][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 0x8];\n scheduleA[0][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];\n scheduleA[0][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];\n scheduleA[0][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];\n\n scheduleA[1] = new Array(4);\n scheduleA[1][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];\n scheduleA[1][1] = [1, 4, 0, 2, 1, 3, 16 + 2];\n scheduleA[1][2] = [2, 5, 7, 6, 5, 4, 16 + 1];\n scheduleA[1][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];\n\n scheduleA[2] = new Array(4);\n scheduleA[2][0] = [4, 0, 0xd, 0xf, 0xc, 0xe, 8];\n scheduleA[2][1] = [5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa];\n scheduleA[2][2] = [6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9];\n scheduleA[2][3] = [7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb];\n\n\n scheduleA[3] = new Array(4);\n scheduleA[3][0] = [0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0];\n scheduleA[3][1] = [1, 4, 0, 2, 1, 3, 16 + 2];\n scheduleA[3][2] = [2, 5, 7, 6, 5, 4, 16 + 1];\n scheduleA[3][3] = [3, 7, 0xa, 9, 0xb, 8, 16 + 3];\n\n const scheduleB = new Array(4);\n\n scheduleB[0] = new Array(4);\n scheduleB[0][0] = [16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2];\n scheduleB[0][1] = [16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6];\n scheduleB[0][2] = [16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9];\n scheduleB[0][3] = [16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc];\n\n scheduleB[1] = new Array(4);\n scheduleB[1][0] = [3, 2, 0xc, 0xd, 8];\n scheduleB[1][1] = [1, 0, 0xe, 0xf, 0xd];\n scheduleB[1][2] = [7, 6, 8, 9, 3];\n scheduleB[1][3] = [5, 4, 0xa, 0xb, 7];\n\n\n scheduleB[2] = new Array(4);\n scheduleB[2][0] = [16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9];\n scheduleB[2][1] = [16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc];\n scheduleB[2][2] = [16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2];\n scheduleB[2][3] = [16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6];\n\n\n scheduleB[3] = new Array(4);\n scheduleB[3][0] = [8, 9, 7, 6, 3];\n scheduleB[3][1] = [0xa, 0xb, 5, 4, 7];\n scheduleB[3][2] = [0xc, 0xd, 3, 2, 8];\n scheduleB[3][3] = [0xe, 0xf, 1, 0, 0xd];\n\n // changed 'in' to 'inn' (in javascript 'in' is a reserved word)\n this.keySchedule = function(inn) {\n const t = new Array(8);\n const k = new Array(32);\n\n let j;\n\n for (let i = 0; i < 4; i++) {\n j = i * 4;\n t[i] = (inn[j] << 24) | (inn[j + 1] << 16) | (inn[j + 2] << 8) | inn[j + 3];\n }\n\n const x = [6, 7, 4, 5];\n let ki = 0;\n let w;\n\n for (let half = 0; half < 2; half++) {\n for (let round = 0; round < 4; round++) {\n for (j = 0; j < 4; j++) {\n const a = scheduleA[round][j];\n w = t[a[1]];\n\n w ^= sBox[4][(t[a[2] >>> 2] >>> (24 - 8 * (a[2] & 3))) & 0xff];\n w ^= sBox[5][(t[a[3] >>> 2] >>> (24 - 8 * (a[3] & 3))) & 0xff];\n w ^= sBox[6][(t[a[4] >>> 2] >>> (24 - 8 * (a[4] & 3))) & 0xff];\n w ^= sBox[7][(t[a[5] >>> 2] >>> (24 - 8 * (a[5] & 3))) & 0xff];\n w ^= sBox[x[j]][(t[a[6] >>> 2] >>> (24 - 8 * (a[6] & 3))) & 0xff];\n t[a[0]] = w;\n }\n\n for (j = 0; j < 4; j++) {\n const b = scheduleB[round][j];\n w = sBox[4][(t[b[0] >>> 2] >>> (24 - 8 * (b[0] & 3))) & 0xff];\n\n w ^= sBox[5][(t[b[1] >>> 2] >>> (24 - 8 * (b[1] & 3))) & 0xff];\n w ^= sBox[6][(t[b[2] >>> 2] >>> (24 - 8 * (b[2] & 3))) & 0xff];\n w ^= sBox[7][(t[b[3] >>> 2] >>> (24 - 8 * (b[3] & 3))) & 0xff];\n w ^= sBox[4 + j][(t[b[4] >>> 2] >>> (24 - 8 * (b[4] & 3))) & 0xff];\n k[ki] = w;\n ki++;\n }\n }\n }\n\n for (let i = 0; i < 16; i++) {\n this.masking[i] = k[i];\n this.rotate[i] = k[16 + i] & 0x1f;\n }\n };\n\n // These are the three 'f' functions. See RFC 2144, section 2.2.\n\n function f1(d, m, r) {\n const t = m + d;\n const I = (t << r) | (t >>> (32 - r));\n return ((sBox[0][I >>> 24] ^ sBox[1][(I >>> 16) & 255]) - sBox[2][(I >>> 8) & 255]) + sBox[3][I & 255];\n }\n\n function f2(d, m, r) {\n const t = m ^ d;\n const I = (t << r) | (t >>> (32 - r));\n return ((sBox[0][I >>> 24] - sBox[1][(I >>> 16) & 255]) + sBox[2][(I >>> 8) & 255]) ^ sBox[3][I & 255];\n }\n\n function f3(d, m, r) {\n const t = m - d;\n const I = (t << r) | (t >>> (32 - r));\n return ((sBox[0][I >>> 24] + sBox[1][(I >>> 16) & 255]) ^ sBox[2][(I >>> 8) & 255]) - sBox[3][I & 255];\n }\n\n const sBox = new Array(8);\n sBox[0] = [\n 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,\n 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,\n 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,\n 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,\n 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,\n 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,\n 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,\n 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,\n 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,\n 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,\n 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,\n 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,\n 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,\n 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,\n 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,\n 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,\n 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,\n 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,\n 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,\n 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,\n 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,\n 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,\n 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,\n 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,\n 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,\n 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,\n 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,\n 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,\n 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,\n 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,\n 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,\n 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf\n ];\n\n sBox[1] = [\n 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,\n 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,\n 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,\n 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,\n 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,\n 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,\n 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,\n 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,\n 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,\n 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,\n 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,\n 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,\n 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,\n 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,\n 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,\n 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,\n 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,\n 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,\n 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,\n 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,\n 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,\n 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,\n 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,\n 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,\n 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,\n 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,\n 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,\n 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,\n 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,\n 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,\n 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,\n 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1\n ];\n\n sBox[2] = [\n 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,\n 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,\n 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,\n 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,\n 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,\n 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,\n 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,\n 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,\n 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,\n 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,\n 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,\n 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,\n 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,\n 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,\n 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,\n 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,\n 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,\n 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,\n 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,\n 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,\n 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,\n 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,\n 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,\n 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,\n 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,\n 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,\n 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,\n 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,\n 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,\n 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,\n 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,\n 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783\n ];\n\n sBox[3] = [\n 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,\n 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,\n 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,\n 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,\n 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,\n 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,\n 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,\n 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,\n 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,\n 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,\n 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,\n 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,\n 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,\n 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,\n 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,\n 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,\n 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,\n 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,\n 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,\n 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,\n 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,\n 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,\n 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,\n 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,\n 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,\n 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,\n 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,\n 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,\n 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,\n 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,\n 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,\n 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2\n ];\n\n sBox[4] = [\n 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,\n 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,\n 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,\n 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,\n 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,\n 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,\n 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,\n 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,\n 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,\n 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,\n 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,\n 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,\n 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,\n 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,\n 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,\n 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,\n 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,\n 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,\n 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,\n 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,\n 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,\n 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,\n 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,\n 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,\n 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,\n 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,\n 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,\n 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,\n 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,\n 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,\n 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,\n 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4\n ];\n\n sBox[5] = [\n 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,\n 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,\n 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,\n 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,\n 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,\n 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,\n 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,\n 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,\n 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,\n 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,\n 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,\n 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,\n 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,\n 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,\n 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,\n 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,\n 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,\n 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,\n 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,\n 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,\n 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,\n 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,\n 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,\n 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,\n 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,\n 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,\n 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,\n 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,\n 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,\n 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,\n 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,\n 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f\n ];\n\n sBox[6] = [\n 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,\n 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,\n 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,\n 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,\n 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,\n 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,\n 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,\n 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,\n 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,\n 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,\n 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,\n 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,\n 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,\n 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,\n 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,\n 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,\n 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,\n 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,\n 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,\n 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,\n 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,\n 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,\n 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,\n 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,\n 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,\n 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,\n 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,\n 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,\n 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,\n 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,\n 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,\n 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3\n ];\n\n sBox[7] = [\n 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,\n 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,\n 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,\n 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,\n 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,\n 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,\n 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,\n 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,\n 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,\n 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,\n 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,\n 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,\n 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,\n 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,\n 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,\n 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,\n 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,\n 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,\n 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,\n 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,\n 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,\n 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,\n 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,\n 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,\n 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,\n 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,\n 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,\n 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,\n 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,\n 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,\n 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,\n 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e\n ];\n}\n\nfunction CAST5(key) {\n this.cast5 = new OpenPGPSymEncCAST5();\n this.cast5.setKey(key);\n\n this.encrypt = function(block) {\n return this.cast5.encrypt(block);\n };\n}\n\nCAST5.blockSize = CAST5.prototype.blockSize = 8;\nCAST5.keySize = CAST5.prototype.keySize = 16;\n\nexport default CAST5;\n","/* eslint-disable no-mixed-operators, no-fallthrough */\n\n\n/* Modified by Recurity Labs GmbH\n *\n * Cipher.js\n * A block-cipher algorithm implementation on JavaScript\n * See Cipher.readme.txt for further information.\n *\n * Copyright(c) 2009 Atsushi Oka [ http://oka.nu/ ]\n * This script file is distributed under the LGPL\n *\n * ACKNOWLEDGMENT\n *\n * The main subroutines are written by Michiel van Everdingen.\n *\n * Michiel van Everdingen\n * http://home.versatel.nl/MAvanEverdingen/index.html\n *\n * All rights for these routines are reserved to Michiel van Everdingen.\n *\n */\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n//Math\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nconst MAXINT = 0xFFFFFFFF;\n\nfunction rotw(w, n) {\n return (w << n | w >>> (32 - n)) & MAXINT;\n}\n\nfunction getW(a, i) {\n return a[i] | a[i + 1] << 8 | a[i + 2] << 16 | a[i + 3] << 24;\n}\n\nfunction setW(a, i, w) {\n a.splice(i, 4, w & 0xFF, (w >>> 8) & 0xFF, (w >>> 16) & 0xFF, (w >>> 24) & 0xFF);\n}\n\nfunction getB(x, n) {\n return (x >>> (n * 8)) & 0xFF;\n}\n\n// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Twofish\n// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction createTwofish() {\n //\n let keyBytes = null;\n let dataBytes = null;\n let dataOffset = -1;\n // var dataLength = -1;\n // var idx2 = -1;\n //\n\n let tfsKey = [];\n let tfsM = [\n [],\n [],\n [],\n []\n ];\n\n function tfsInit(key) {\n keyBytes = key;\n let i;\n let a;\n let b;\n let c;\n let d;\n const meKey = [];\n const moKey = [];\n const inKey = [];\n let kLen;\n const sKey = [];\n let f01;\n let f5b;\n let fef;\n\n const q0 = [\n [8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4],\n [2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]\n ];\n const q1 = [\n [14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13],\n [1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]\n ];\n const q2 = [\n [11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1],\n [4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]\n ];\n const q3 = [\n [13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10],\n [11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]\n ];\n const ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15];\n const ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7];\n const q = [\n [],\n []\n ];\n const m = [\n [],\n [],\n [],\n []\n ];\n\n function ffm5b(x) {\n return x ^ (x >> 2) ^ [0, 90, 180, 238][x & 3];\n }\n\n function ffmEf(x) {\n return x ^ (x >> 1) ^ (x >> 2) ^ [0, 238, 180, 90][x & 3];\n }\n\n function mdsRem(p, q) {\n let i;\n let t;\n let u;\n for (i = 0; i < 8; i++) {\n t = q >>> 24;\n q = ((q << 8) & MAXINT) | p >>> 24;\n p = (p << 8) & MAXINT;\n u = t << 1;\n if (t & 128) {\n u ^= 333;\n }\n q ^= t ^ (u << 16);\n u ^= t >>> 1;\n if (t & 1) {\n u ^= 166;\n }\n q ^= u << 24 | u << 8;\n }\n return q;\n }\n\n function qp(n, x) {\n const a = x >> 4;\n const b = x & 15;\n const c = q0[n][a ^ b];\n const d = q1[n][ror4[b] ^ ashx[a]];\n return q3[n][ror4[d] ^ ashx[c]] << 4 | q2[n][c ^ d];\n }\n\n function hFun(x, key) {\n let a = getB(x, 0);\n let b = getB(x, 1);\n let c = getB(x, 2);\n let d = getB(x, 3);\n switch (kLen) {\n case 4:\n a = q[1][a] ^ getB(key[3], 0);\n b = q[0][b] ^ getB(key[3], 1);\n c = q[0][c] ^ getB(key[3], 2);\n d = q[1][d] ^ getB(key[3], 3);\n case 3:\n a = q[1][a] ^ getB(key[2], 0);\n b = q[1][b] ^ getB(key[2], 1);\n c = q[0][c] ^ getB(key[2], 2);\n d = q[0][d] ^ getB(key[2], 3);\n case 2:\n a = q[0][q[0][a] ^ getB(key[1], 0)] ^ getB(key[0], 0);\n b = q[0][q[1][b] ^ getB(key[1], 1)] ^ getB(key[0], 1);\n c = q[1][q[0][c] ^ getB(key[1], 2)] ^ getB(key[0], 2);\n d = q[1][q[1][d] ^ getB(key[1], 3)] ^ getB(key[0], 3);\n }\n return m[0][a] ^ m[1][b] ^ m[2][c] ^ m[3][d];\n }\n\n keyBytes = keyBytes.slice(0, 32);\n i = keyBytes.length;\n while (i !== 16 && i !== 24 && i !== 32) {\n keyBytes[i++] = 0;\n }\n\n for (i = 0; i < keyBytes.length; i += 4) {\n inKey[i >> 2] = getW(keyBytes, i);\n }\n for (i = 0; i < 256; i++) {\n q[0][i] = qp(0, i);\n q[1][i] = qp(1, i);\n }\n for (i = 0; i < 256; i++) {\n f01 = q[1][i];\n f5b = ffm5b(f01);\n fef = ffmEf(f01);\n m[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24);\n m[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24);\n f01 = q[0][i];\n f5b = ffm5b(f01);\n fef = ffmEf(f01);\n m[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24);\n m[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24);\n }\n\n kLen = inKey.length / 2;\n for (i = 0; i < kLen; i++) {\n a = inKey[i + i];\n meKey[i] = a;\n b = inKey[i + i + 1];\n moKey[i] = b;\n sKey[kLen - i - 1] = mdsRem(a, b);\n }\n for (i = 0; i < 40; i += 2) {\n a = 0x1010101 * i;\n b = a + 0x1010101;\n a = hFun(a, meKey);\n b = rotw(hFun(b, moKey), 8);\n tfsKey[i] = (a + b) & MAXINT;\n tfsKey[i + 1] = rotw(a + 2 * b, 9);\n }\n for (i = 0; i < 256; i++) {\n a = b = c = d = i;\n switch (kLen) {\n case 4:\n a = q[1][a] ^ getB(sKey[3], 0);\n b = q[0][b] ^ getB(sKey[3], 1);\n c = q[0][c] ^ getB(sKey[3], 2);\n d = q[1][d] ^ getB(sKey[3], 3);\n case 3:\n a = q[1][a] ^ getB(sKey[2], 0);\n b = q[1][b] ^ getB(sKey[2], 1);\n c = q[0][c] ^ getB(sKey[2], 2);\n d = q[0][d] ^ getB(sKey[2], 3);\n case 2:\n tfsM[0][i] = m[0][q[0][q[0][a] ^ getB(sKey[1], 0)] ^ getB(sKey[0], 0)];\n tfsM[1][i] = m[1][q[0][q[1][b] ^ getB(sKey[1], 1)] ^ getB(sKey[0], 1)];\n tfsM[2][i] = m[2][q[1][q[0][c] ^ getB(sKey[1], 2)] ^ getB(sKey[0], 2)];\n tfsM[3][i] = m[3][q[1][q[1][d] ^ getB(sKey[1], 3)] ^ getB(sKey[0], 3)];\n }\n }\n }\n\n function tfsG0(x) {\n return tfsM[0][getB(x, 0)] ^ tfsM[1][getB(x, 1)] ^ tfsM[2][getB(x, 2)] ^ tfsM[3][getB(x, 3)];\n }\n\n function tfsG1(x) {\n return tfsM[0][getB(x, 3)] ^ tfsM[1][getB(x, 0)] ^ tfsM[2][getB(x, 1)] ^ tfsM[3][getB(x, 2)];\n }\n\n function tfsFrnd(r, blk) {\n let a = tfsG0(blk[0]);\n let b = tfsG1(blk[1]);\n blk[2] = rotw(blk[2] ^ (a + b + tfsKey[4 * r + 8]) & MAXINT, 31);\n blk[3] = rotw(blk[3], 1) ^ (a + 2 * b + tfsKey[4 * r + 9]) & MAXINT;\n a = tfsG0(blk[2]);\n b = tfsG1(blk[3]);\n blk[0] = rotw(blk[0] ^ (a + b + tfsKey[4 * r + 10]) & MAXINT, 31);\n blk[1] = rotw(blk[1], 1) ^ (a + 2 * b + tfsKey[4 * r + 11]) & MAXINT;\n }\n\n function tfsIrnd(i, blk) {\n let a = tfsG0(blk[0]);\n let b = tfsG1(blk[1]);\n blk[2] = rotw(blk[2], 1) ^ (a + b + tfsKey[4 * i + 10]) & MAXINT;\n blk[3] = rotw(blk[3] ^ (a + 2 * b + tfsKey[4 * i + 11]) & MAXINT, 31);\n a = tfsG0(blk[2]);\n b = tfsG1(blk[3]);\n blk[0] = rotw(blk[0], 1) ^ (a + b + tfsKey[4 * i + 8]) & MAXINT;\n blk[1] = rotw(blk[1] ^ (a + 2 * b + tfsKey[4 * i + 9]) & MAXINT, 31);\n }\n\n function tfsClose() {\n tfsKey = [];\n tfsM = [\n [],\n [],\n [],\n []\n ];\n }\n\n function tfsEncrypt(data, offset) {\n dataBytes = data;\n dataOffset = offset;\n const blk = [getW(dataBytes, dataOffset) ^ tfsKey[0],\n getW(dataBytes, dataOffset + 4) ^ tfsKey[1],\n getW(dataBytes, dataOffset + 8) ^ tfsKey[2],\n getW(dataBytes, dataOffset + 12) ^ tfsKey[3]];\n for (let j = 0; j < 8; j++) {\n tfsFrnd(j, blk);\n }\n setW(dataBytes, dataOffset, blk[2] ^ tfsKey[4]);\n setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[5]);\n setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[6]);\n setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[7]);\n dataOffset += 16;\n return dataBytes;\n }\n\n function tfsDecrypt(data, offset) {\n dataBytes = data;\n dataOffset = offset;\n const blk = [getW(dataBytes, dataOffset) ^ tfsKey[4],\n getW(dataBytes, dataOffset + 4) ^ tfsKey[5],\n getW(dataBytes, dataOffset + 8) ^ tfsKey[6],\n getW(dataBytes, dataOffset + 12) ^ tfsKey[7]];\n for (let j = 7; j >= 0; j--) {\n tfsIrnd(j, blk);\n }\n setW(dataBytes, dataOffset, blk[2] ^ tfsKey[0]);\n setW(dataBytes, dataOffset + 4, blk[3] ^ tfsKey[1]);\n setW(dataBytes, dataOffset + 8, blk[0] ^ tfsKey[2]);\n setW(dataBytes, dataOffset + 12, blk[1] ^ tfsKey[3]);\n dataOffset += 16;\n }\n\n // added by Recurity Labs\n\n function tfsFinal() {\n return dataBytes;\n }\n\n return {\n name: 'twofish',\n blocksize: 128 / 8,\n open: tfsInit,\n close: tfsClose,\n encrypt: tfsEncrypt,\n decrypt: tfsDecrypt,\n // added by Recurity Labs\n finalize: tfsFinal\n };\n}\n\n// added by Recurity Labs\n\nfunction TF(key) {\n this.tf = createTwofish();\n this.tf.open(Array.from(key), 0);\n\n this.encrypt = function(block) {\n return this.tf.encrypt(Array.from(block), 0);\n };\n}\n\nTF.keySize = TF.prototype.keySize = 32;\nTF.blockSize = TF.prototype.blockSize = 16;\n\nexport default TF;\n","/* Modified by Recurity Labs GmbH\n *\n * Originally written by nklein software (nklein.com)\n */\n\n/*\n * Javascript implementation based on Bruce Schneier's reference implementation.\n *\n *\n * The constructor doesn't do much of anything. It's just here\n * so we can start defining properties and methods and such.\n */\nfunction Blowfish() {}\n\n/*\n * Declare the block size so that protocols know what size\n * Initialization Vector (IV) they will need.\n */\nBlowfish.prototype.BLOCKSIZE = 8;\n\n/*\n * These are the default SBOXES.\n */\nBlowfish.prototype.SBOXES = [\n [\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,\n 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,\n 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\n 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,\n 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,\n 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,\n 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,\n 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\n 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,\n 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,\n 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,\n 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,\n 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\n 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,\n 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,\n 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,\n 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,\n 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\n 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,\n 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,\n 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,\n 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a\n ],\n [\n 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d,\n 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,\n 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65,\n 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9,\n 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,\n 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d,\n 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,\n 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,\n 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908,\n 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124,\n 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\n 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908,\n 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b,\n 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,\n 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,\n 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d,\n 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,\n 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5,\n 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96,\n 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,\n 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca,\n 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,\n 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,\n 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054,\n 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea,\n 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\n 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646,\n 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea,\n 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,\n 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,\n 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd,\n 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,\n 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7\n ],\n [\n 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7,\n 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,\n 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,\n 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4,\n 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,\n 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec,\n 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332,\n 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,\n 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58,\n 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,\n 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,\n 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60,\n 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99,\n 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\n 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74,\n 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3,\n 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,\n 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,\n 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa,\n 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,\n 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086,\n 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24,\n 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,\n 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84,\n 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,\n 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,\n 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe,\n 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0,\n 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\n 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188,\n 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8,\n 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,\n 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0\n ],\n [\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,\n 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,\n 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,\n 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\n 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,\n 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,\n 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,\n 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,\n 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\n 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,\n 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,\n 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,\n 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,\n 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\n 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,\n 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,\n 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,\n 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,\n 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\n 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,\n 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,\n 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6\n ]\n];\n\n//*\n//* This is the default PARRAY\n//*\nBlowfish.prototype.PARRAY = [\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,\n 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b\n];\n\n//*\n//* This is the number of rounds the cipher will go\n//*\nBlowfish.prototype.NN = 16;\n\n//*\n//* This function is needed to get rid of problems\n//* with the high-bit getting set. If we don't do\n//* this, then sometimes ( aa & 0x00FFFFFFFF ) is not\n//* equal to ( bb & 0x00FFFFFFFF ) even when they\n//* agree bit-for-bit for the first 32 bits.\n//*\nBlowfish.prototype._clean = function(xx) {\n if (xx < 0) {\n const yy = xx & 0x7FFFFFFF;\n xx = yy + 0x80000000;\n }\n return xx;\n};\n\n//*\n//* This is the mixing function that uses the sboxes\n//*\nBlowfish.prototype._F = function(xx) {\n let yy;\n\n const dd = xx & 0x00FF;\n xx >>>= 8;\n const cc = xx & 0x00FF;\n xx >>>= 8;\n const bb = xx & 0x00FF;\n xx >>>= 8;\n const aa = xx & 0x00FF;\n\n yy = this.sboxes[0][aa] + this.sboxes[1][bb];\n yy ^= this.sboxes[2][cc];\n yy += this.sboxes[3][dd];\n\n return yy;\n};\n\n//*\n//* This method takes an array with two values, left and right\n//* and does NN rounds of Blowfish on them.\n//*\nBlowfish.prototype._encryptBlock = function(vals) {\n let dataL = vals[0];\n let dataR = vals[1];\n\n let ii;\n\n for (ii = 0; ii < this.NN; ++ii) {\n dataL ^= this.parray[ii];\n dataR = this._F(dataL) ^ dataR;\n\n const tmp = dataL;\n dataL = dataR;\n dataR = tmp;\n }\n\n dataL ^= this.parray[this.NN + 0];\n dataR ^= this.parray[this.NN + 1];\n\n vals[0] = this._clean(dataR);\n vals[1] = this._clean(dataL);\n};\n\n//*\n//* This method takes a vector of numbers and turns them\n//* into long words so that they can be processed by the\n//* real algorithm.\n//*\n//* Maybe I should make the real algorithm above take a vector\n//* instead. That will involve more looping, but it won't require\n//* the F() method to deconstruct the vector.\n//*\nBlowfish.prototype.encryptBlock = function(vector) {\n let ii;\n const vals = [0, 0];\n const off = this.BLOCKSIZE / 2;\n for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {\n vals[0] = (vals[0] << 8) | (vector[ii + 0] & 0x00FF);\n vals[1] = (vals[1] << 8) | (vector[ii + off] & 0x00FF);\n }\n\n this._encryptBlock(vals);\n\n const ret = [];\n for (ii = 0; ii < this.BLOCKSIZE / 2; ++ii) {\n ret[ii + 0] = ((vals[0] >>> (24 - 8 * (ii))) & 0x00FF);\n ret[ii + off] = ((vals[1] >>> (24 - 8 * (ii))) & 0x00FF);\n // vals[ 0 ] = ( vals[ 0 ] >>> 8 );\n // vals[ 1 ] = ( vals[ 1 ] >>> 8 );\n }\n\n return ret;\n};\n\n//*\n//* This method takes an array with two values, left and right\n//* and undoes NN rounds of Blowfish on them.\n//*\nBlowfish.prototype._decryptBlock = function(vals) {\n let dataL = vals[0];\n let dataR = vals[1];\n\n let ii;\n\n for (ii = this.NN + 1; ii > 1; --ii) {\n dataL ^= this.parray[ii];\n dataR = this._F(dataL) ^ dataR;\n\n const tmp = dataL;\n dataL = dataR;\n dataR = tmp;\n }\n\n dataL ^= this.parray[1];\n dataR ^= this.parray[0];\n\n vals[0] = this._clean(dataR);\n vals[1] = this._clean(dataL);\n};\n\n//*\n//* This method takes a key array and initializes the\n//* sboxes and parray for this encryption.\n//*\nBlowfish.prototype.init = function(key) {\n let ii;\n let jj = 0;\n\n this.parray = [];\n for (ii = 0; ii < this.NN + 2; ++ii) {\n let data = 0x00000000;\n for (let kk = 0; kk < 4; ++kk) {\n data = (data << 8) | (key[jj] & 0x00FF);\n if (++jj >= key.length) {\n jj = 0;\n }\n }\n this.parray[ii] = this.PARRAY[ii] ^ data;\n }\n\n this.sboxes = [];\n for (ii = 0; ii < 4; ++ii) {\n this.sboxes[ii] = [];\n for (jj = 0; jj < 256; ++jj) {\n this.sboxes[ii][jj] = this.SBOXES[ii][jj];\n }\n }\n\n const vals = [0x00000000, 0x00000000];\n\n for (ii = 0; ii < this.NN + 2; ii += 2) {\n this._encryptBlock(vals);\n this.parray[ii + 0] = vals[0];\n this.parray[ii + 1] = vals[1];\n }\n\n for (ii = 0; ii < 4; ++ii) {\n for (jj = 0; jj < 256; jj += 2) {\n this._encryptBlock(vals);\n this.sboxes[ii][jj + 0] = vals[0];\n this.sboxes[ii][jj + 1] = vals[1];\n }\n }\n};\n\n// added by Recurity Labs\nfunction BF(key) {\n this.bf = new Blowfish();\n this.bf.init(key);\n\n this.encrypt = function(block) {\n return this.bf.encryptBlock(block);\n };\n}\n\nBF.keySize = BF.prototype.keySize = 16;\nBF.blockSize = BF.prototype.blockSize = 8;\n\nexport default BF;\n","/**\n * @fileoverview Symmetric cryptography functions\n * @module crypto/cipher\n * @private\n */\n\nimport aes from './aes';\nimport { DES, TripleDES } from './des';\nimport CAST5 from './cast5';\nimport TF from './twofish';\nimport BF from './blowfish';\n\n/**\n * AES-128 encryption and decryption (ID 7)\n * @function\n * @param {String} key - 128-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n */\nexport const aes128 = aes(128);\n/**\n * AES-128 Block Cipher (ID 8)\n * @function\n * @param {String} key - 192-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n */\nexport const aes192 = aes(192);\n/**\n * AES-128 Block Cipher (ID 9)\n * @function\n * @param {String} key - 256-bit key\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf|NIST FIPS-197}\n * @returns {Object}\n */\nexport const aes256 = aes(256);\n// Not in OpenPGP specifications\nexport const des = DES;\n/**\n * Triple DES Block Cipher (ID 2)\n * @function\n * @param {String} key - 192-bit key\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-67r2.pdf|NIST SP 800-67}\n * @returns {Object}\n */\nexport const tripledes = TripleDES;\n/**\n * CAST-128 Block Cipher (ID 3)\n * @function\n * @param {String} key - 128-bit key\n * @see {@link https://tools.ietf.org/html/rfc2144|The CAST-128 Encryption Algorithm}\n * @returns {Object}\n */\nexport const cast5 = CAST5;\n/**\n * Twofish Block Cipher (ID 10)\n * @function\n * @param {String} key - 256-bit key\n * @see {@link https://tools.ietf.org/html/rfc4880#ref-TWOFISH|TWOFISH}\n * @returns {Object}\n */\nexport const twofish = TF;\n/**\n * Blowfish Block Cipher (ID 4)\n * @function\n * @param {String} key - 128-bit key\n * @see {@link https://tools.ietf.org/html/rfc4880#ref-BLOWFISH|BLOWFISH}\n * @returns {Object}\n */\nexport const blowfish = BF;\n/**\n * Not implemented\n * @function\n * @throws {Error}\n */\nexport const idea = function() {\n throw new Error('IDEA symmetric-key algorithm not implemented');\n};\n","export var sha1_asm = function ( stdlib, foreign, buffer ) {\n \"use asm\";\n\n // SHA256 state\n var H0 = 0, H1 = 0, H2 = 0, H3 = 0, H4 = 0,\n TOTAL0 = 0, TOTAL1 = 0;\n\n // HMAC state\n var I0 = 0, I1 = 0, I2 = 0, I3 = 0, I4 = 0,\n O0 = 0, O1 = 0, O2 = 0, O3 = 0, O4 = 0;\n\n // I/O buffer\n var HEAP = new stdlib.Uint8Array(buffer);\n\n function _core ( w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15 ) {\n w0 = w0|0;\n w1 = w1|0;\n w2 = w2|0;\n w3 = w3|0;\n w4 = w4|0;\n w5 = w5|0;\n w6 = w6|0;\n w7 = w7|0;\n w8 = w8|0;\n w9 = w9|0;\n w10 = w10|0;\n w11 = w11|0;\n w12 = w12|0;\n w13 = w13|0;\n w14 = w14|0;\n w15 = w15|0;\n\n var a = 0, b = 0, c = 0, d = 0, e = 0, n = 0, t = 0,\n w16 = 0, w17 = 0, w18 = 0, w19 = 0,\n w20 = 0, w21 = 0, w22 = 0, w23 = 0, w24 = 0, w25 = 0, w26 = 0, w27 = 0, w28 = 0, w29 = 0,\n w30 = 0, w31 = 0, w32 = 0, w33 = 0, w34 = 0, w35 = 0, w36 = 0, w37 = 0, w38 = 0, w39 = 0,\n w40 = 0, w41 = 0, w42 = 0, w43 = 0, w44 = 0, w45 = 0, w46 = 0, w47 = 0, w48 = 0, w49 = 0,\n w50 = 0, w51 = 0, w52 = 0, w53 = 0, w54 = 0, w55 = 0, w56 = 0, w57 = 0, w58 = 0, w59 = 0,\n w60 = 0, w61 = 0, w62 = 0, w63 = 0, w64 = 0, w65 = 0, w66 = 0, w67 = 0, w68 = 0, w69 = 0,\n w70 = 0, w71 = 0, w72 = 0, w73 = 0, w74 = 0, w75 = 0, w76 = 0, w77 = 0, w78 = 0, w79 = 0;\n\n a = H0;\n b = H1;\n c = H2;\n d = H3;\n e = H4;\n\n // 0\n t = ( w0 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 1\n t = ( w1 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 2\n t = ( w2 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 3\n t = ( w3 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 4\n t = ( w4 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 5\n t = ( w5 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 6\n t = ( w6 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 7\n t = ( w7 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 8\n t = ( w8 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 9\n t = ( w9 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 10\n t = ( w10 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 11\n t = ( w11 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 12\n t = ( w12 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 13\n t = ( w13 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 14\n t = ( w14 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 15\n t = ( w15 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 16\n n = w13 ^ w8 ^ w2 ^ w0;\n w16 = (n << 1) | (n >>> 31);\n t = (w16 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 17\n n = w14 ^ w9 ^ w3 ^ w1;\n w17 = (n << 1) | (n >>> 31);\n t = (w17 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 18\n n = w15 ^ w10 ^ w4 ^ w2;\n w18 = (n << 1) | (n >>> 31);\n t = (w18 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 19\n n = w16 ^ w11 ^ w5 ^ w3;\n w19 = (n << 1) | (n >>> 31);\n t = (w19 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (~b & d)) + 0x5a827999 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 20\n n = w17 ^ w12 ^ w6 ^ w4;\n w20 = (n << 1) | (n >>> 31);\n t = (w20 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 21\n n = w18 ^ w13 ^ w7 ^ w5;\n w21 = (n << 1) | (n >>> 31);\n t = (w21 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 22\n n = w19 ^ w14 ^ w8 ^ w6;\n w22 = (n << 1) | (n >>> 31);\n t = (w22 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 23\n n = w20 ^ w15 ^ w9 ^ w7;\n w23 = (n << 1) | (n >>> 31);\n t = (w23 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 24\n n = w21 ^ w16 ^ w10 ^ w8;\n w24 = (n << 1) | (n >>> 31);\n t = (w24 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 25\n n = w22 ^ w17 ^ w11 ^ w9;\n w25 = (n << 1) | (n >>> 31);\n t = (w25 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 26\n n = w23 ^ w18 ^ w12 ^ w10;\n w26 = (n << 1) | (n >>> 31);\n t = (w26 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 27\n n = w24 ^ w19 ^ w13 ^ w11;\n w27 = (n << 1) | (n >>> 31);\n t = (w27 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 28\n n = w25 ^ w20 ^ w14 ^ w12;\n w28 = (n << 1) | (n >>> 31);\n t = (w28 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 29\n n = w26 ^ w21 ^ w15 ^ w13;\n w29 = (n << 1) | (n >>> 31);\n t = (w29 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 30\n n = w27 ^ w22 ^ w16 ^ w14;\n w30 = (n << 1) | (n >>> 31);\n t = (w30 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 31\n n = w28 ^ w23 ^ w17 ^ w15;\n w31 = (n << 1) | (n >>> 31);\n t = (w31 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 32\n n = w29 ^ w24 ^ w18 ^ w16;\n w32 = (n << 1) | (n >>> 31);\n t = (w32 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 33\n n = w30 ^ w25 ^ w19 ^ w17;\n w33 = (n << 1) | (n >>> 31);\n t = (w33 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 34\n n = w31 ^ w26 ^ w20 ^ w18;\n w34 = (n << 1) | (n >>> 31);\n t = (w34 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 35\n n = w32 ^ w27 ^ w21 ^ w19;\n w35 = (n << 1) | (n >>> 31);\n t = (w35 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 36\n n = w33 ^ w28 ^ w22 ^ w20;\n w36 = (n << 1) | (n >>> 31);\n t = (w36 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 37\n n = w34 ^ w29 ^ w23 ^ w21;\n w37 = (n << 1) | (n >>> 31);\n t = (w37 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 38\n n = w35 ^ w30 ^ w24 ^ w22;\n w38 = (n << 1) | (n >>> 31);\n t = (w38 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 39\n n = w36 ^ w31 ^ w25 ^ w23;\n w39 = (n << 1) | (n >>> 31);\n t = (w39 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) + 0x6ed9eba1 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 40\n n = w37 ^ w32 ^ w26 ^ w24;\n w40 = (n << 1) | (n >>> 31);\n t = (w40 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 41\n n = w38 ^ w33 ^ w27 ^ w25;\n w41 = (n << 1) | (n >>> 31);\n t = (w41 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 42\n n = w39 ^ w34 ^ w28 ^ w26;\n w42 = (n << 1) | (n >>> 31);\n t = (w42 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 43\n n = w40 ^ w35 ^ w29 ^ w27;\n w43 = (n << 1) | (n >>> 31);\n t = (w43 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 44\n n = w41 ^ w36 ^ w30 ^ w28;\n w44 = (n << 1) | (n >>> 31);\n t = (w44 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 45\n n = w42 ^ w37 ^ w31 ^ w29;\n w45 = (n << 1) | (n >>> 31);\n t = (w45 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 46\n n = w43 ^ w38 ^ w32 ^ w30;\n w46 = (n << 1) | (n >>> 31);\n t = (w46 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 47\n n = w44 ^ w39 ^ w33 ^ w31;\n w47 = (n << 1) | (n >>> 31);\n t = (w47 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 48\n n = w45 ^ w40 ^ w34 ^ w32;\n w48 = (n << 1) | (n >>> 31);\n t = (w48 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 49\n n = w46 ^ w41 ^ w35 ^ w33;\n w49 = (n << 1) | (n >>> 31);\n t = (w49 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 50\n n = w47 ^ w42 ^ w36 ^ w34;\n w50 = (n << 1) | (n >>> 31);\n t = (w50 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 51\n n = w48 ^ w43 ^ w37 ^ w35;\n w51 = (n << 1) | (n >>> 31);\n t = (w51 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 52\n n = w49 ^ w44 ^ w38 ^ w36;\n w52 = (n << 1) | (n >>> 31);\n t = (w52 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 53\n n = w50 ^ w45 ^ w39 ^ w37;\n w53 = (n << 1) | (n >>> 31);\n t = (w53 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 54\n n = w51 ^ w46 ^ w40 ^ w38;\n w54 = (n << 1) | (n >>> 31);\n t = (w54 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 55\n n = w52 ^ w47 ^ w41 ^ w39;\n w55 = (n << 1) | (n >>> 31);\n t = (w55 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 56\n n = w53 ^ w48 ^ w42 ^ w40;\n w56 = (n << 1) | (n >>> 31);\n t = (w56 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 57\n n = w54 ^ w49 ^ w43 ^ w41;\n w57 = (n << 1) | (n >>> 31);\n t = (w57 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 58\n n = w55 ^ w50 ^ w44 ^ w42;\n w58 = (n << 1) | (n >>> 31);\n t = (w58 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 59\n n = w56 ^ w51 ^ w45 ^ w43;\n w59 = (n << 1) | (n >>> 31);\n t = (w59 + ((a << 5) | (a >>> 27)) + e + ((b & c) | (b & d) | (c & d)) - 0x70e44324 )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 60\n n = w57 ^ w52 ^ w46 ^ w44;\n w60 = (n << 1) | (n >>> 31);\n t = (w60 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 61\n n = w58 ^ w53 ^ w47 ^ w45;\n w61 = (n << 1) | (n >>> 31);\n t = (w61 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 62\n n = w59 ^ w54 ^ w48 ^ w46;\n w62 = (n << 1) | (n >>> 31);\n t = (w62 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 63\n n = w60 ^ w55 ^ w49 ^ w47;\n w63 = (n << 1) | (n >>> 31);\n t = (w63 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 64\n n = w61 ^ w56 ^ w50 ^ w48;\n w64 = (n << 1) | (n >>> 31);\n t = (w64 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 65\n n = w62 ^ w57 ^ w51 ^ w49;\n w65 = (n << 1) | (n >>> 31);\n t = (w65 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 66\n n = w63 ^ w58 ^ w52 ^ w50;\n w66 = (n << 1) | (n >>> 31);\n t = (w66 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 67\n n = w64 ^ w59 ^ w53 ^ w51;\n w67 = (n << 1) | (n >>> 31);\n t = (w67 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 68\n n = w65 ^ w60 ^ w54 ^ w52;\n w68 = (n << 1) | (n >>> 31);\n t = (w68 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 69\n n = w66 ^ w61 ^ w55 ^ w53;\n w69 = (n << 1) | (n >>> 31);\n t = (w69 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 70\n n = w67 ^ w62 ^ w56 ^ w54;\n w70 = (n << 1) | (n >>> 31);\n t = (w70 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 71\n n = w68 ^ w63 ^ w57 ^ w55;\n w71 = (n << 1) | (n >>> 31);\n t = (w71 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 72\n n = w69 ^ w64 ^ w58 ^ w56;\n w72 = (n << 1) | (n >>> 31);\n t = (w72 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 73\n n = w70 ^ w65 ^ w59 ^ w57;\n w73 = (n << 1) | (n >>> 31);\n t = (w73 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 74\n n = w71 ^ w66 ^ w60 ^ w58;\n w74 = (n << 1) | (n >>> 31);\n t = (w74 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 75\n n = w72 ^ w67 ^ w61 ^ w59;\n w75 = (n << 1) | (n >>> 31);\n t = (w75 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 76\n n = w73 ^ w68 ^ w62 ^ w60;\n w76 = (n << 1) | (n >>> 31);\n t = (w76 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 77\n n = w74 ^ w69 ^ w63 ^ w61;\n w77 = (n << 1) | (n >>> 31);\n t = (w77 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 78\n n = w75 ^ w70 ^ w64 ^ w62;\n w78 = (n << 1) | (n >>> 31);\n t = (w78 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n // 79\n n = w76 ^ w71 ^ w65 ^ w63;\n w79 = (n << 1) | (n >>> 31);\n t = (w79 + ((a << 5) | (a >>> 27)) + e + (b ^ c ^ d) - 0x359d3e2a )|0;\n e = d; d = c; c = (b << 30) | (b >>> 2); b = a; a = t;\n\n H0 = ( H0 + a )|0;\n H1 = ( H1 + b )|0;\n H2 = ( H2 + c )|0;\n H3 = ( H3 + d )|0;\n H4 = ( H4 + e )|0;\n\n }\n\n function _core_heap ( offset ) {\n offset = offset|0;\n\n _core(\n HEAP[offset|0]<<24 | HEAP[offset|1]<<16 | HEAP[offset|2]<<8 | HEAP[offset|3],\n HEAP[offset|4]<<24 | HEAP[offset|5]<<16 | HEAP[offset|6]<<8 | HEAP[offset|7],\n HEAP[offset|8]<<24 | HEAP[offset|9]<<16 | HEAP[offset|10]<<8 | HEAP[offset|11],\n HEAP[offset|12]<<24 | HEAP[offset|13]<<16 | HEAP[offset|14]<<8 | HEAP[offset|15],\n HEAP[offset|16]<<24 | HEAP[offset|17]<<16 | HEAP[offset|18]<<8 | HEAP[offset|19],\n HEAP[offset|20]<<24 | HEAP[offset|21]<<16 | HEAP[offset|22]<<8 | HEAP[offset|23],\n HEAP[offset|24]<<24 | HEAP[offset|25]<<16 | HEAP[offset|26]<<8 | HEAP[offset|27],\n HEAP[offset|28]<<24 | HEAP[offset|29]<<16 | HEAP[offset|30]<<8 | HEAP[offset|31],\n HEAP[offset|32]<<24 | HEAP[offset|33]<<16 | HEAP[offset|34]<<8 | HEAP[offset|35],\n HEAP[offset|36]<<24 | HEAP[offset|37]<<16 | HEAP[offset|38]<<8 | HEAP[offset|39],\n HEAP[offset|40]<<24 | HEAP[offset|41]<<16 | HEAP[offset|42]<<8 | HEAP[offset|43],\n HEAP[offset|44]<<24 | HEAP[offset|45]<<16 | HEAP[offset|46]<<8 | HEAP[offset|47],\n HEAP[offset|48]<<24 | HEAP[offset|49]<<16 | HEAP[offset|50]<<8 | HEAP[offset|51],\n HEAP[offset|52]<<24 | HEAP[offset|53]<<16 | HEAP[offset|54]<<8 | HEAP[offset|55],\n HEAP[offset|56]<<24 | HEAP[offset|57]<<16 | HEAP[offset|58]<<8 | HEAP[offset|59],\n HEAP[offset|60]<<24 | HEAP[offset|61]<<16 | HEAP[offset|62]<<8 | HEAP[offset|63]\n );\n }\n\n // offset — multiple of 32\n function _state_to_heap ( output ) {\n output = output|0;\n\n HEAP[output|0] = H0>>>24;\n HEAP[output|1] = H0>>>16&255;\n HEAP[output|2] = H0>>>8&255;\n HEAP[output|3] = H0&255;\n HEAP[output|4] = H1>>>24;\n HEAP[output|5] = H1>>>16&255;\n HEAP[output|6] = H1>>>8&255;\n HEAP[output|7] = H1&255;\n HEAP[output|8] = H2>>>24;\n HEAP[output|9] = H2>>>16&255;\n HEAP[output|10] = H2>>>8&255;\n HEAP[output|11] = H2&255;\n HEAP[output|12] = H3>>>24;\n HEAP[output|13] = H3>>>16&255;\n HEAP[output|14] = H3>>>8&255;\n HEAP[output|15] = H3&255;\n HEAP[output|16] = H4>>>24;\n HEAP[output|17] = H4>>>16&255;\n HEAP[output|18] = H4>>>8&255;\n HEAP[output|19] = H4&255;\n }\n\n function reset () {\n H0 = 0x67452301;\n H1 = 0xefcdab89;\n H2 = 0x98badcfe;\n H3 = 0x10325476;\n H4 = 0xc3d2e1f0;\n TOTAL0 = TOTAL1 = 0;\n }\n\n function init ( h0, h1, h2, h3, h4, total0, total1 ) {\n h0 = h0|0;\n h1 = h1|0;\n h2 = h2|0;\n h3 = h3|0;\n h4 = h4|0;\n total0 = total0|0;\n total1 = total1|0;\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n TOTAL0 = total0;\n TOTAL1 = total1;\n }\n\n // offset — multiple of 64\n function process ( offset, length ) {\n offset = offset|0;\n length = length|0;\n\n var hashed = 0;\n\n if ( offset & 63 )\n return -1;\n\n while ( (length|0) >= 64 ) {\n _core_heap(offset);\n\n offset = ( offset + 64 )|0;\n length = ( length - 64 )|0;\n\n hashed = ( hashed + 64 )|0;\n }\n\n TOTAL0 = ( TOTAL0 + hashed )|0;\n if ( TOTAL0>>>0 < hashed>>>0 ) TOTAL1 = ( TOTAL1 + 1 )|0;\n\n return hashed|0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function finish ( offset, length, output ) {\n offset = offset|0;\n length = length|0;\n output = output|0;\n\n var hashed = 0,\n i = 0;\n\n if ( offset & 63 )\n return -1;\n\n if ( ~output )\n if ( output & 31 )\n return -1;\n\n if ( (length|0) >= 64 ) {\n hashed = process( offset, length )|0;\n if ( (hashed|0) == -1 )\n return -1;\n\n offset = ( offset + hashed )|0;\n length = ( length - hashed )|0;\n }\n\n hashed = ( hashed + length )|0;\n TOTAL0 = ( TOTAL0 + length )|0;\n if ( TOTAL0>>>0 < length>>>0 ) TOTAL1 = (TOTAL1 + 1)|0;\n\n HEAP[offset|length] = 0x80;\n\n if ( (length|0) >= 56 ) {\n for ( i = (length+1)|0; (i|0) < 64; i = (i+1)|0 )\n HEAP[offset|i] = 0x00;\n _core_heap(offset);\n\n length = 0;\n\n HEAP[offset|0] = 0;\n }\n\n for ( i = (length+1)|0; (i|0) < 59; i = (i+1)|0 )\n HEAP[offset|i] = 0;\n\n HEAP[offset|56] = TOTAL1>>>21&255;\n HEAP[offset|57] = TOTAL1>>>13&255;\n HEAP[offset|58] = TOTAL1>>>5&255;\n HEAP[offset|59] = TOTAL1<<3&255 | TOTAL0>>>29;\n HEAP[offset|60] = TOTAL0>>>21&255;\n HEAP[offset|61] = TOTAL0>>>13&255;\n HEAP[offset|62] = TOTAL0>>>5&255;\n HEAP[offset|63] = TOTAL0<<3&255;\n _core_heap(offset);\n\n if ( ~output )\n _state_to_heap(output);\n\n return hashed|0;\n }\n\n function hmac_reset () {\n H0 = I0;\n H1 = I1;\n H2 = I2;\n H3 = I3;\n H4 = I4;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function _hmac_opad () {\n H0 = O0;\n H1 = O1;\n H2 = O2;\n H3 = O3;\n H4 = O4;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function hmac_init ( p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) {\n p0 = p0|0;\n p1 = p1|0;\n p2 = p2|0;\n p3 = p3|0;\n p4 = p4|0;\n p5 = p5|0;\n p6 = p6|0;\n p7 = p7|0;\n p8 = p8|0;\n p9 = p9|0;\n p10 = p10|0;\n p11 = p11|0;\n p12 = p12|0;\n p13 = p13|0;\n p14 = p14|0;\n p15 = p15|0;\n\n // opad\n reset();\n _core(\n p0 ^ 0x5c5c5c5c,\n p1 ^ 0x5c5c5c5c,\n p2 ^ 0x5c5c5c5c,\n p3 ^ 0x5c5c5c5c,\n p4 ^ 0x5c5c5c5c,\n p5 ^ 0x5c5c5c5c,\n p6 ^ 0x5c5c5c5c,\n p7 ^ 0x5c5c5c5c,\n p8 ^ 0x5c5c5c5c,\n p9 ^ 0x5c5c5c5c,\n p10 ^ 0x5c5c5c5c,\n p11 ^ 0x5c5c5c5c,\n p12 ^ 0x5c5c5c5c,\n p13 ^ 0x5c5c5c5c,\n p14 ^ 0x5c5c5c5c,\n p15 ^ 0x5c5c5c5c\n );\n O0 = H0;\n O1 = H1;\n O2 = H2;\n O3 = H3;\n O4 = H4;\n\n // ipad\n reset();\n _core(\n p0 ^ 0x36363636,\n p1 ^ 0x36363636,\n p2 ^ 0x36363636,\n p3 ^ 0x36363636,\n p4 ^ 0x36363636,\n p5 ^ 0x36363636,\n p6 ^ 0x36363636,\n p7 ^ 0x36363636,\n p8 ^ 0x36363636,\n p9 ^ 0x36363636,\n p10 ^ 0x36363636,\n p11 ^ 0x36363636,\n p12 ^ 0x36363636,\n p13 ^ 0x36363636,\n p14 ^ 0x36363636,\n p15 ^ 0x36363636\n );\n I0 = H0;\n I1 = H1;\n I2 = H2;\n I3 = H3;\n I4 = H4;\n\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function hmac_finish ( offset, length, output ) {\n offset = offset|0;\n length = length|0;\n output = output|0;\n\n var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, hashed = 0;\n\n if ( offset & 63 )\n return -1;\n\n if ( ~output )\n if ( output & 31 )\n return -1;\n\n hashed = finish( offset, length, -1 )|0;\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4;\n\n _hmac_opad();\n _core( t0, t1, t2, t3, t4, 0x80000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672 );\n\n if ( ~output )\n _state_to_heap(output);\n\n return hashed|0;\n }\n\n // salt is assumed to be already processed\n // offset — multiple of 64\n // output — multiple of 32\n function pbkdf2_generate_block ( offset, length, block, count, output ) {\n offset = offset|0;\n length = length|0;\n block = block|0;\n count = count|0;\n output = output|0;\n\n var h0 = 0, h1 = 0, h2 = 0, h3 = 0, h4 = 0,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0;\n\n if ( offset & 63 )\n return -1;\n\n if ( ~output )\n if ( output & 31 )\n return -1;\n\n // pad block number into heap\n // FIXME probable OOB write\n HEAP[(offset+length)|0] = block>>>24;\n HEAP[(offset+length+1)|0] = block>>>16&255;\n HEAP[(offset+length+2)|0] = block>>>8&255;\n HEAP[(offset+length+3)|0] = block&255;\n\n // finish first iteration\n hmac_finish( offset, (length+4)|0, -1 )|0;\n h0 = t0 = H0, h1 = t1 = H1, h2 = t2 = H2, h3 = t3 = H3, h4 = t4 = H4;\n count = (count-1)|0;\n\n // perform the rest iterations\n while ( (count|0) > 0 ) {\n hmac_reset();\n _core( t0, t1, t2, t3, t4, 0x80000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672 );\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4;\n\n _hmac_opad();\n _core( t0, t1, t2, t3, t4, 0x80000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672 );\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4;\n\n h0 = h0 ^ H0;\n h1 = h1 ^ H1;\n h2 = h2 ^ H2;\n h3 = h3 ^ H3;\n h4 = h4 ^ H4;\n\n count = (count-1)|0;\n }\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n\n if ( ~output )\n _state_to_heap(output);\n\n return 0;\n }\n\n return {\n // SHA1\n reset: reset,\n init: init,\n process: process,\n finish: finish,\n\n // HMAC-SHA1\n hmac_reset: hmac_reset,\n hmac_init: hmac_init,\n hmac_finish: hmac_finish,\n\n // PBKDF2-HMAC-SHA1\n pbkdf2_generate_block: pbkdf2_generate_block\n }\n}\n","import { _heap_write } from '../other/utils';\nimport { IllegalStateError } from '../other/errors';\nexport class Hash {\n constructor() {\n this.pos = 0;\n this.len = 0;\n }\n reset() {\n const { asm } = this.acquire_asm();\n this.result = null;\n this.pos = 0;\n this.len = 0;\n asm.reset();\n return this;\n }\n process(data) {\n if (this.result !== null)\n throw new IllegalStateError('state must be reset before processing new data');\n const { asm, heap } = this.acquire_asm();\n let hpos = this.pos;\n let hlen = this.len;\n let dpos = 0;\n let dlen = data.length;\n let wlen = 0;\n while (dlen > 0) {\n wlen = _heap_write(heap, hpos + hlen, data, dpos, dlen);\n hlen += wlen;\n dpos += wlen;\n dlen -= wlen;\n wlen = asm.process(hpos, hlen);\n hpos += wlen;\n hlen -= wlen;\n if (!hlen)\n hpos = 0;\n }\n this.pos = hpos;\n this.len = hlen;\n return this;\n }\n finish() {\n if (this.result !== null)\n throw new IllegalStateError('state must be reset before processing new data');\n const { asm, heap } = this.acquire_asm();\n asm.finish(this.pos, this.len, 0);\n this.result = new Uint8Array(this.HASH_SIZE);\n this.result.set(heap.subarray(0, this.HASH_SIZE));\n this.pos = 0;\n this.len = 0;\n this.release_asm();\n return this;\n }\n}\n","import { sha1_asm } from './sha1.asm';\nimport { Hash } from '../hash';\nimport { _heap_init } from '../../other/utils';\nexport const _sha1_block_size = 64;\nexport const _sha1_hash_size = 20;\nconst heap_pool = [];\nconst asm_pool = [];\nexport class Sha1 extends Hash {\n constructor() {\n super();\n this.NAME = 'sha1';\n this.BLOCK_SIZE = _sha1_block_size;\n this.HASH_SIZE = _sha1_hash_size;\n this.acquire_asm();\n }\n acquire_asm() {\n if (this.heap === undefined || this.asm === undefined) {\n this.heap = heap_pool.pop() || _heap_init();\n this.asm = asm_pool.pop() || sha1_asm({ Uint8Array: Uint8Array }, null, this.heap.buffer);\n this.reset();\n }\n return { heap: this.heap, asm: this.asm };\n }\n release_asm() {\n if (this.heap !== undefined && this.asm !== undefined) {\n heap_pool.push(this.heap);\n asm_pool.push(this.asm);\n }\n this.heap = undefined;\n this.asm = undefined;\n }\n static bytes(data) {\n return new Sha1().process(data).finish().result;\n }\n}\nSha1.NAME = 'sha1';\nSha1.heap_pool = [];\nSha1.asm_pool = [];\nSha1.asm_function = sha1_asm;\n","import { sha256_asm } from './sha256.asm';\nimport { Hash } from '../hash';\nimport { _heap_init } from '../../other/utils';\nexport const _sha256_block_size = 64;\nexport const _sha256_hash_size = 32;\nconst heap_pool = [];\nconst asm_pool = [];\nexport class Sha256 extends Hash {\n constructor() {\n super();\n this.NAME = 'sha256';\n this.BLOCK_SIZE = _sha256_block_size;\n this.HASH_SIZE = _sha256_hash_size;\n this.acquire_asm();\n }\n acquire_asm() {\n if (this.heap === undefined || this.asm === undefined) {\n this.heap = heap_pool.pop() || _heap_init();\n this.asm = asm_pool.pop() || sha256_asm({ Uint8Array: Uint8Array }, null, this.heap.buffer);\n this.reset();\n }\n return { heap: this.heap, asm: this.asm };\n }\n release_asm() {\n if (this.heap !== undefined && this.asm !== undefined) {\n heap_pool.push(this.heap);\n asm_pool.push(this.asm);\n }\n this.heap = undefined;\n this.asm = undefined;\n }\n static bytes(data) {\n return new Sha256().process(data).finish().result;\n }\n}\nSha256.NAME = 'sha256';\n","export var sha256_asm = function ( stdlib, foreign, buffer ) {\n \"use asm\";\n\n // SHA256 state\n var H0 = 0, H1 = 0, H2 = 0, H3 = 0, H4 = 0, H5 = 0, H6 = 0, H7 = 0,\n TOTAL0 = 0, TOTAL1 = 0;\n\n // HMAC state\n var I0 = 0, I1 = 0, I2 = 0, I3 = 0, I4 = 0, I5 = 0, I6 = 0, I7 = 0,\n O0 = 0, O1 = 0, O2 = 0, O3 = 0, O4 = 0, O5 = 0, O6 = 0, O7 = 0;\n\n // I/O buffer\n var HEAP = new stdlib.Uint8Array(buffer);\n\n function _core ( w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15 ) {\n w0 = w0|0;\n w1 = w1|0;\n w2 = w2|0;\n w3 = w3|0;\n w4 = w4|0;\n w5 = w5|0;\n w6 = w6|0;\n w7 = w7|0;\n w8 = w8|0;\n w9 = w9|0;\n w10 = w10|0;\n w11 = w11|0;\n w12 = w12|0;\n w13 = w13|0;\n w14 = w14|0;\n w15 = w15|0;\n\n var a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0;\n\n a = H0;\n b = H1;\n c = H2;\n d = H3;\n e = H4;\n f = H5;\n g = H6;\n h = H7;\n \n // 0\n h = ( w0 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0x428a2f98 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 1\n g = ( w1 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0x71374491 )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 2\n f = ( w2 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0xb5c0fbcf )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 3\n e = ( w3 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0xe9b5dba5 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 4\n d = ( w4 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0x3956c25b )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 5\n c = ( w5 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0x59f111f1 )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 6\n b = ( w6 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0x923f82a4 )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 7\n a = ( w7 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0xab1c5ed5 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 8\n h = ( w8 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0xd807aa98 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 9\n g = ( w9 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0x12835b01 )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 10\n f = ( w10 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0x243185be )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 11\n e = ( w11 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0x550c7dc3 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 12\n d = ( w12 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0x72be5d74 )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 13\n c = ( w13 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0x80deb1fe )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 14\n b = ( w14 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0x9bdc06a7 )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 15\n a = ( w15 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0xc19bf174 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 16\n w0 = ( ( w1>>>7 ^ w1>>>18 ^ w1>>>3 ^ w1<<25 ^ w1<<14 ) + ( w14>>>17 ^ w14>>>19 ^ w14>>>10 ^ w14<<15 ^ w14<<13 ) + w0 + w9 )|0;\n h = ( w0 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0xe49b69c1 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 17\n w1 = ( ( w2>>>7 ^ w2>>>18 ^ w2>>>3 ^ w2<<25 ^ w2<<14 ) + ( w15>>>17 ^ w15>>>19 ^ w15>>>10 ^ w15<<15 ^ w15<<13 ) + w1 + w10 )|0;\n g = ( w1 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0xefbe4786 )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 18\n w2 = ( ( w3>>>7 ^ w3>>>18 ^ w3>>>3 ^ w3<<25 ^ w3<<14 ) + ( w0>>>17 ^ w0>>>19 ^ w0>>>10 ^ w0<<15 ^ w0<<13 ) + w2 + w11 )|0;\n f = ( w2 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0x0fc19dc6 )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 19\n w3 = ( ( w4>>>7 ^ w4>>>18 ^ w4>>>3 ^ w4<<25 ^ w4<<14 ) + ( w1>>>17 ^ w1>>>19 ^ w1>>>10 ^ w1<<15 ^ w1<<13 ) + w3 + w12 )|0;\n e = ( w3 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0x240ca1cc )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 20\n w4 = ( ( w5>>>7 ^ w5>>>18 ^ w5>>>3 ^ w5<<25 ^ w5<<14 ) + ( w2>>>17 ^ w2>>>19 ^ w2>>>10 ^ w2<<15 ^ w2<<13 ) + w4 + w13 )|0;\n d = ( w4 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0x2de92c6f )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 21\n w5 = ( ( w6>>>7 ^ w6>>>18 ^ w6>>>3 ^ w6<<25 ^ w6<<14 ) + ( w3>>>17 ^ w3>>>19 ^ w3>>>10 ^ w3<<15 ^ w3<<13 ) + w5 + w14 )|0;\n c = ( w5 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0x4a7484aa )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 22\n w6 = ( ( w7>>>7 ^ w7>>>18 ^ w7>>>3 ^ w7<<25 ^ w7<<14 ) + ( w4>>>17 ^ w4>>>19 ^ w4>>>10 ^ w4<<15 ^ w4<<13 ) + w6 + w15 )|0;\n b = ( w6 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0x5cb0a9dc )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 23\n w7 = ( ( w8>>>7 ^ w8>>>18 ^ w8>>>3 ^ w8<<25 ^ w8<<14 ) + ( w5>>>17 ^ w5>>>19 ^ w5>>>10 ^ w5<<15 ^ w5<<13 ) + w7 + w0 )|0;\n a = ( w7 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0x76f988da )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 24\n w8 = ( ( w9>>>7 ^ w9>>>18 ^ w9>>>3 ^ w9<<25 ^ w9<<14 ) + ( w6>>>17 ^ w6>>>19 ^ w6>>>10 ^ w6<<15 ^ w6<<13 ) + w8 + w1 )|0;\n h = ( w8 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0x983e5152 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 25\n w9 = ( ( w10>>>7 ^ w10>>>18 ^ w10>>>3 ^ w10<<25 ^ w10<<14 ) + ( w7>>>17 ^ w7>>>19 ^ w7>>>10 ^ w7<<15 ^ w7<<13 ) + w9 + w2 )|0;\n g = ( w9 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0xa831c66d )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 26\n w10 = ( ( w11>>>7 ^ w11>>>18 ^ w11>>>3 ^ w11<<25 ^ w11<<14 ) + ( w8>>>17 ^ w8>>>19 ^ w8>>>10 ^ w8<<15 ^ w8<<13 ) + w10 + w3 )|0;\n f = ( w10 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0xb00327c8 )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 27\n w11 = ( ( w12>>>7 ^ w12>>>18 ^ w12>>>3 ^ w12<<25 ^ w12<<14 ) + ( w9>>>17 ^ w9>>>19 ^ w9>>>10 ^ w9<<15 ^ w9<<13 ) + w11 + w4 )|0;\n e = ( w11 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0xbf597fc7 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 28\n w12 = ( ( w13>>>7 ^ w13>>>18 ^ w13>>>3 ^ w13<<25 ^ w13<<14 ) + ( w10>>>17 ^ w10>>>19 ^ w10>>>10 ^ w10<<15 ^ w10<<13 ) + w12 + w5 )|0;\n d = ( w12 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0xc6e00bf3 )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 29\n w13 = ( ( w14>>>7 ^ w14>>>18 ^ w14>>>3 ^ w14<<25 ^ w14<<14 ) + ( w11>>>17 ^ w11>>>19 ^ w11>>>10 ^ w11<<15 ^ w11<<13 ) + w13 + w6 )|0;\n c = ( w13 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0xd5a79147 )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 30\n w14 = ( ( w15>>>7 ^ w15>>>18 ^ w15>>>3 ^ w15<<25 ^ w15<<14 ) + ( w12>>>17 ^ w12>>>19 ^ w12>>>10 ^ w12<<15 ^ w12<<13 ) + w14 + w7 )|0;\n b = ( w14 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0x06ca6351 )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 31\n w15 = ( ( w0>>>7 ^ w0>>>18 ^ w0>>>3 ^ w0<<25 ^ w0<<14 ) + ( w13>>>17 ^ w13>>>19 ^ w13>>>10 ^ w13<<15 ^ w13<<13 ) + w15 + w8 )|0;\n a = ( w15 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0x14292967 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 32\n w0 = ( ( w1>>>7 ^ w1>>>18 ^ w1>>>3 ^ w1<<25 ^ w1<<14 ) + ( w14>>>17 ^ w14>>>19 ^ w14>>>10 ^ w14<<15 ^ w14<<13 ) + w0 + w9 )|0;\n h = ( w0 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0x27b70a85 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 33\n w1 = ( ( w2>>>7 ^ w2>>>18 ^ w2>>>3 ^ w2<<25 ^ w2<<14 ) + ( w15>>>17 ^ w15>>>19 ^ w15>>>10 ^ w15<<15 ^ w15<<13 ) + w1 + w10 )|0;\n g = ( w1 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0x2e1b2138 )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 34\n w2 = ( ( w3>>>7 ^ w3>>>18 ^ w3>>>3 ^ w3<<25 ^ w3<<14 ) + ( w0>>>17 ^ w0>>>19 ^ w0>>>10 ^ w0<<15 ^ w0<<13 ) + w2 + w11 )|0;\n f = ( w2 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0x4d2c6dfc )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 35\n w3 = ( ( w4>>>7 ^ w4>>>18 ^ w4>>>3 ^ w4<<25 ^ w4<<14 ) + ( w1>>>17 ^ w1>>>19 ^ w1>>>10 ^ w1<<15 ^ w1<<13 ) + w3 + w12 )|0;\n e = ( w3 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0x53380d13 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 36\n w4 = ( ( w5>>>7 ^ w5>>>18 ^ w5>>>3 ^ w5<<25 ^ w5<<14 ) + ( w2>>>17 ^ w2>>>19 ^ w2>>>10 ^ w2<<15 ^ w2<<13 ) + w4 + w13 )|0;\n d = ( w4 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0x650a7354 )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 37\n w5 = ( ( w6>>>7 ^ w6>>>18 ^ w6>>>3 ^ w6<<25 ^ w6<<14 ) + ( w3>>>17 ^ w3>>>19 ^ w3>>>10 ^ w3<<15 ^ w3<<13 ) + w5 + w14 )|0;\n c = ( w5 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0x766a0abb )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 38\n w6 = ( ( w7>>>7 ^ w7>>>18 ^ w7>>>3 ^ w7<<25 ^ w7<<14 ) + ( w4>>>17 ^ w4>>>19 ^ w4>>>10 ^ w4<<15 ^ w4<<13 ) + w6 + w15 )|0;\n b = ( w6 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0x81c2c92e )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 39\n w7 = ( ( w8>>>7 ^ w8>>>18 ^ w8>>>3 ^ w8<<25 ^ w8<<14 ) + ( w5>>>17 ^ w5>>>19 ^ w5>>>10 ^ w5<<15 ^ w5<<13 ) + w7 + w0 )|0;\n a = ( w7 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0x92722c85 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 40\n w8 = ( ( w9>>>7 ^ w9>>>18 ^ w9>>>3 ^ w9<<25 ^ w9<<14 ) + ( w6>>>17 ^ w6>>>19 ^ w6>>>10 ^ w6<<15 ^ w6<<13 ) + w8 + w1 )|0;\n h = ( w8 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0xa2bfe8a1 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 41\n w9 = ( ( w10>>>7 ^ w10>>>18 ^ w10>>>3 ^ w10<<25 ^ w10<<14 ) + ( w7>>>17 ^ w7>>>19 ^ w7>>>10 ^ w7<<15 ^ w7<<13 ) + w9 + w2 )|0;\n g = ( w9 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0xa81a664b )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 42\n w10 = ( ( w11>>>7 ^ w11>>>18 ^ w11>>>3 ^ w11<<25 ^ w11<<14 ) + ( w8>>>17 ^ w8>>>19 ^ w8>>>10 ^ w8<<15 ^ w8<<13 ) + w10 + w3 )|0;\n f = ( w10 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0xc24b8b70 )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 43\n w11 = ( ( w12>>>7 ^ w12>>>18 ^ w12>>>3 ^ w12<<25 ^ w12<<14 ) + ( w9>>>17 ^ w9>>>19 ^ w9>>>10 ^ w9<<15 ^ w9<<13 ) + w11 + w4 )|0;\n e = ( w11 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0xc76c51a3 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 44\n w12 = ( ( w13>>>7 ^ w13>>>18 ^ w13>>>3 ^ w13<<25 ^ w13<<14 ) + ( w10>>>17 ^ w10>>>19 ^ w10>>>10 ^ w10<<15 ^ w10<<13 ) + w12 + w5 )|0;\n d = ( w12 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0xd192e819 )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 45\n w13 = ( ( w14>>>7 ^ w14>>>18 ^ w14>>>3 ^ w14<<25 ^ w14<<14 ) + ( w11>>>17 ^ w11>>>19 ^ w11>>>10 ^ w11<<15 ^ w11<<13 ) + w13 + w6 )|0;\n c = ( w13 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0xd6990624 )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 46\n w14 = ( ( w15>>>7 ^ w15>>>18 ^ w15>>>3 ^ w15<<25 ^ w15<<14 ) + ( w12>>>17 ^ w12>>>19 ^ w12>>>10 ^ w12<<15 ^ w12<<13 ) + w14 + w7 )|0;\n b = ( w14 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0xf40e3585 )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 47\n w15 = ( ( w0>>>7 ^ w0>>>18 ^ w0>>>3 ^ w0<<25 ^ w0<<14 ) + ( w13>>>17 ^ w13>>>19 ^ w13>>>10 ^ w13<<15 ^ w13<<13 ) + w15 + w8 )|0;\n a = ( w15 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0x106aa070 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 48\n w0 = ( ( w1>>>7 ^ w1>>>18 ^ w1>>>3 ^ w1<<25 ^ w1<<14 ) + ( w14>>>17 ^ w14>>>19 ^ w14>>>10 ^ w14<<15 ^ w14<<13 ) + w0 + w9 )|0;\n h = ( w0 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0x19a4c116 )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 49\n w1 = ( ( w2>>>7 ^ w2>>>18 ^ w2>>>3 ^ w2<<25 ^ w2<<14 ) + ( w15>>>17 ^ w15>>>19 ^ w15>>>10 ^ w15<<15 ^ w15<<13 ) + w1 + w10 )|0;\n g = ( w1 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0x1e376c08 )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 50\n w2 = ( ( w3>>>7 ^ w3>>>18 ^ w3>>>3 ^ w3<<25 ^ w3<<14 ) + ( w0>>>17 ^ w0>>>19 ^ w0>>>10 ^ w0<<15 ^ w0<<13 ) + w2 + w11 )|0;\n f = ( w2 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0x2748774c )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 51\n w3 = ( ( w4>>>7 ^ w4>>>18 ^ w4>>>3 ^ w4<<25 ^ w4<<14 ) + ( w1>>>17 ^ w1>>>19 ^ w1>>>10 ^ w1<<15 ^ w1<<13 ) + w3 + w12 )|0;\n e = ( w3 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0x34b0bcb5 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 52\n w4 = ( ( w5>>>7 ^ w5>>>18 ^ w5>>>3 ^ w5<<25 ^ w5<<14 ) + ( w2>>>17 ^ w2>>>19 ^ w2>>>10 ^ w2<<15 ^ w2<<13 ) + w4 + w13 )|0;\n d = ( w4 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0x391c0cb3 )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 53\n w5 = ( ( w6>>>7 ^ w6>>>18 ^ w6>>>3 ^ w6<<25 ^ w6<<14 ) + ( w3>>>17 ^ w3>>>19 ^ w3>>>10 ^ w3<<15 ^ w3<<13 ) + w5 + w14 )|0;\n c = ( w5 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0x4ed8aa4a )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 54\n w6 = ( ( w7>>>7 ^ w7>>>18 ^ w7>>>3 ^ w7<<25 ^ w7<<14 ) + ( w4>>>17 ^ w4>>>19 ^ w4>>>10 ^ w4<<15 ^ w4<<13 ) + w6 + w15 )|0;\n b = ( w6 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0x5b9cca4f )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 55\n w7 = ( ( w8>>>7 ^ w8>>>18 ^ w8>>>3 ^ w8<<25 ^ w8<<14 ) + ( w5>>>17 ^ w5>>>19 ^ w5>>>10 ^ w5<<15 ^ w5<<13 ) + w7 + w0 )|0;\n a = ( w7 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0x682e6ff3 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n // 56\n w8 = ( ( w9>>>7 ^ w9>>>18 ^ w9>>>3 ^ w9<<25 ^ w9<<14 ) + ( w6>>>17 ^ w6>>>19 ^ w6>>>10 ^ w6<<15 ^ w6<<13 ) + w8 + w1 )|0;\n h = ( w8 + h + ( e>>>6 ^ e>>>11 ^ e>>>25 ^ e<<26 ^ e<<21 ^ e<<7 ) + ( g ^ e & (f^g) ) + 0x748f82ee )|0;\n d = ( d + h )|0;\n h = ( h + ( (a & b) ^ ( c & (a ^ b) ) ) + ( a>>>2 ^ a>>>13 ^ a>>>22 ^ a<<30 ^ a<<19 ^ a<<10 ) )|0;\n\n // 57\n w9 = ( ( w10>>>7 ^ w10>>>18 ^ w10>>>3 ^ w10<<25 ^ w10<<14 ) + ( w7>>>17 ^ w7>>>19 ^ w7>>>10 ^ w7<<15 ^ w7<<13 ) + w9 + w2 )|0;\n g = ( w9 + g + ( d>>>6 ^ d>>>11 ^ d>>>25 ^ d<<26 ^ d<<21 ^ d<<7 ) + ( f ^ d & (e^f) ) + 0x78a5636f )|0;\n c = ( c + g )|0;\n g = ( g + ( (h & a) ^ ( b & (h ^ a) ) ) + ( h>>>2 ^ h>>>13 ^ h>>>22 ^ h<<30 ^ h<<19 ^ h<<10 ) )|0;\n\n // 58\n w10 = ( ( w11>>>7 ^ w11>>>18 ^ w11>>>3 ^ w11<<25 ^ w11<<14 ) + ( w8>>>17 ^ w8>>>19 ^ w8>>>10 ^ w8<<15 ^ w8<<13 ) + w10 + w3 )|0;\n f = ( w10 + f + ( c>>>6 ^ c>>>11 ^ c>>>25 ^ c<<26 ^ c<<21 ^ c<<7 ) + ( e ^ c & (d^e) ) + 0x84c87814 )|0;\n b = ( b + f )|0;\n f = ( f + ( (g & h) ^ ( a & (g ^ h) ) ) + ( g>>>2 ^ g>>>13 ^ g>>>22 ^ g<<30 ^ g<<19 ^ g<<10 ) )|0;\n\n // 59\n w11 = ( ( w12>>>7 ^ w12>>>18 ^ w12>>>3 ^ w12<<25 ^ w12<<14 ) + ( w9>>>17 ^ w9>>>19 ^ w9>>>10 ^ w9<<15 ^ w9<<13 ) + w11 + w4 )|0;\n e = ( w11 + e + ( b>>>6 ^ b>>>11 ^ b>>>25 ^ b<<26 ^ b<<21 ^ b<<7 ) + ( d ^ b & (c^d) ) + 0x8cc70208 )|0;\n a = ( a + e )|0;\n e = ( e + ( (f & g) ^ ( h & (f ^ g) ) ) + ( f>>>2 ^ f>>>13 ^ f>>>22 ^ f<<30 ^ f<<19 ^ f<<10 ) )|0;\n\n // 60\n w12 = ( ( w13>>>7 ^ w13>>>18 ^ w13>>>3 ^ w13<<25 ^ w13<<14 ) + ( w10>>>17 ^ w10>>>19 ^ w10>>>10 ^ w10<<15 ^ w10<<13 ) + w12 + w5 )|0;\n d = ( w12 + d + ( a>>>6 ^ a>>>11 ^ a>>>25 ^ a<<26 ^ a<<21 ^ a<<7 ) + ( c ^ a & (b^c) ) + 0x90befffa )|0;\n h = ( h + d )|0;\n d = ( d + ( (e & f) ^ ( g & (e ^ f) ) ) + ( e>>>2 ^ e>>>13 ^ e>>>22 ^ e<<30 ^ e<<19 ^ e<<10 ) )|0;\n\n // 61\n w13 = ( ( w14>>>7 ^ w14>>>18 ^ w14>>>3 ^ w14<<25 ^ w14<<14 ) + ( w11>>>17 ^ w11>>>19 ^ w11>>>10 ^ w11<<15 ^ w11<<13 ) + w13 + w6 )|0;\n c = ( w13 + c + ( h>>>6 ^ h>>>11 ^ h>>>25 ^ h<<26 ^ h<<21 ^ h<<7 ) + ( b ^ h & (a^b) ) + 0xa4506ceb )|0;\n g = ( g + c )|0;\n c = ( c + ( (d & e) ^ ( f & (d ^ e) ) ) + ( d>>>2 ^ d>>>13 ^ d>>>22 ^ d<<30 ^ d<<19 ^ d<<10 ) )|0;\n\n // 62\n w14 = ( ( w15>>>7 ^ w15>>>18 ^ w15>>>3 ^ w15<<25 ^ w15<<14 ) + ( w12>>>17 ^ w12>>>19 ^ w12>>>10 ^ w12<<15 ^ w12<<13 ) + w14 + w7 )|0;\n b = ( w14 + b + ( g>>>6 ^ g>>>11 ^ g>>>25 ^ g<<26 ^ g<<21 ^ g<<7 ) + ( a ^ g & (h^a) ) + 0xbef9a3f7 )|0;\n f = ( f + b )|0;\n b = ( b + ( (c & d) ^ ( e & (c ^ d) ) ) + ( c>>>2 ^ c>>>13 ^ c>>>22 ^ c<<30 ^ c<<19 ^ c<<10 ) )|0;\n\n // 63\n w15 = ( ( w0>>>7 ^ w0>>>18 ^ w0>>>3 ^ w0<<25 ^ w0<<14 ) + ( w13>>>17 ^ w13>>>19 ^ w13>>>10 ^ w13<<15 ^ w13<<13 ) + w15 + w8 )|0;\n a = ( w15 + a + ( f>>>6 ^ f>>>11 ^ f>>>25 ^ f<<26 ^ f<<21 ^ f<<7 ) + ( h ^ f & (g^h) ) + 0xc67178f2 )|0;\n e = ( e + a )|0;\n a = ( a + ( (b & c) ^ ( d & (b ^ c) ) ) + ( b>>>2 ^ b>>>13 ^ b>>>22 ^ b<<30 ^ b<<19 ^ b<<10 ) )|0;\n\n H0 = ( H0 + a )|0;\n H1 = ( H1 + b )|0;\n H2 = ( H2 + c )|0;\n H3 = ( H3 + d )|0;\n H4 = ( H4 + e )|0;\n H5 = ( H5 + f )|0;\n H6 = ( H6 + g )|0;\n H7 = ( H7 + h )|0;\n }\n\n function _core_heap ( offset ) {\n offset = offset|0;\n\n _core(\n HEAP[offset|0]<<24 | HEAP[offset|1]<<16 | HEAP[offset|2]<<8 | HEAP[offset|3],\n HEAP[offset|4]<<24 | HEAP[offset|5]<<16 | HEAP[offset|6]<<8 | HEAP[offset|7],\n HEAP[offset|8]<<24 | HEAP[offset|9]<<16 | HEAP[offset|10]<<8 | HEAP[offset|11],\n HEAP[offset|12]<<24 | HEAP[offset|13]<<16 | HEAP[offset|14]<<8 | HEAP[offset|15],\n HEAP[offset|16]<<24 | HEAP[offset|17]<<16 | HEAP[offset|18]<<8 | HEAP[offset|19],\n HEAP[offset|20]<<24 | HEAP[offset|21]<<16 | HEAP[offset|22]<<8 | HEAP[offset|23],\n HEAP[offset|24]<<24 | HEAP[offset|25]<<16 | HEAP[offset|26]<<8 | HEAP[offset|27],\n HEAP[offset|28]<<24 | HEAP[offset|29]<<16 | HEAP[offset|30]<<8 | HEAP[offset|31],\n HEAP[offset|32]<<24 | HEAP[offset|33]<<16 | HEAP[offset|34]<<8 | HEAP[offset|35],\n HEAP[offset|36]<<24 | HEAP[offset|37]<<16 | HEAP[offset|38]<<8 | HEAP[offset|39],\n HEAP[offset|40]<<24 | HEAP[offset|41]<<16 | HEAP[offset|42]<<8 | HEAP[offset|43],\n HEAP[offset|44]<<24 | HEAP[offset|45]<<16 | HEAP[offset|46]<<8 | HEAP[offset|47],\n HEAP[offset|48]<<24 | HEAP[offset|49]<<16 | HEAP[offset|50]<<8 | HEAP[offset|51],\n HEAP[offset|52]<<24 | HEAP[offset|53]<<16 | HEAP[offset|54]<<8 | HEAP[offset|55],\n HEAP[offset|56]<<24 | HEAP[offset|57]<<16 | HEAP[offset|58]<<8 | HEAP[offset|59],\n HEAP[offset|60]<<24 | HEAP[offset|61]<<16 | HEAP[offset|62]<<8 | HEAP[offset|63]\n );\n }\n\n // offset — multiple of 32\n function _state_to_heap ( output ) {\n output = output|0;\n\n HEAP[output|0] = H0>>>24;\n HEAP[output|1] = H0>>>16&255;\n HEAP[output|2] = H0>>>8&255;\n HEAP[output|3] = H0&255;\n HEAP[output|4] = H1>>>24;\n HEAP[output|5] = H1>>>16&255;\n HEAP[output|6] = H1>>>8&255;\n HEAP[output|7] = H1&255;\n HEAP[output|8] = H2>>>24;\n HEAP[output|9] = H2>>>16&255;\n HEAP[output|10] = H2>>>8&255;\n HEAP[output|11] = H2&255;\n HEAP[output|12] = H3>>>24;\n HEAP[output|13] = H3>>>16&255;\n HEAP[output|14] = H3>>>8&255;\n HEAP[output|15] = H3&255;\n HEAP[output|16] = H4>>>24;\n HEAP[output|17] = H4>>>16&255;\n HEAP[output|18] = H4>>>8&255;\n HEAP[output|19] = H4&255;\n HEAP[output|20] = H5>>>24;\n HEAP[output|21] = H5>>>16&255;\n HEAP[output|22] = H5>>>8&255;\n HEAP[output|23] = H5&255;\n HEAP[output|24] = H6>>>24;\n HEAP[output|25] = H6>>>16&255;\n HEAP[output|26] = H6>>>8&255;\n HEAP[output|27] = H6&255;\n HEAP[output|28] = H7>>>24;\n HEAP[output|29] = H7>>>16&255;\n HEAP[output|30] = H7>>>8&255;\n HEAP[output|31] = H7&255;\n }\n\n function reset () {\n H0 = 0x6a09e667;\n H1 = 0xbb67ae85;\n H2 = 0x3c6ef372;\n H3 = 0xa54ff53a;\n H4 = 0x510e527f;\n H5 = 0x9b05688c;\n H6 = 0x1f83d9ab;\n H7 = 0x5be0cd19;\n TOTAL0 = TOTAL1 = 0;\n }\n\n function init ( h0, h1, h2, h3, h4, h5, h6, h7, total0, total1 ) {\n h0 = h0|0;\n h1 = h1|0;\n h2 = h2|0;\n h3 = h3|0;\n h4 = h4|0;\n h5 = h5|0;\n h6 = h6|0;\n h7 = h7|0;\n total0 = total0|0;\n total1 = total1|0;\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n H5 = h5;\n H6 = h6;\n H7 = h7;\n TOTAL0 = total0;\n TOTAL1 = total1;\n }\n\n // offset — multiple of 64\n function process ( offset, length ) {\n offset = offset|0;\n length = length|0;\n\n var hashed = 0;\n\n if ( offset & 63 )\n return -1;\n\n while ( (length|0) >= 64 ) {\n _core_heap(offset);\n\n offset = ( offset + 64 )|0;\n length = ( length - 64 )|0;\n\n hashed = ( hashed + 64 )|0;\n }\n\n TOTAL0 = ( TOTAL0 + hashed )|0;\n if ( TOTAL0>>>0 < hashed>>>0 ) TOTAL1 = ( TOTAL1 + 1 )|0;\n\n return hashed|0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function finish ( offset, length, output ) {\n offset = offset|0;\n length = length|0;\n output = output|0;\n\n var hashed = 0,\n i = 0;\n\n if ( offset & 63 )\n return -1;\n\n if ( ~output )\n if ( output & 31 )\n return -1;\n\n if ( (length|0) >= 64 ) {\n hashed = process( offset, length )|0;\n if ( (hashed|0) == -1 )\n return -1;\n\n offset = ( offset + hashed )|0;\n length = ( length - hashed )|0;\n }\n\n hashed = ( hashed + length )|0;\n TOTAL0 = ( TOTAL0 + length )|0;\n if ( TOTAL0>>>0 < length>>>0 ) TOTAL1 = ( TOTAL1 + 1 )|0;\n\n HEAP[offset|length] = 0x80;\n\n if ( (length|0) >= 56 ) {\n for ( i = (length+1)|0; (i|0) < 64; i = (i+1)|0 )\n HEAP[offset|i] = 0x00;\n\n _core_heap(offset);\n\n length = 0;\n\n HEAP[offset|0] = 0;\n }\n\n for ( i = (length+1)|0; (i|0) < 59; i = (i+1)|0 )\n HEAP[offset|i] = 0;\n\n HEAP[offset|56] = TOTAL1>>>21&255;\n HEAP[offset|57] = TOTAL1>>>13&255;\n HEAP[offset|58] = TOTAL1>>>5&255;\n HEAP[offset|59] = TOTAL1<<3&255 | TOTAL0>>>29;\n HEAP[offset|60] = TOTAL0>>>21&255;\n HEAP[offset|61] = TOTAL0>>>13&255;\n HEAP[offset|62] = TOTAL0>>>5&255;\n HEAP[offset|63] = TOTAL0<<3&255;\n _core_heap(offset);\n\n if ( ~output )\n _state_to_heap(output);\n\n return hashed|0;\n }\n\n function hmac_reset () {\n H0 = I0;\n H1 = I1;\n H2 = I2;\n H3 = I3;\n H4 = I4;\n H5 = I5;\n H6 = I6;\n H7 = I7;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function _hmac_opad () {\n H0 = O0;\n H1 = O1;\n H2 = O2;\n H3 = O3;\n H4 = O4;\n H5 = O5;\n H6 = O6;\n H7 = O7;\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n function hmac_init ( p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) {\n p0 = p0|0;\n p1 = p1|0;\n p2 = p2|0;\n p3 = p3|0;\n p4 = p4|0;\n p5 = p5|0;\n p6 = p6|0;\n p7 = p7|0;\n p8 = p8|0;\n p9 = p9|0;\n p10 = p10|0;\n p11 = p11|0;\n p12 = p12|0;\n p13 = p13|0;\n p14 = p14|0;\n p15 = p15|0;\n\n // opad\n reset();\n _core(\n p0 ^ 0x5c5c5c5c,\n p1 ^ 0x5c5c5c5c,\n p2 ^ 0x5c5c5c5c,\n p3 ^ 0x5c5c5c5c,\n p4 ^ 0x5c5c5c5c,\n p5 ^ 0x5c5c5c5c,\n p6 ^ 0x5c5c5c5c,\n p7 ^ 0x5c5c5c5c,\n p8 ^ 0x5c5c5c5c,\n p9 ^ 0x5c5c5c5c,\n p10 ^ 0x5c5c5c5c,\n p11 ^ 0x5c5c5c5c,\n p12 ^ 0x5c5c5c5c,\n p13 ^ 0x5c5c5c5c,\n p14 ^ 0x5c5c5c5c,\n p15 ^ 0x5c5c5c5c\n );\n O0 = H0;\n O1 = H1;\n O2 = H2;\n O3 = H3;\n O4 = H4;\n O5 = H5;\n O6 = H6;\n O7 = H7;\n\n // ipad\n reset();\n _core(\n p0 ^ 0x36363636,\n p1 ^ 0x36363636,\n p2 ^ 0x36363636,\n p3 ^ 0x36363636,\n p4 ^ 0x36363636,\n p5 ^ 0x36363636,\n p6 ^ 0x36363636,\n p7 ^ 0x36363636,\n p8 ^ 0x36363636,\n p9 ^ 0x36363636,\n p10 ^ 0x36363636,\n p11 ^ 0x36363636,\n p12 ^ 0x36363636,\n p13 ^ 0x36363636,\n p14 ^ 0x36363636,\n p15 ^ 0x36363636\n );\n I0 = H0;\n I1 = H1;\n I2 = H2;\n I3 = H3;\n I4 = H4;\n I5 = H5;\n I6 = H6;\n I7 = H7;\n\n TOTAL0 = 64;\n TOTAL1 = 0;\n }\n\n // offset — multiple of 64\n // output — multiple of 32\n function hmac_finish ( offset, length, output ) {\n offset = offset|0;\n length = length|0;\n output = output|0;\n\n var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n hashed = 0;\n\n if ( offset & 63 )\n return -1;\n\n if ( ~output )\n if ( output & 31 )\n return -1;\n\n hashed = finish( offset, length, -1 )|0;\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n _hmac_opad();\n _core( t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768 );\n\n if ( ~output )\n _state_to_heap(output);\n\n return hashed|0;\n }\n\n // salt is assumed to be already processed\n // offset — multiple of 64\n // output — multiple of 32\n function pbkdf2_generate_block ( offset, length, block, count, output ) {\n offset = offset|0;\n length = length|0;\n block = block|0;\n count = count|0;\n output = output|0;\n\n var h0 = 0, h1 = 0, h2 = 0, h3 = 0, h4 = 0, h5 = 0, h6 = 0, h7 = 0,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0;\n\n if ( offset & 63 )\n return -1;\n\n if ( ~output )\n if ( output & 31 )\n return -1;\n\n // pad block number into heap\n // FIXME probable OOB write\n HEAP[(offset+length)|0] = block>>>24;\n HEAP[(offset+length+1)|0] = block>>>16&255;\n HEAP[(offset+length+2)|0] = block>>>8&255;\n HEAP[(offset+length+3)|0] = block&255;\n\n // finish first iteration\n hmac_finish( offset, (length+4)|0, -1 )|0;\n h0 = t0 = H0, h1 = t1 = H1, h2 = t2 = H2, h3 = t3 = H3, h4 = t4 = H4, h5 = t5 = H5, h6 = t6 = H6, h7 = t7 = H7;\n count = (count-1)|0;\n\n // perform the rest iterations\n while ( (count|0) > 0 ) {\n hmac_reset();\n _core( t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768 );\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n _hmac_opad();\n _core( t0, t1, t2, t3, t4, t5, t6, t7, 0x80000000, 0, 0, 0, 0, 0, 0, 768 );\n t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;\n\n h0 = h0 ^ H0;\n h1 = h1 ^ H1;\n h2 = h2 ^ H2;\n h3 = h3 ^ H3;\n h4 = h4 ^ H4;\n h5 = h5 ^ H5;\n h6 = h6 ^ H6;\n h7 = h7 ^ H7;\n\n count = (count-1)|0;\n }\n\n H0 = h0;\n H1 = h1;\n H2 = h2;\n H3 = h3;\n H4 = h4;\n H5 = h5;\n H6 = h6;\n H7 = h7;\n\n if ( ~output )\n _state_to_heap(output);\n\n return 0;\n }\n\n return {\n // SHA256\n reset: reset,\n init: init,\n process: process,\n finish: finish,\n\n // HMAC-SHA256\n hmac_reset: hmac_reset,\n hmac_init: hmac_init,\n hmac_finish: hmac_finish,\n\n // PBKDF2-HMAC-SHA256\n pbkdf2_generate_block: pbkdf2_generate_block\n }\n}\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","/**\n * A fast MD5 JavaScript implementation\n * Copyright (c) 2012 Joseph Myers\n * http://www.myersdaily.org/joseph/javascript/md5-text.html\n *\n * Permission to use, copy, modify, and distribute this software\n * and its documentation for any purposes and without\n * fee is hereby granted provided that this copyright notice\n * appears in all copies.\n *\n * Of course, this soft is provided \"as is\" without express or implied\n * warranty of any kind.\n */\n\nimport util from '../../util';\n\n// MD5 Digest\nasync function md5(entree) {\n const digest = md51(util.uint8ArrayToString(entree));\n return util.hexToUint8Array(hex(digest));\n}\n\nfunction md5cycle(x, k) {\n let a = x[0];\n let b = x[1];\n let c = x[2];\n let d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | (~d)), a, b, x, s, t);\n}\n\nfunction md51(s) {\n const n = s.length;\n const state = [1732584193, -271733879, -1732584194, 271733878];\n let i;\n for (i = 64; i <= s.length; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n const tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < s.length; i++) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i++) {\n tail[i] = 0;\n }\n }\n tail[14] = n * 8;\n md5cycle(state, tail);\n return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) { /* I figured global was faster. */\n const md5blks = [];\n let i; /* Andy King said do it this way. */\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) <<\n 24);\n }\n return md5blks;\n}\n\nconst hex_chr = '0123456789abcdef'.split('');\n\nfunction rhex(n) {\n let s = '';\n let j = 0;\n for (; j < 4; j++) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n}\n\nfunction hex(x) {\n for (let i = 0; i < x.length; i++) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n}\n\n/* this function is much faster,\nso if possible we use it. Some IEs\nare the only ones I know of that\nneed the idiotic second function,\ngenerated by an if clause. */\n\nfunction add32(a, b) {\n return (a + b) & 0xFFFFFFFF;\n}\n\nexport default md5;\n","/**\n * @fileoverview Provides an interface to hashing functions available in Node.js or external libraries.\n * @see {@link https://github.com/asmcrypto/asmcrypto.js|asmCrypto}\n * @see {@link https://github.com/indutny/hash.js|hash.js}\n * @module crypto/hash\n * @private\n */\n\nimport { Sha1 } from '@openpgp/asmcrypto.js/dist_es8/hash/sha1/sha1';\nimport { Sha256 } from '@openpgp/asmcrypto.js/dist_es8/hash/sha256/sha256';\nimport sha224 from 'hash.js/lib/hash/sha/224';\nimport sha384 from 'hash.js/lib/hash/sha/384';\nimport sha512 from 'hash.js/lib/hash/sha/512';\nimport { ripemd160 } from 'hash.js/lib/hash/ripemd';\nimport * as stream from '@openpgp/web-stream-tools';\nimport md5 from './md5';\nimport util from '../../util';\nimport defaultConfig from '../../config';\nimport enums from '../../enums';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\nconst nodeCryptoHashes = nodeCrypto && nodeCrypto.getHashes();\n\nfunction nodeHash(type) {\n if (!nodeCrypto || !nodeCryptoHashes.includes(type)) {\n return;\n }\n return async function (data) {\n const shasum = nodeCrypto.createHash(type);\n return stream.transform(data, value => {\n shasum.update(value);\n }, () => new Uint8Array(shasum.digest()));\n };\n}\n\nfunction hashjsHash(hash, webCryptoHash) {\n return async function(data, config = defaultConfig) {\n if (stream.isArrayStream(data)) {\n data = await stream.readToEnd(data);\n }\n if (!util.isStream(data) && webCrypto && webCryptoHash && data.length >= config.minBytesForWebCrypto) {\n return new Uint8Array(await webCrypto.digest(webCryptoHash, data));\n }\n const hashInstance = hash();\n return stream.transform(data, value => {\n hashInstance.update(value);\n }, () => new Uint8Array(hashInstance.digest()));\n };\n}\n\nfunction asmcryptoHash(hash, webCryptoHash) {\n return async function(data, config = defaultConfig) {\n if (stream.isArrayStream(data)) {\n data = await stream.readToEnd(data);\n }\n if (util.isStream(data)) {\n const hashInstance = new hash();\n return stream.transform(data, value => {\n hashInstance.process(value);\n }, () => hashInstance.finish().result);\n } else if (webCrypto && webCryptoHash && data.length >= config.minBytesForWebCrypto) {\n return new Uint8Array(await webCrypto.digest(webCryptoHash, data));\n } else {\n return hash.bytes(data);\n }\n };\n}\n\nconst hashFunctions = {\n md5: nodeHash('md5') || md5,\n sha1: nodeHash('sha1') || asmcryptoHash(Sha1, 'SHA-1'),\n sha224: nodeHash('sha224') || hashjsHash(sha224),\n sha256: nodeHash('sha256') || asmcryptoHash(Sha256, 'SHA-256'),\n sha384: nodeHash('sha384') || hashjsHash(sha384, 'SHA-384'),\n sha512: nodeHash('sha512') || hashjsHash(sha512, 'SHA-512'), // asmcrypto sha512 is huge.\n ripemd: nodeHash('ripemd160') || hashjsHash(ripemd160)\n};\n\nexport default {\n\n /** @see module:md5 */\n md5: hashFunctions.md5,\n /** @see asmCrypto */\n sha1: hashFunctions.sha1,\n /** @see hash.js */\n sha224: hashFunctions.sha224,\n /** @see asmCrypto */\n sha256: hashFunctions.sha256,\n /** @see hash.js */\n sha384: hashFunctions.sha384,\n /** @see asmCrypto */\n sha512: hashFunctions.sha512,\n /** @see hash.js */\n ripemd: hashFunctions.ripemd,\n\n /**\n * Create a hash on the specified data using the specified algorithm\n * @param {module:enums.hash} algo - Hash algorithm type (see {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4})\n * @param {Uint8Array} data - Data to be hashed\n * @returns {Promise} Hash value.\n */\n digest: function(algo, data) {\n switch (algo) {\n case enums.hash.md5:\n return this.md5(data);\n case enums.hash.sha1:\n return this.sha1(data);\n case enums.hash.ripemd:\n return this.ripemd(data);\n case enums.hash.sha256:\n return this.sha256(data);\n case enums.hash.sha384:\n return this.sha384(data);\n case enums.hash.sha512:\n return this.sha512(data);\n case enums.hash.sha224:\n return this.sha224(data);\n default:\n throw new Error('Invalid hash function.');\n }\n },\n\n /**\n * Returns the hash size in bytes of the specified hash algorithm type\n * @param {module:enums.hash} algo - Hash algorithm type (See {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4})\n * @returns {Integer} Size in bytes of the resulting hash.\n */\n getHashByteLength: function(algo) {\n switch (algo) {\n case enums.hash.md5:\n return 16;\n case enums.hash.sha1:\n case enums.hash.ripemd:\n return 20;\n case enums.hash.sha256:\n return 32;\n case enums.hash.sha384:\n return 48;\n case enums.hash.sha512:\n return 64;\n case enums.hash.sha224:\n return 28;\n default:\n throw new Error('Invalid hash algorithm.');\n }\n }\n};\n","import { AES } from './aes';\nimport { joinBytes } from '../other/utils';\nexport class AES_CFB {\n static encrypt(data, key, iv) {\n return new AES_CFB(key, iv).encrypt(data);\n }\n static decrypt(data, key, iv) {\n return new AES_CFB(key, iv).decrypt(data);\n }\n constructor(key, iv, aes) {\n this.aes = aes ? aes : new AES(key, iv, true, 'CFB');\n delete this.aes.padding;\n }\n encrypt(data) {\n const r1 = this.aes.AES_Encrypt_process(data);\n const r2 = this.aes.AES_Encrypt_finish();\n return joinBytes(r1, r2);\n }\n decrypt(data) {\n const r1 = this.aes.AES_Decrypt_process(data);\n const r2 = this.aes.AES_Decrypt_finish();\n return joinBytes(r1, r2);\n }\n}\n","import * as cipher from '.';\nimport enums from '../../enums';\n\n/**\n * Get implementation of the given cipher\n * @param {enums.symmetric} algo\n * @returns {Object}\n * @throws {Error} on invalid algo\n */\nexport default function getCipher(algo) {\n const algoName = enums.read(enums.symmetric, algo);\n return cipher[algoName];\n}\n","// Modified by ProtonTech AG\n\n// Modified by Recurity Labs GmbH\n\n// modified version of https://www.hanewin.net/encrypt/PGdecode.js:\n\n/* OpenPGP encryption using RSA/AES\n * Copyright 2005-2006 Herbert Hanewinkel, www.haneWIN.de\n * version 2.0, check www.haneWIN.de for the latest version\n\n * This software is provided as-is, without express or implied warranty.\n * Permission to use, copy, modify, distribute or sell this software, with or\n * without fee, for any purpose and by any individual or organization, is hereby\n * granted, provided that the above copyright notice and this paragraph appear\n * in all copies. Distribution as a part of an application or binary must\n * include the above copyright notice in the documentation and/or other\n * materials provided with the application or distribution.\n */\n\n/**\n * @module crypto/mode/cfb\n * @private\n */\n\nimport { AES_CFB } from '@openpgp/asmcrypto.js/dist_es8/aes/cfb';\nimport * as stream from '@openpgp/web-stream-tools';\nimport getCipher from '../cipher/getCipher';\nimport util from '../../util';\nimport enums from '../../enums';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\n\nconst knownAlgos = nodeCrypto ? nodeCrypto.getCiphers() : [];\nconst nodeAlgos = {\n idea: knownAlgos.includes('idea-cfb') ? 'idea-cfb' : undefined, /* Unused, not implemented */\n tripledes: knownAlgos.includes('des-ede3-cfb') ? 'des-ede3-cfb' : undefined,\n cast5: knownAlgos.includes('cast5-cfb') ? 'cast5-cfb' : undefined,\n blowfish: knownAlgos.includes('bf-cfb') ? 'bf-cfb' : undefined,\n aes128: knownAlgos.includes('aes-128-cfb') ? 'aes-128-cfb' : undefined,\n aes192: knownAlgos.includes('aes-192-cfb') ? 'aes-192-cfb' : undefined,\n aes256: knownAlgos.includes('aes-256-cfb') ? 'aes-256-cfb' : undefined\n /* twofish is not implemented in OpenSSL */\n};\n\n/**\n * CFB encryption\n * @param {enums.symmetric} algo - block cipher algorithm\n * @param {Uint8Array} key\n * @param {MaybeStream} plaintext\n * @param {Uint8Array} iv\n * @param {Object} config - full configuration, defaults to openpgp.config\n * @returns MaybeStream\n */\nexport async function encrypt(algo, key, plaintext, iv, config) {\n const algoName = enums.read(enums.symmetric, algo);\n if (util.getNodeCrypto() && nodeAlgos[algoName]) { // Node crypto library.\n return nodeEncrypt(algo, key, plaintext, iv);\n }\n if (util.isAES(algo)) {\n return aesEncrypt(algo, key, plaintext, iv, config);\n }\n\n const Cipher = getCipher(algo);\n const cipherfn = new Cipher(key);\n const block_size = cipherfn.blockSize;\n\n const blockc = iv.slice();\n let pt = new Uint8Array();\n const process = chunk => {\n if (chunk) {\n pt = util.concatUint8Array([pt, chunk]);\n }\n const ciphertext = new Uint8Array(pt.length);\n let i;\n let j = 0;\n while (chunk ? pt.length >= block_size : pt.length) {\n const encblock = cipherfn.encrypt(blockc);\n for (i = 0; i < block_size; i++) {\n blockc[i] = pt[i] ^ encblock[i];\n ciphertext[j++] = blockc[i];\n }\n pt = pt.subarray(block_size);\n }\n return ciphertext.subarray(0, j);\n };\n return stream.transform(plaintext, process, process);\n}\n\n/**\n * CFB decryption\n * @param {enums.symmetric} algo - block cipher algorithm\n * @param {Uint8Array} key\n * @param {MaybeStream} ciphertext\n * @param {Uint8Array} iv\n * @returns MaybeStream\n */\nexport async function decrypt(algo, key, ciphertext, iv) {\n const algoName = enums.read(enums.symmetric, algo);\n if (util.getNodeCrypto() && nodeAlgos[algoName]) { // Node crypto library.\n return nodeDecrypt(algo, key, ciphertext, iv);\n }\n if (util.isAES(algo)) {\n return aesDecrypt(algo, key, ciphertext, iv);\n }\n\n const Cipher = getCipher(algo);\n const cipherfn = new Cipher(key);\n const block_size = cipherfn.blockSize;\n\n let blockp = iv;\n let ct = new Uint8Array();\n const process = chunk => {\n if (chunk) {\n ct = util.concatUint8Array([ct, chunk]);\n }\n const plaintext = new Uint8Array(ct.length);\n let i;\n let j = 0;\n while (chunk ? ct.length >= block_size : ct.length) {\n const decblock = cipherfn.encrypt(blockp);\n blockp = ct.subarray(0, block_size);\n for (i = 0; i < block_size; i++) {\n plaintext[j++] = blockp[i] ^ decblock[i];\n }\n ct = ct.subarray(block_size);\n }\n return plaintext.subarray(0, j);\n };\n return stream.transform(ciphertext, process, process);\n}\n\nfunction aesEncrypt(algo, key, pt, iv, config) {\n if (\n util.getWebCrypto() &&\n key.length !== 24 && // Chrome doesn't support 192 bit keys, see https://www.chromium.org/blink/webcrypto#TOC-AES-support\n !util.isStream(pt) &&\n pt.length >= 3000 * config.minBytesForWebCrypto // Default to a 3MB minimum. Chrome is pretty slow for small messages, see: https://bugs.chromium.org/p/chromium/issues/detail?id=701188#c2\n ) { // Web Crypto\n return webEncrypt(algo, key, pt, iv);\n }\n // asm.js fallback\n const cfb = new AES_CFB(key, iv);\n return stream.transform(pt, value => cfb.aes.AES_Encrypt_process(value), () => cfb.aes.AES_Encrypt_finish());\n}\n\nfunction aesDecrypt(algo, key, ct, iv) {\n if (util.isStream(ct)) {\n const cfb = new AES_CFB(key, iv);\n return stream.transform(ct, value => cfb.aes.AES_Decrypt_process(value), () => cfb.aes.AES_Decrypt_finish());\n }\n return AES_CFB.decrypt(ct, key, iv);\n}\n\nfunction xorMut(a, b) {\n for (let i = 0; i < a.length; i++) {\n a[i] = a[i] ^ b[i];\n }\n}\n\nasync function webEncrypt(algo, key, pt, iv) {\n const ALGO = 'AES-CBC';\n const _key = await webCrypto.importKey('raw', key, { name: ALGO }, false, ['encrypt']);\n const { blockSize } = getCipher(algo);\n const cbc_pt = util.concatUint8Array([new Uint8Array(blockSize), pt]);\n const ct = new Uint8Array(await webCrypto.encrypt({ name: ALGO, iv }, _key, cbc_pt)).subarray(0, pt.length);\n xorMut(ct, pt);\n return ct;\n}\n\nfunction nodeEncrypt(algo, key, pt, iv) {\n const algoName = enums.read(enums.symmetric, algo);\n const cipherObj = new nodeCrypto.createCipheriv(nodeAlgos[algoName], key, iv);\n return stream.transform(pt, value => new Uint8Array(cipherObj.update(value)));\n}\n\nfunction nodeDecrypt(algo, key, ct, iv) {\n const algoName = enums.read(enums.symmetric, algo);\n const decipherObj = new nodeCrypto.createDecipheriv(nodeAlgos[algoName], key, iv);\n return stream.transform(ct, value => new Uint8Array(decipherObj.update(value)));\n}\n","import { AES } from './aes';\nimport { IllegalArgumentError } from '../other/errors';\nimport { joinBytes } from '../other/utils';\nexport class AES_CTR {\n static encrypt(data, key, nonce) {\n return new AES_CTR(key, nonce).encrypt(data);\n }\n static decrypt(data, key, nonce) {\n return new AES_CTR(key, nonce).encrypt(data);\n }\n constructor(key, nonce, aes) {\n this.aes = aes ? aes : new AES(key, undefined, false, 'CTR');\n delete this.aes.padding;\n this.AES_CTR_set_options(nonce);\n }\n encrypt(data) {\n const r1 = this.aes.AES_Encrypt_process(data);\n const r2 = this.aes.AES_Encrypt_finish();\n return joinBytes(r1, r2);\n }\n decrypt(data) {\n const r1 = this.aes.AES_Encrypt_process(data);\n const r2 = this.aes.AES_Encrypt_finish();\n return joinBytes(r1, r2);\n }\n AES_CTR_set_options(nonce, counter, size) {\n let { asm } = this.aes.acquire_asm();\n if (size !== undefined) {\n if (size < 8 || size > 48)\n throw new IllegalArgumentError('illegal counter size');\n let mask = Math.pow(2, size) - 1;\n asm.set_mask(0, 0, (mask / 0x100000000) | 0, mask | 0);\n }\n else {\n size = 48;\n asm.set_mask(0, 0, 0xffff, 0xffffffff);\n }\n if (nonce !== undefined) {\n let len = nonce.length;\n if (!len || len > 16)\n throw new IllegalArgumentError('illegal nonce size');\n let view = new DataView(new ArrayBuffer(16));\n new Uint8Array(view.buffer).set(nonce);\n asm.set_nonce(view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12));\n }\n else {\n throw new Error('nonce is required');\n }\n if (counter !== undefined) {\n if (counter < 0 || counter >= Math.pow(2, size))\n throw new IllegalArgumentError('illegal counter value');\n asm.set_counter(0, 0, (counter / 0x100000000) | 0, counter | 0);\n }\n }\n}\n","import { AES } from './aes';\nimport { joinBytes } from '../other/utils';\nexport class AES_CBC {\n static encrypt(data, key, padding = true, iv) {\n return new AES_CBC(key, iv, padding).encrypt(data);\n }\n static decrypt(data, key, padding = true, iv) {\n return new AES_CBC(key, iv, padding).decrypt(data);\n }\n constructor(key, iv, padding = true, aes) {\n this.aes = aes ? aes : new AES(key, iv, padding, 'CBC');\n }\n encrypt(data) {\n const r1 = this.aes.AES_Encrypt_process(data);\n const r2 = this.aes.AES_Encrypt_finish();\n return joinBytes(r1, r2);\n }\n decrypt(data) {\n const r1 = this.aes.AES_Decrypt_process(data);\n const r2 = this.aes.AES_Decrypt_finish();\n return joinBytes(r1, r2);\n }\n}\n","/**\n * @fileoverview This module implements AES-CMAC on top of\n * native AES-CBC using either the WebCrypto API or Node.js' crypto API.\n * @module crypto/cmac\n * @private\n */\n\nimport { AES_CBC } from '@openpgp/asmcrypto.js/dist_es8/aes/cbc';\nimport util from '../util';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\n\n\n/**\n * This implementation of CMAC is based on the description of OMAC in\n * http://web.cs.ucdavis.edu/~rogaway/papers/eax.pdf. As per that\n * document:\n *\n * We have made a small modification to the OMAC algorithm as it was\n * originally presented, changing one of its two constants.\n * Specifically, the constant 4 at line 85 was the constant 1/2 (the\n * multiplicative inverse of 2) in the original definition of OMAC [14].\n * The OMAC authors indicate that they will promulgate this modification\n * [15], which slightly simplifies implementations.\n */\n\nconst blockLength = 16;\n\n\n/**\n * xor `padding` into the end of `data`. This function implements \"the\n * operation xor→ [which] xors the shorter string into the end of longer\n * one\". Since data is always as least as long as padding, we can\n * simplify the implementation.\n * @param {Uint8Array} data\n * @param {Uint8Array} padding\n */\nfunction rightXORMut(data, padding) {\n const offset = data.length - blockLength;\n for (let i = 0; i < blockLength; i++) {\n data[i + offset] ^= padding[i];\n }\n return data;\n}\n\nfunction pad(data, padding, padding2) {\n // if |M| in {n, 2n, 3n, ...}\n if (data.length && data.length % blockLength === 0) {\n // then return M xor→ B,\n return rightXORMut(data, padding);\n }\n // else return (M || 10^(n−1−(|M| mod n))) xor→ P\n const padded = new Uint8Array(data.length + (blockLength - (data.length % blockLength)));\n padded.set(data);\n padded[data.length] = 0b10000000;\n return rightXORMut(padded, padding2);\n}\n\nconst zeroBlock = new Uint8Array(blockLength);\n\nexport default async function CMAC(key) {\n const cbc = await CBC(key);\n\n // L ← E_K(0^n); B ← 2L; P ← 4L\n const padding = util.double(await cbc(zeroBlock));\n const padding2 = util.double(padding);\n\n return async function(data) {\n // return CBC_K(pad(M; B, P))\n return (await cbc(pad(data, padding, padding2))).subarray(-blockLength);\n };\n}\n\nasync function CBC(key) {\n if (util.getWebCrypto() && key.length !== 24) { // WebCrypto (no 192 bit support) see: https://www.chromium.org/blink/webcrypto#TOC-AES-support\n key = await webCrypto.importKey('raw', key, { name: 'AES-CBC', length: key.length * 8 }, false, ['encrypt']);\n return async function(pt) {\n const ct = await webCrypto.encrypt({ name: 'AES-CBC', iv: zeroBlock, length: blockLength * 8 }, key, pt);\n return new Uint8Array(ct).subarray(0, ct.byteLength - blockLength);\n };\n }\n if (util.getNodeCrypto()) { // Node crypto library\n return async function(pt) {\n const en = new nodeCrypto.createCipheriv('aes-' + (key.length * 8) + '-cbc', key, zeroBlock);\n const ct = en.update(pt);\n return new Uint8Array(ct);\n };\n }\n // asm.js fallback\n return async function(pt) {\n return AES_CBC.encrypt(pt, key, false, zeroBlock);\n };\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 ProtonTech AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements AES-EAX en/decryption on top of\n * native AES-CTR using either the WebCrypto API or Node.js' crypto API.\n * @module crypto/mode/eax\n * @private\n */\n\nimport { AES_CTR } from '@openpgp/asmcrypto.js/dist_es8/aes/ctr';\nimport CMAC from '../cmac';\nimport util from '../../util';\nimport enums from '../../enums';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\nconst Buffer = util.getNodeBuffer();\n\n\nconst blockLength = 16;\nconst ivLength = blockLength;\nconst tagLength = blockLength;\n\nconst zero = new Uint8Array(blockLength);\nconst one = new Uint8Array(blockLength); one[blockLength - 1] = 1;\nconst two = new Uint8Array(blockLength); two[blockLength - 1] = 2;\n\nasync function OMAC(key) {\n const cmac = await CMAC(key);\n return function(t, message) {\n return cmac(util.concatUint8Array([t, message]));\n };\n}\n\nasync function CTR(key) {\n if (\n util.getWebCrypto() &&\n key.length !== 24 // WebCrypto (no 192 bit support) see: https://www.chromium.org/blink/webcrypto#TOC-AES-support\n ) {\n key = await webCrypto.importKey('raw', key, { name: 'AES-CTR', length: key.length * 8 }, false, ['encrypt']);\n return async function(pt, iv) {\n const ct = await webCrypto.encrypt({ name: 'AES-CTR', counter: iv, length: blockLength * 8 }, key, pt);\n return new Uint8Array(ct);\n };\n }\n if (util.getNodeCrypto()) { // Node crypto library\n return async function(pt, iv) {\n const en = new nodeCrypto.createCipheriv('aes-' + (key.length * 8) + '-ctr', key, iv);\n const ct = Buffer.concat([en.update(pt), en.final()]);\n return new Uint8Array(ct);\n };\n }\n // asm.js fallback\n return async function(pt, iv) {\n return AES_CTR.encrypt(pt, key, iv);\n };\n}\n\n\n/**\n * Class to en/decrypt using EAX mode.\n * @param {enums.symmetric} cipher - The symmetric cipher algorithm to use\n * @param {Uint8Array} key - The encryption key\n */\nasync function EAX(cipher, key) {\n if (cipher !== enums.symmetric.aes128 &&\n cipher !== enums.symmetric.aes192 &&\n cipher !== enums.symmetric.aes256) {\n throw new Error('EAX mode supports only AES cipher');\n }\n\n const [\n omac,\n ctr\n ] = await Promise.all([\n OMAC(key),\n CTR(key)\n ]);\n\n return {\n /**\n * Encrypt plaintext input.\n * @param {Uint8Array} plaintext - The cleartext input to be encrypted\n * @param {Uint8Array} nonce - The nonce (16 bytes)\n * @param {Uint8Array} adata - Associated data to sign\n * @returns {Promise} The ciphertext output.\n */\n encrypt: async function(plaintext, nonce, adata) {\n const [\n omacNonce,\n omacAdata\n ] = await Promise.all([\n omac(zero, nonce),\n omac(one, adata)\n ]);\n const ciphered = await ctr(plaintext, omacNonce);\n const omacCiphered = await omac(two, ciphered);\n const tag = omacCiphered; // Assumes that omac(*).length === tagLength.\n for (let i = 0; i < tagLength; i++) {\n tag[i] ^= omacAdata[i] ^ omacNonce[i];\n }\n return util.concatUint8Array([ciphered, tag]);\n },\n\n /**\n * Decrypt ciphertext input.\n * @param {Uint8Array} ciphertext - The ciphertext input to be decrypted\n * @param {Uint8Array} nonce - The nonce (16 bytes)\n * @param {Uint8Array} adata - Associated data to verify\n * @returns {Promise} The plaintext output.\n */\n decrypt: async function(ciphertext, nonce, adata) {\n if (ciphertext.length < tagLength) throw new Error('Invalid EAX ciphertext');\n const ciphered = ciphertext.subarray(0, -tagLength);\n const ctTag = ciphertext.subarray(-tagLength);\n const [\n omacNonce,\n omacAdata,\n omacCiphered\n ] = await Promise.all([\n omac(zero, nonce),\n omac(one, adata),\n omac(two, ciphered)\n ]);\n const tag = omacCiphered; // Assumes that omac(*).length === tagLength.\n for (let i = 0; i < tagLength; i++) {\n tag[i] ^= omacAdata[i] ^ omacNonce[i];\n }\n if (!util.equalsUint8Array(ctTag, tag)) throw new Error('Authentication tag mismatch');\n const plaintext = await ctr(ciphered, omacNonce);\n return plaintext;\n }\n };\n}\n\n\n/**\n * Get EAX nonce as defined by {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.1|RFC4880bis-04, section 5.16.1}.\n * @param {Uint8Array} iv - The initialization vector (16 bytes)\n * @param {Uint8Array} chunkIndex - The chunk index (8 bytes)\n */\nEAX.getNonce = function(iv, chunkIndex) {\n const nonce = iv.slice();\n for (let i = 0; i < chunkIndex.length; i++) {\n nonce[8 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nEAX.blockLength = blockLength;\nEAX.ivLength = ivLength;\nEAX.tagLength = tagLength;\n\nexport default EAX;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 ProtonTech AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module implements AES-OCB en/decryption.\n * @module crypto/mode/ocb\n * @private\n */\n\nimport * as ciphers from '../cipher';\nimport util from '../../util';\nimport enums from '../../enums';\n\nconst blockLength = 16;\nconst ivLength = 15;\n\n// https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.2:\n// While OCB [RFC7253] allows the authentication tag length to be of any\n// number up to 128 bits long, this document requires a fixed\n// authentication tag length of 128 bits (16 octets) for simplicity.\nconst tagLength = 16;\n\n\nfunction ntz(n) {\n let ntz = 0;\n for (let i = 1; (n & i) === 0; i <<= 1) {\n ntz++;\n }\n return ntz;\n}\n\nfunction xorMut(S, T) {\n for (let i = 0; i < S.length; i++) {\n S[i] ^= T[i];\n }\n return S;\n}\n\nfunction xor(S, T) {\n return xorMut(S.slice(), T);\n}\n\nconst zeroBlock = new Uint8Array(blockLength);\nconst one = new Uint8Array([1]);\n\n/**\n * Class to en/decrypt using OCB mode.\n * @param {enums.symmetric} cipher - The symmetric cipher algorithm to use\n * @param {Uint8Array} key - The encryption key\n */\nasync function OCB(cipher, key) {\n\n let maxNtz = 0;\n let encipher;\n let decipher;\n let mask;\n\n constructKeyVariables(cipher, key);\n\n function constructKeyVariables(cipher, key) {\n const cipherName = enums.read(enums.symmetric, cipher);\n const aes = new ciphers[cipherName](key);\n encipher = aes.encrypt.bind(aes);\n decipher = aes.decrypt.bind(aes);\n\n const mask_x = encipher(zeroBlock);\n const mask_$ = util.double(mask_x);\n mask = [];\n mask[0] = util.double(mask_$);\n\n\n mask.x = mask_x;\n mask.$ = mask_$;\n }\n\n function extendKeyVariables(text, adata) {\n const newMaxNtz = util.nbits(Math.max(text.length, adata.length) / blockLength | 0) - 1;\n for (let i = maxNtz + 1; i <= newMaxNtz; i++) {\n mask[i] = util.double(mask[i - 1]);\n }\n maxNtz = newMaxNtz;\n }\n\n function hash(adata) {\n if (!adata.length) {\n // Fast path\n return zeroBlock;\n }\n\n //\n // Consider A as a sequence of 128-bit blocks\n //\n const m = adata.length / blockLength | 0;\n\n const offset = new Uint8Array(blockLength);\n const sum = new Uint8Array(blockLength);\n for (let i = 0; i < m; i++) {\n xorMut(offset, mask[ntz(i + 1)]);\n xorMut(sum, encipher(xor(offset, adata)));\n adata = adata.subarray(blockLength);\n }\n\n //\n // Process any final partial block; compute final hash value\n //\n if (adata.length) {\n xorMut(offset, mask.x);\n\n const cipherInput = new Uint8Array(blockLength);\n cipherInput.set(adata, 0);\n cipherInput[adata.length] = 0b10000000;\n xorMut(cipherInput, offset);\n\n xorMut(sum, encipher(cipherInput));\n }\n\n return sum;\n }\n\n /**\n * Encrypt/decrypt data.\n * @param {encipher|decipher} fn - Encryption/decryption block cipher function\n * @param {Uint8Array} text - The cleartext or ciphertext (without tag) input\n * @param {Uint8Array} nonce - The nonce (15 bytes)\n * @param {Uint8Array} adata - Associated data to sign\n * @returns {Promise} The ciphertext or plaintext output, with tag appended in both cases.\n */\n function crypt(fn, text, nonce, adata) {\n //\n // Consider P as a sequence of 128-bit blocks\n //\n const m = text.length / blockLength | 0;\n\n //\n // Key-dependent variables\n //\n extendKeyVariables(text, adata);\n\n //\n // Nonce-dependent and per-encryption variables\n //\n // Nonce = num2str(TAGLEN mod 128,7) || zeros(120-bitlen(N)) || 1 || N\n // Note: We assume here that tagLength mod 16 == 0.\n const paddedNonce = util.concatUint8Array([zeroBlock.subarray(0, ivLength - nonce.length), one, nonce]);\n // bottom = str2num(Nonce[123..128])\n const bottom = paddedNonce[blockLength - 1] & 0b111111;\n // Ktop = ENCIPHER(K, Nonce[1..122] || zeros(6))\n paddedNonce[blockLength - 1] &= 0b11000000;\n const kTop = encipher(paddedNonce);\n // Stretch = Ktop || (Ktop[1..64] xor Ktop[9..72])\n const stretched = util.concatUint8Array([kTop, xor(kTop.subarray(0, 8), kTop.subarray(1, 9))]);\n // Offset_0 = Stretch[1+bottom..128+bottom]\n const offset = util.shiftRight(stretched.subarray(0 + (bottom >> 3), 17 + (bottom >> 3)), 8 - (bottom & 7)).subarray(1);\n // Checksum_0 = zeros(128)\n const checksum = new Uint8Array(blockLength);\n\n const ct = new Uint8Array(text.length + tagLength);\n\n //\n // Process any whole blocks\n //\n let i;\n let pos = 0;\n for (i = 0; i < m; i++) {\n // Offset_i = Offset_{i-1} xor L_{ntz(i)}\n xorMut(offset, mask[ntz(i + 1)]);\n // C_i = Offset_i xor ENCIPHER(K, P_i xor Offset_i)\n // P_i = Offset_i xor DECIPHER(K, C_i xor Offset_i)\n ct.set(xorMut(fn(xor(offset, text)), offset), pos);\n // Checksum_i = Checksum_{i-1} xor P_i\n xorMut(checksum, fn === encipher ? text : ct.subarray(pos));\n\n text = text.subarray(blockLength);\n pos += blockLength;\n }\n\n //\n // Process any final partial block and compute raw tag\n //\n if (text.length) {\n // Offset_* = Offset_m xor L_*\n xorMut(offset, mask.x);\n // Pad = ENCIPHER(K, Offset_*)\n const padding = encipher(offset);\n // C_* = P_* xor Pad[1..bitlen(P_*)]\n ct.set(xor(text, padding), pos);\n\n // Checksum_* = Checksum_m xor (P_* || 1 || new Uint8Array(127-bitlen(P_*)))\n const xorInput = new Uint8Array(blockLength);\n xorInput.set(fn === encipher ? text : ct.subarray(pos, -tagLength), 0);\n xorInput[text.length] = 0b10000000;\n xorMut(checksum, xorInput);\n pos += text.length;\n }\n // Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A)\n const tag = xorMut(encipher(xorMut(xorMut(checksum, offset), mask.$)), hash(adata));\n\n //\n // Assemble ciphertext\n //\n // C = C_1 || C_2 || ... || C_m || C_* || Tag[1..TAGLEN]\n ct.set(tag, pos);\n return ct;\n }\n\n\n return {\n /**\n * Encrypt plaintext input.\n * @param {Uint8Array} plaintext - The cleartext input to be encrypted\n * @param {Uint8Array} nonce - The nonce (15 bytes)\n * @param {Uint8Array} adata - Associated data to sign\n * @returns {Promise} The ciphertext output.\n */\n encrypt: async function(plaintext, nonce, adata) {\n return crypt(encipher, plaintext, nonce, adata);\n },\n\n /**\n * Decrypt ciphertext input.\n * @param {Uint8Array} ciphertext - The ciphertext input to be decrypted\n * @param {Uint8Array} nonce - The nonce (15 bytes)\n * @param {Uint8Array} adata - Associated data to sign\n * @returns {Promise} The ciphertext output.\n */\n decrypt: async function(ciphertext, nonce, adata) {\n if (ciphertext.length < tagLength) throw new Error('Invalid OCB ciphertext');\n\n const tag = ciphertext.subarray(-tagLength);\n ciphertext = ciphertext.subarray(0, -tagLength);\n\n const crypted = crypt(decipher, ciphertext, nonce, adata);\n // if (Tag[1..TAGLEN] == T)\n if (util.equalsUint8Array(tag, crypted.subarray(-tagLength))) {\n return crypted.subarray(0, -tagLength);\n }\n throw new Error('Authentication tag mismatch');\n }\n };\n}\n\n\n/**\n * Get OCB nonce as defined by {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.16.2|RFC4880bis-04, section 5.16.2}.\n * @param {Uint8Array} iv - The initialization vector (15 bytes)\n * @param {Uint8Array} chunkIndex - The chunk index (8 bytes)\n */\nOCB.getNonce = function(iv, chunkIndex) {\n const nonce = iv.slice();\n for (let i = 0; i < chunkIndex.length; i++) {\n nonce[7 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nOCB.blockLength = blockLength;\nOCB.ivLength = ivLength;\nOCB.tagLength = tagLength;\n\nexport default OCB;\n","import { IllegalArgumentError, IllegalStateError, SecurityError } from '../other/errors';\nimport { _heap_write } from '../other/utils';\nimport { AES } from './aes';\nimport { AES_asm } from './aes.asm';\nconst _AES_GCM_data_maxLength = 68719476704; // 2^36 - 2^5\nexport class AES_GCM {\n constructor(key, nonce, adata, tagSize = 16, aes) {\n this.tagSize = tagSize;\n this.gamma0 = 0;\n this.counter = 1;\n this.aes = aes ? aes : new AES(key, undefined, false, 'CTR');\n let { asm, heap } = this.aes.acquire_asm();\n // Init GCM\n asm.gcm_init();\n // Tag size\n if (this.tagSize < 4 || this.tagSize > 16)\n throw new IllegalArgumentError('illegal tagSize value');\n // Nonce\n const noncelen = nonce.length || 0;\n const noncebuf = new Uint8Array(16);\n if (noncelen !== 12) {\n this._gcm_mac_process(nonce);\n heap[0] = 0;\n heap[1] = 0;\n heap[2] = 0;\n heap[3] = 0;\n heap[4] = 0;\n heap[5] = 0;\n heap[6] = 0;\n heap[7] = 0;\n heap[8] = 0;\n heap[9] = 0;\n heap[10] = 0;\n heap[11] = noncelen >>> 29;\n heap[12] = (noncelen >>> 21) & 255;\n heap[13] = (noncelen >>> 13) & 255;\n heap[14] = (noncelen >>> 5) & 255;\n heap[15] = (noncelen << 3) & 255;\n asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA, 16);\n asm.get_iv(AES_asm.HEAP_DATA);\n asm.set_iv(0, 0, 0, 0);\n noncebuf.set(heap.subarray(0, 16));\n }\n else {\n noncebuf.set(nonce);\n noncebuf[15] = 1;\n }\n const nonceview = new DataView(noncebuf.buffer);\n this.gamma0 = nonceview.getUint32(12);\n asm.set_nonce(nonceview.getUint32(0), nonceview.getUint32(4), nonceview.getUint32(8), 0);\n asm.set_mask(0, 0, 0, 0xffffffff);\n // Associated data\n if (adata !== undefined) {\n if (adata.length > _AES_GCM_data_maxLength)\n throw new IllegalArgumentError('illegal adata length');\n if (adata.length) {\n this.adata = adata;\n this._gcm_mac_process(adata);\n }\n else {\n this.adata = undefined;\n }\n }\n else {\n this.adata = undefined;\n }\n // Counter\n if (this.counter < 1 || this.counter > 0xffffffff)\n throw new RangeError('counter must be a positive 32-bit integer');\n asm.set_counter(0, 0, 0, (this.gamma0 + this.counter) | 0);\n }\n static encrypt(cleartext, key, nonce, adata, tagsize) {\n return new AES_GCM(key, nonce, adata, tagsize).encrypt(cleartext);\n }\n static decrypt(ciphertext, key, nonce, adata, tagsize) {\n return new AES_GCM(key, nonce, adata, tagsize).decrypt(ciphertext);\n }\n encrypt(data) {\n return this.AES_GCM_encrypt(data);\n }\n decrypt(data) {\n return this.AES_GCM_decrypt(data);\n }\n AES_GCM_Encrypt_process(data) {\n let dpos = 0;\n let dlen = data.length || 0;\n let { asm, heap } = this.aes.acquire_asm();\n let counter = this.counter;\n let pos = this.aes.pos;\n let len = this.aes.len;\n let rpos = 0;\n let rlen = (len + dlen) & -16;\n let wlen = 0;\n if (((counter - 1) << 4) + len + dlen > _AES_GCM_data_maxLength)\n throw new RangeError('counter overflow');\n const result = new Uint8Array(rlen);\n while (dlen > 0) {\n wlen = _heap_write(heap, pos + len, data, dpos, dlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n wlen = asm.cipher(AES_asm.ENC.CTR, AES_asm.HEAP_DATA + pos, len);\n wlen = asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA + pos, wlen);\n if (wlen)\n result.set(heap.subarray(pos, pos + wlen), rpos);\n counter += wlen >>> 4;\n rpos += wlen;\n if (wlen < len) {\n pos += wlen;\n len -= wlen;\n }\n else {\n pos = 0;\n len = 0;\n }\n }\n this.counter = counter;\n this.aes.pos = pos;\n this.aes.len = len;\n return result;\n }\n AES_GCM_Encrypt_finish() {\n let { asm, heap } = this.aes.acquire_asm();\n let counter = this.counter;\n let tagSize = this.tagSize;\n let adata = this.adata;\n let pos = this.aes.pos;\n let len = this.aes.len;\n const result = new Uint8Array(len + tagSize);\n asm.cipher(AES_asm.ENC.CTR, AES_asm.HEAP_DATA + pos, (len + 15) & -16);\n if (len)\n result.set(heap.subarray(pos, pos + len));\n let i = len;\n for (; i & 15; i++)\n heap[pos + i] = 0;\n asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA + pos, i);\n const alen = adata !== undefined ? adata.length : 0;\n const clen = ((counter - 1) << 4) + len;\n heap[0] = 0;\n heap[1] = 0;\n heap[2] = 0;\n heap[3] = alen >>> 29;\n heap[4] = alen >>> 21;\n heap[5] = (alen >>> 13) & 255;\n heap[6] = (alen >>> 5) & 255;\n heap[7] = (alen << 3) & 255;\n heap[8] = heap[9] = heap[10] = 0;\n heap[11] = clen >>> 29;\n heap[12] = (clen >>> 21) & 255;\n heap[13] = (clen >>> 13) & 255;\n heap[14] = (clen >>> 5) & 255;\n heap[15] = (clen << 3) & 255;\n asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA, 16);\n asm.get_iv(AES_asm.HEAP_DATA);\n asm.set_counter(0, 0, 0, this.gamma0);\n asm.cipher(AES_asm.ENC.CTR, AES_asm.HEAP_DATA, 16);\n result.set(heap.subarray(0, tagSize), len);\n this.counter = 1;\n this.aes.pos = 0;\n this.aes.len = 0;\n return result;\n }\n AES_GCM_Decrypt_process(data) {\n let dpos = 0;\n let dlen = data.length || 0;\n let { asm, heap } = this.aes.acquire_asm();\n let counter = this.counter;\n let tagSize = this.tagSize;\n let pos = this.aes.pos;\n let len = this.aes.len;\n let rpos = 0;\n let rlen = len + dlen > tagSize ? (len + dlen - tagSize) & -16 : 0;\n let tlen = len + dlen - rlen;\n let wlen = 0;\n if (((counter - 1) << 4) + len + dlen > _AES_GCM_data_maxLength)\n throw new RangeError('counter overflow');\n const result = new Uint8Array(rlen);\n while (dlen > tlen) {\n wlen = _heap_write(heap, pos + len, data, dpos, dlen - tlen);\n len += wlen;\n dpos += wlen;\n dlen -= wlen;\n wlen = asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA + pos, wlen);\n wlen = asm.cipher(AES_asm.DEC.CTR, AES_asm.HEAP_DATA + pos, wlen);\n if (wlen)\n result.set(heap.subarray(pos, pos + wlen), rpos);\n counter += wlen >>> 4;\n rpos += wlen;\n pos = 0;\n len = 0;\n }\n if (dlen > 0) {\n len += _heap_write(heap, 0, data, dpos, dlen);\n }\n this.counter = counter;\n this.aes.pos = pos;\n this.aes.len = len;\n return result;\n }\n AES_GCM_Decrypt_finish() {\n let { asm, heap } = this.aes.acquire_asm();\n let tagSize = this.tagSize;\n let adata = this.adata;\n let counter = this.counter;\n let pos = this.aes.pos;\n let len = this.aes.len;\n let rlen = len - tagSize;\n if (len < tagSize)\n throw new IllegalStateError('authentication tag not found');\n const result = new Uint8Array(rlen);\n const atag = new Uint8Array(heap.subarray(pos + rlen, pos + len));\n let i = rlen;\n for (; i & 15; i++)\n heap[pos + i] = 0;\n asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA + pos, i);\n asm.cipher(AES_asm.DEC.CTR, AES_asm.HEAP_DATA + pos, i);\n if (rlen)\n result.set(heap.subarray(pos, pos + rlen));\n const alen = adata !== undefined ? adata.length : 0;\n const clen = ((counter - 1) << 4) + len - tagSize;\n heap[0] = 0;\n heap[1] = 0;\n heap[2] = 0;\n heap[3] = alen >>> 29;\n heap[4] = alen >>> 21;\n heap[5] = (alen >>> 13) & 255;\n heap[6] = (alen >>> 5) & 255;\n heap[7] = (alen << 3) & 255;\n heap[8] = heap[9] = heap[10] = 0;\n heap[11] = clen >>> 29;\n heap[12] = (clen >>> 21) & 255;\n heap[13] = (clen >>> 13) & 255;\n heap[14] = (clen >>> 5) & 255;\n heap[15] = (clen << 3) & 255;\n asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA, 16);\n asm.get_iv(AES_asm.HEAP_DATA);\n asm.set_counter(0, 0, 0, this.gamma0);\n asm.cipher(AES_asm.ENC.CTR, AES_asm.HEAP_DATA, 16);\n let acheck = 0;\n for (let i = 0; i < tagSize; ++i)\n acheck |= atag[i] ^ heap[i];\n if (acheck)\n throw new SecurityError('data integrity check failed');\n this.counter = 1;\n this.aes.pos = 0;\n this.aes.len = 0;\n return result;\n }\n AES_GCM_decrypt(data) {\n const result1 = this.AES_GCM_Decrypt_process(data);\n const result2 = this.AES_GCM_Decrypt_finish();\n const result = new Uint8Array(result1.length + result2.length);\n if (result1.length)\n result.set(result1);\n if (result2.length)\n result.set(result2, result1.length);\n return result;\n }\n AES_GCM_encrypt(data) {\n const result1 = this.AES_GCM_Encrypt_process(data);\n const result2 = this.AES_GCM_Encrypt_finish();\n const result = new Uint8Array(result1.length + result2.length);\n if (result1.length)\n result.set(result1);\n if (result2.length)\n result.set(result2, result1.length);\n return result;\n }\n _gcm_mac_process(data) {\n let { asm, heap } = this.aes.acquire_asm();\n let dpos = 0;\n let dlen = data.length || 0;\n let wlen = 0;\n while (dlen > 0) {\n wlen = _heap_write(heap, 0, data, dpos, dlen);\n dpos += wlen;\n dlen -= wlen;\n while (wlen & 15)\n heap[wlen++] = 0;\n asm.mac(AES_asm.MAC.GCM, AES_asm.HEAP_DATA, wlen);\n }\n }\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview This module wraps native AES-GCM en/decryption for both\n * the WebCrypto api as well as node.js' crypto api.\n * @module crypto/mode/gcm\n * @private\n */\n\nimport { AES_GCM } from '@openpgp/asmcrypto.js/dist_es8/aes/gcm';\nimport util from '../../util';\nimport enums from '../../enums';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\nconst Buffer = util.getNodeBuffer();\n\nconst blockLength = 16;\nconst ivLength = 12; // size of the IV in bytes\nconst tagLength = 16; // size of the tag in bytes\nconst ALGO = 'AES-GCM';\n\n/**\n * Class to en/decrypt using GCM mode.\n * @param {enums.symmetric} cipher - The symmetric cipher algorithm to use\n * @param {Uint8Array} key - The encryption key\n */\nasync function GCM(cipher, key) {\n if (cipher !== enums.symmetric.aes128 &&\n cipher !== enums.symmetric.aes192 &&\n cipher !== enums.symmetric.aes256) {\n throw new Error('GCM mode supports only AES cipher');\n }\n\n if (util.getNodeCrypto()) { // Node crypto library\n return {\n encrypt: async function(pt, iv, adata = new Uint8Array()) {\n const en = new nodeCrypto.createCipheriv('aes-' + (key.length * 8) + '-gcm', key, iv);\n en.setAAD(adata);\n const ct = Buffer.concat([en.update(pt), en.final(), en.getAuthTag()]); // append auth tag to ciphertext\n return new Uint8Array(ct);\n },\n\n decrypt: async function(ct, iv, adata = new Uint8Array()) {\n const de = new nodeCrypto.createDecipheriv('aes-' + (key.length * 8) + '-gcm', key, iv);\n de.setAAD(adata);\n de.setAuthTag(ct.slice(ct.length - tagLength, ct.length)); // read auth tag at end of ciphertext\n const pt = Buffer.concat([de.update(ct.slice(0, ct.length - tagLength)), de.final()]);\n return new Uint8Array(pt);\n }\n };\n }\n\n if (util.getWebCrypto() && key.length !== 24) { // WebCrypto (no 192 bit support) see: https://www.chromium.org/blink/webcrypto#TOC-AES-support\n const _key = await webCrypto.importKey('raw', key, { name: ALGO }, false, ['encrypt', 'decrypt']);\n\n return {\n encrypt: async function(pt, iv, adata = new Uint8Array()) {\n if (!pt.length) { // iOS does not support GCM-en/decrypting empty messages\n return AES_GCM.encrypt(pt, key, iv, adata);\n }\n const ct = await webCrypto.encrypt({ name: ALGO, iv, additionalData: adata, tagLength: tagLength * 8 }, _key, pt);\n return new Uint8Array(ct);\n },\n\n decrypt: async function(ct, iv, adata = new Uint8Array()) {\n if (ct.length === tagLength) { // iOS does not support GCM-en/decrypting empty messages\n return AES_GCM.decrypt(ct, key, iv, adata);\n }\n const pt = await webCrypto.decrypt({ name: ALGO, iv, additionalData: adata, tagLength: tagLength * 8 }, _key, ct);\n return new Uint8Array(pt);\n }\n };\n }\n\n return {\n encrypt: async function(pt, iv, adata) {\n return AES_GCM.encrypt(pt, key, iv, adata);\n },\n\n decrypt: async function(ct, iv, adata) {\n return AES_GCM.decrypt(ct, key, iv, adata);\n }\n };\n}\n\n\n/**\n * Get GCM nonce. Note: this operation is not defined by the standard.\n * A future version of the standard may define GCM mode differently,\n * hopefully under a different ID (we use Private/Experimental algorithm\n * ID 100) so that we can maintain backwards compatibility.\n * @param {Uint8Array} iv - The initialization vector (12 bytes)\n * @param {Uint8Array} chunkIndex - The chunk index (8 bytes)\n */\nGCM.getNonce = function(iv, chunkIndex) {\n const nonce = iv.slice();\n for (let i = 0; i < chunkIndex.length; i++) {\n nonce[4 + i] ^= chunkIndex[i];\n }\n return nonce;\n};\n\nGCM.blockLength = blockLength;\nGCM.ivLength = ivLength;\nGCM.tagLength = tagLength;\n\nexport default GCM;\n","/**\n * @fileoverview Cipher modes\n * @module crypto/mode\n * @private\n */\n\nimport * as cfb from './cfb';\nimport eax from './eax';\nimport ocb from './ocb';\nimport gcm from './gcm';\n\nexport default {\n /** @see module:crypto/mode/cfb */\n cfb: cfb,\n /** @see module:crypto/mode/gcm */\n gcm: gcm,\n experimentalGCM: gcm,\n /** @see module:crypto/mode/eax */\n eax: eax,\n /** @see module:crypto/mode/ocb */\n ocb: ocb\n};\n","/*jshint bitwise: false*/\n\n(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d;\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n d = nacl.hash(sk.subarray(0, 32));\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d, h, r;\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n d = nacl.hash(sk.subarray(0, 32));\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n r = nacl.hash(sm.subarray(32, smlen));\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n h = nacl.hash(sm.subarray(0, smlen));\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h;\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n h = nacl.hash(m.subarray(0, n));\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32;\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.box = {};\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// The GPG4Browsers crypto interface\n\n/**\n * @fileoverview Provides tools for retrieving secure randomness from browsers or Node.js\n * @module crypto/random\n * @private\n */\nimport util from '../util';\n\nconst nodeCrypto = util.getNodeCrypto();\n\n/**\n * Retrieve secure random byte array of the specified length\n * @param {Integer} length - Length in bytes to generate\n * @returns {Uint8Array} Random byte array.\n */\nexport function getRandomBytes(length) {\n const buf = new Uint8Array(length);\n if (nodeCrypto) {\n const bytes = nodeCrypto.randomBytes(buf.length);\n buf.set(bytes);\n } else if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(buf);\n } else {\n throw new Error('No secure random number generator available.');\n }\n return buf;\n}\n\n/**\n * Create a secure random BigInteger that is greater than or equal to min and less than max.\n * @param {module:BigInteger} min - Lower bound, included\n * @param {module:BigInteger} max - Upper bound, excluded\n * @returns {Promise} Random BigInteger.\n * @async\n */\nexport async function getRandomBigInteger(min, max) {\n const BigInteger = await util.getBigInteger();\n\n if (max.lt(min)) {\n throw new Error('Illegal parameter value: max <= min');\n }\n\n const modulus = max.sub(min);\n const bytes = modulus.byteLength();\n\n // Using a while loop is necessary to avoid bias introduced by the mod operation.\n // However, we request 64 extra random bits so that the bias is negligible.\n // Section B.1.1 here: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf\n const r = new BigInteger(await getRandomBytes(bytes + 8));\n return r.mod(modulus).add(min);\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Algorithms for probabilistic random prime generation\n * @module crypto/public_key/prime\n * @private\n */\n\nimport util from '../../util';\nimport { getRandomBigInteger } from '../random';\n\n/**\n * Generate a probably prime random number\n * @param {Integer} bits - Bit length of the prime\n * @param {BigInteger} e - Optional RSA exponent to check against the prime\n * @param {Integer} k - Optional number of iterations of Miller-Rabin test\n * @returns BigInteger\n * @async\n */\nexport async function randomProbablePrime(bits, e, k) {\n const BigInteger = await util.getBigInteger();\n const one = new BigInteger(1);\n const min = one.leftShift(new BigInteger(bits - 1));\n const thirty = new BigInteger(30);\n /*\n * We can avoid any multiples of 3 and 5 by looking at n mod 30\n * n mod 30 = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29\n * the next possible prime is mod 30:\n * 1 7 7 7 7 7 7 11 11 11 11 13 13 17 17 17 17 19 19 23 23 23 23 29 29 29 29 29 29 1\n */\n const adds = [1, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 2, 1, 4, 3, 2, 1, 2, 1, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 2];\n\n const n = await getRandomBigInteger(min, min.leftShift(one));\n let i = n.mod(thirty).toNumber();\n\n do {\n n.iadd(new BigInteger(adds[i]));\n i = (i + adds[i]) % adds.length;\n // If reached the maximum, go back to the minimum.\n if (n.bitLength() > bits) {\n n.imod(min.leftShift(one)).iadd(min);\n i = n.mod(thirty).toNumber();\n }\n } while (!await isProbablePrime(n, e, k));\n return n;\n}\n\n/**\n * Probabilistic primality testing\n * @param {BigInteger} n - Number to test\n * @param {BigInteger} e - Optional RSA exponent to check against the prime\n * @param {Integer} k - Optional number of iterations of Miller-Rabin test\n * @returns {boolean}\n * @async\n */\nexport async function isProbablePrime(n, e, k) {\n if (e && !n.dec().gcd(e).isOne()) {\n return false;\n }\n if (!await divisionTest(n)) {\n return false;\n }\n if (!await fermat(n)) {\n return false;\n }\n if (!await millerRabin(n, k)) {\n return false;\n }\n // TODO implement the Lucas test\n // See Section C.3.3 here: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf\n return true;\n}\n\n/**\n * Tests whether n is probably prime or not using Fermat's test with b = 2.\n * Fails if b^(n-1) mod n != 1.\n * @param {BigInteger} n - Number to test\n * @param {BigInteger} b - Optional Fermat test base\n * @returns {boolean}\n */\nexport async function fermat(n, b) {\n const BigInteger = await util.getBigInteger();\n b = b || new BigInteger(2);\n return b.modExp(n.dec(), n).isOne();\n}\n\nexport async function divisionTest(n) {\n const BigInteger = await util.getBigInteger();\n return smallPrimes.every(m => {\n return n.mod(new BigInteger(m)) !== 0;\n });\n}\n\n// https://github.com/gpg/libgcrypt/blob/master/cipher/primegen.c\nconst smallPrimes = [\n 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,\n 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,\n 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,\n 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,\n 211, 223, 227, 229, 233, 239, 241, 251, 257, 263,\n 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,\n 331, 337, 347, 349, 353, 359, 367, 373, 379, 383,\n 389, 397, 401, 409, 419, 421, 431, 433, 439, 443,\n 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,\n 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,\n 587, 593, 599, 601, 607, 613, 617, 619, 631, 641,\n 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,\n 709, 719, 727, 733, 739, 743, 751, 757, 761, 769,\n 773, 787, 797, 809, 811, 821, 823, 827, 829, 839,\n 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,\n 919, 929, 937, 941, 947, 953, 967, 971, 977, 983,\n 991, 997, 1009, 1013, 1019, 1021, 1031, 1033,\n 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091,\n 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151,\n 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213,\n 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277,\n 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307,\n 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399,\n 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,\n 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493,\n 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559,\n 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609,\n 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667,\n 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733,\n 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789,\n 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871,\n 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931,\n 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997,\n 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053,\n 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111,\n 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161,\n 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243,\n 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297,\n 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357,\n 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411,\n 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473,\n 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551,\n 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633,\n 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687,\n 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729,\n 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791,\n 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851,\n 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917,\n 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,\n 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061,\n 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137,\n 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209,\n 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271,\n 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331,\n 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391,\n 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467,\n 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533,\n 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583,\n 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643,\n 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709,\n 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779,\n 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851,\n 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917,\n 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989,\n 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049,\n 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111,\n 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177,\n 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243,\n 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297,\n 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391,\n 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457,\n 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519,\n 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597,\n 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657,\n 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729,\n 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799,\n 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889,\n 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951,\n 4957, 4967, 4969, 4973, 4987, 4993, 4999\n];\n\n\n// Miller-Rabin - Miller Rabin algorithm for primality test\n// Copyright Fedor Indutny, 2014.\n//\n// This software is licensed under the MIT License.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// Adapted on Jan 2018 from version 4.0.1 at https://github.com/indutny/miller-rabin\n\n// Sample syntax for Fixed-Base Miller-Rabin:\n// millerRabin(n, k, () => new BN(small_primes[Math.random() * small_primes.length | 0]))\n\n/**\n * Tests whether n is probably prime or not using the Miller-Rabin test.\n * See HAC Remark 4.28.\n * @param {BigInteger} n - Number to test\n * @param {Integer} k - Optional number of iterations of Miller-Rabin test\n * @param {Function} rand - Optional function to generate potential witnesses\n * @returns {boolean}\n * @async\n */\nexport async function millerRabin(n, k, rand) {\n const BigInteger = await util.getBigInteger();\n const len = n.bitLength();\n\n if (!k) {\n k = Math.max(1, (len / 48) | 0);\n }\n\n const n1 = n.dec(); // n - 1\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n let s = 0;\n while (!n1.getBit(s)) { s++; }\n const d = n.rightShift(new BigInteger(s));\n\n for (; k > 0; k--) {\n const a = rand ? rand() : await getRandomBigInteger(new BigInteger(2), n1);\n\n let x = a.modExp(d, n);\n if (x.isOne() || x.equal(n1)) {\n continue;\n }\n\n let i;\n for (i = 1; i < s; i++) {\n x = x.mul(x).mod(n);\n\n if (x.isOne()) {\n return false;\n }\n if (x.equal(n1)) {\n break;\n }\n }\n\n if (i === s) {\n return false;\n }\n }\n\n return true;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Provides EME-PKCS1-v1_5 encoding and decoding and EMSA-PKCS1-v1_5 encoding function\n * @see module:crypto/public_key/rsa\n * @see module:crypto/public_key/elliptic/ecdh\n * @see PublicKeyEncryptedSessionKeyPacket\n * @module crypto/pkcs1\n * @private\n */\n\nimport { getRandomBytes } from './random';\nimport hash from './hash';\nimport util from '../util';\n\n/**\n * ASN1 object identifiers for hashes\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.2}\n */\nconst hash_headers = [];\nhash_headers[1] = [0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04,\n 0x10];\nhash_headers[2] = [0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14];\nhash_headers[3] = [0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14];\nhash_headers[8] = [0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00,\n 0x04, 0x20];\nhash_headers[9] = [0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00,\n 0x04, 0x30];\nhash_headers[10] = [0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05,\n 0x00, 0x04, 0x40];\nhash_headers[11] = [0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05,\n 0x00, 0x04, 0x1C];\n\n/**\n * Create padding with secure random data\n * @private\n * @param {Integer} length - Length of the padding in bytes\n * @returns {Uint8Array} Random padding.\n */\nfunction getPKCS1Padding(length) {\n const result = new Uint8Array(length);\n let count = 0;\n while (count < length) {\n const randomBytes = getRandomBytes(length - count);\n for (let i = 0; i < randomBytes.length; i++) {\n if (randomBytes[i] !== 0) {\n result[count++] = randomBytes[i];\n }\n }\n }\n return result;\n}\n\n/**\n * Create a EME-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.1|RFC 4880 13.1.1}\n * @param {Uint8Array} message - Message to be encoded\n * @param {Integer} keyLength - The length in octets of the key modulus\n * @returns {Uint8Array} EME-PKCS1 padded message.\n */\nexport function emeEncode(message, keyLength) {\n const mLength = message.length;\n // length checking\n if (mLength > keyLength - 11) {\n throw new Error('Message too long');\n }\n // Generate an octet string PS of length k - mLen - 3 consisting of\n // pseudo-randomly generated nonzero octets\n const PS = getPKCS1Padding(keyLength - mLength - 3);\n // Concatenate PS, the message M, and other padding to form an\n // encoded message EM of length k octets as EM = 0x00 || 0x02 || PS || 0x00 || M.\n const encoded = new Uint8Array(keyLength);\n // 0x00 byte\n encoded[1] = 2;\n encoded.set(PS, 2);\n // 0x00 bytes\n encoded.set(message, keyLength - mLength);\n return encoded;\n}\n\n/**\n * Decode a EME-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.2|RFC 4880 13.1.2}\n * @param {Uint8Array} encoded - Encoded message bytes\n * @param {Uint8Array} randomPayload - Data to return in case of decoding error (needed for constant-time processing)\n * @returns {Uint8Array} decoded data or `randomPayload` (on error, if given)\n * @throws {Error} on decoding failure, unless `randomPayload` is provided\n */\nexport function emeDecode(encoded, randomPayload) {\n // encoded format: 0x00 0x02 0x00 \n let offset = 2;\n let separatorNotFound = 1;\n for (let j = offset; j < encoded.length; j++) {\n separatorNotFound &= encoded[j] !== 0;\n offset += separatorNotFound;\n }\n\n const psLen = offset - 2;\n const payload = encoded.subarray(offset + 1); // discard the 0x00 separator\n const isValidPadding = encoded[0] === 0 & encoded[1] === 2 & psLen >= 8 & !separatorNotFound;\n\n if (randomPayload) {\n return util.selectUint8Array(isValidPadding, payload, randomPayload);\n }\n\n if (isValidPadding) {\n return payload;\n }\n\n throw new Error('Decryption error');\n}\n\n/**\n * Create a EMSA-PKCS1-v1_5 padded message\n * @see {@link https://tools.ietf.org/html/rfc4880#section-13.1.3|RFC 4880 13.1.3}\n * @param {Integer} algo - Hash algorithm type used\n * @param {Uint8Array} hashed - Message to be encoded\n * @param {Integer} emLen - Intended length in octets of the encoded message\n * @returns {Uint8Array} Encoded message.\n */\nexport async function emsaEncode(algo, hashed, emLen) {\n let i;\n if (hashed.length !== hash.getHashByteLength(algo)) {\n throw new Error('Invalid hash length');\n }\n // produce an ASN.1 DER value for the hash function used.\n // Let T be the full hash prefix\n const hashPrefix = new Uint8Array(hash_headers[algo].length);\n for (i = 0; i < hash_headers[algo].length; i++) {\n hashPrefix[i] = hash_headers[algo][i];\n }\n // and let tLen be the length in octets prefix and hashed data\n const tLen = hashPrefix.length + hashed.length;\n if (emLen < tLen + 11) {\n throw new Error('Intended encoded message length too short');\n }\n // an octet string PS consisting of emLen - tLen - 3 octets with hexadecimal value 0xFF\n // The length of PS will be at least 8 octets\n const PS = new Uint8Array(emLen - tLen - 3).fill(0xff);\n\n // Concatenate PS, the hash prefix, hashed data, and other padding to form the\n // encoded message EM as EM = 0x00 || 0x01 || PS || 0x00 || prefix || hashed\n const EM = new Uint8Array(emLen);\n EM[1] = 0x01;\n EM.set(PS, 2);\n EM.set(hashPrefix, emLen - tLen);\n EM.set(hashed, emLen - hashed.length);\n return EM;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview RSA implementation\n * @module crypto/public_key/rsa\n * @private\n */\n\nimport { randomProbablePrime } from './prime';\nimport { getRandomBigInteger } from '../random';\nimport util from '../../util';\nimport { uint8ArrayToB64, b64ToUint8Array } from '../../encoding/base64';\nimport { emsaEncode, emeEncode, emeDecode } from '../pkcs1';\nimport enums from '../../enums';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\nconst asn1 = nodeCrypto ? require('asn1.js') : undefined;\n\n/* eslint-disable no-invalid-this */\nconst RSAPrivateKey = nodeCrypto ? asn1.define('RSAPrivateKey', function () {\n this.seq().obj( // used for native NodeJS crypto\n this.key('version').int(), // 0\n this.key('modulus').int(), // n\n this.key('publicExponent').int(), // e\n this.key('privateExponent').int(), // d\n this.key('prime1').int(), // p\n this.key('prime2').int(), // q\n this.key('exponent1').int(), // dp\n this.key('exponent2').int(), // dq\n this.key('coefficient').int() // u\n );\n}) : undefined;\n\nconst RSAPublicKey = nodeCrypto ? asn1.define('RSAPubliceKey', function () {\n this.seq().obj( // used for native NodeJS crypto\n this.key('modulus').int(), // n\n this.key('publicExponent').int() // e\n );\n}) : undefined;\n/* eslint-enable no-invalid-this */\n\n/** Create signature\n * @param {module:enums.hash} hashAlgo - Hash algorithm\n * @param {Uint8Array} data - Message\n * @param {Uint8Array} n - RSA public modulus\n * @param {Uint8Array} e - RSA public exponent\n * @param {Uint8Array} d - RSA private exponent\n * @param {Uint8Array} p - RSA private prime p\n * @param {Uint8Array} q - RSA private prime q\n * @param {Uint8Array} u - RSA private coefficient\n * @param {Uint8Array} hashed - Hashed message\n * @returns {Promise} RSA Signature.\n * @async\n */\nexport async function sign(hashAlgo, data, n, e, d, p, q, u, hashed) {\n if (data && !util.isStream(data)) {\n if (util.getWebCrypto()) {\n try {\n return await webSign(enums.read(enums.webHash, hashAlgo), data, n, e, d, p, q, u);\n } catch (err) {\n util.printDebugError(err);\n }\n } else if (util.getNodeCrypto()) {\n return nodeSign(hashAlgo, data, n, e, d, p, q, u);\n }\n }\n return bnSign(hashAlgo, n, d, hashed);\n}\n\n/**\n * Verify signature\n * @param {module:enums.hash} hashAlgo - Hash algorithm\n * @param {Uint8Array} data - Message\n * @param {Uint8Array} s - Signature\n * @param {Uint8Array} n - RSA public modulus\n * @param {Uint8Array} e - RSA public exponent\n * @param {Uint8Array} hashed - Hashed message\n * @returns {Boolean}\n * @async\n */\nexport async function verify(hashAlgo, data, s, n, e, hashed) {\n if (data && !util.isStream(data)) {\n if (util.getWebCrypto()) {\n try {\n return await webVerify(enums.read(enums.webHash, hashAlgo), data, s, n, e);\n } catch (err) {\n util.printDebugError(err);\n }\n } else if (util.getNodeCrypto()) {\n return nodeVerify(hashAlgo, data, s, n, e);\n }\n }\n return bnVerify(hashAlgo, s, n, e, hashed);\n}\n\n/**\n * Encrypt message\n * @param {Uint8Array} data - Message\n * @param {Uint8Array} n - RSA public modulus\n * @param {Uint8Array} e - RSA public exponent\n * @returns {Promise} RSA Ciphertext.\n * @async\n */\nexport async function encrypt(data, n, e) {\n if (util.getNodeCrypto()) {\n return nodeEncrypt(data, n, e);\n }\n return bnEncrypt(data, n, e);\n}\n\n/**\n * Decrypt RSA message\n * @param {Uint8Array} m - Message\n * @param {Uint8Array} n - RSA public modulus\n * @param {Uint8Array} e - RSA public exponent\n * @param {Uint8Array} d - RSA private exponent\n * @param {Uint8Array} p - RSA private prime p\n * @param {Uint8Array} q - RSA private prime q\n * @param {Uint8Array} u - RSA private coefficient\n * @param {Uint8Array} randomPayload - Data to return on decryption error, instead of throwing\n * (needed for constant-time processing)\n * @returns {Promise} RSA Plaintext.\n * @throws {Error} on decryption error, unless `randomPayload` is given\n * @async\n */\nexport async function decrypt(data, n, e, d, p, q, u, randomPayload) {\n if (util.getNodeCrypto()) {\n return nodeDecrypt(data, n, e, d, p, q, u, randomPayload);\n }\n return bnDecrypt(data, n, e, d, p, q, u, randomPayload);\n}\n\n/**\n * Generate a new random private key B bits long with public exponent E.\n *\n * When possible, webCrypto or nodeCrypto is used. Otherwise, primes are generated using\n * 40 rounds of the Miller-Rabin probabilistic random prime generation algorithm.\n * @see module:crypto/public_key/prime\n * @param {Integer} bits - RSA bit length\n * @param {Integer} e - RSA public exponent\n * @returns {{n, e, d,\n * p, q ,u: Uint8Array}} RSA public modulus, RSA public exponent, RSA private exponent,\n * RSA private prime p, RSA private prime q, u = p ** -1 mod q\n * @async\n */\nexport async function generate(bits, e) {\n const BigInteger = await util.getBigInteger();\n\n e = new BigInteger(e);\n\n // Native RSA keygen using Web Crypto\n if (util.getWebCrypto()) {\n const keyGenOpt = {\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits, // the specified keysize in bits\n publicExponent: e.toUint8Array(), // take three bytes (max 65537) for exponent\n hash: {\n name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify'\n }\n };\n const keyPair = await webCrypto.generateKey(keyGenOpt, true, ['sign', 'verify']);\n\n // export the generated keys as JsonWebKey (JWK)\n // https://tools.ietf.org/html/draft-ietf-jose-json-web-key-33\n const jwk = await webCrypto.exportKey('jwk', keyPair.privateKey);\n // map JWK parameters to corresponding OpenPGP names\n return {\n n: b64ToUint8Array(jwk.n),\n e: e.toUint8Array(),\n d: b64ToUint8Array(jwk.d),\n // switch p and q\n p: b64ToUint8Array(jwk.q),\n q: b64ToUint8Array(jwk.p),\n // Since p and q are switched in places, u is the inverse of jwk.q\n u: b64ToUint8Array(jwk.qi)\n };\n } else if (util.getNodeCrypto() && nodeCrypto.generateKeyPair && RSAPrivateKey) {\n const opts = {\n modulusLength: bits,\n publicExponent: e.toNumber(),\n publicKeyEncoding: { type: 'pkcs1', format: 'der' },\n privateKeyEncoding: { type: 'pkcs1', format: 'der' }\n };\n const prv = await new Promise((resolve, reject) => {\n nodeCrypto.generateKeyPair('rsa', opts, (err, _, der) => {\n if (err) {\n reject(err);\n } else {\n resolve(RSAPrivateKey.decode(der, 'der'));\n }\n });\n });\n /**\n * OpenPGP spec differs from DER spec, DER: `u = (inverse of q) mod p`, OpenPGP: `u = (inverse of p) mod q`.\n * @link https://tools.ietf.org/html/rfc3447#section-3.2\n * @link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-08#section-5.6.1\n */\n return {\n n: prv.modulus.toArrayLike(Uint8Array),\n e: prv.publicExponent.toArrayLike(Uint8Array),\n d: prv.privateExponent.toArrayLike(Uint8Array),\n // switch p and q\n p: prv.prime2.toArrayLike(Uint8Array),\n q: prv.prime1.toArrayLike(Uint8Array),\n // Since p and q are switched in places, we can keep u as defined by DER\n u: prv.coefficient.toArrayLike(Uint8Array)\n };\n }\n\n // RSA keygen fallback using 40 iterations of the Miller-Rabin test\n // See https://stackoverflow.com/a/6330138 for justification\n // Also see section C.3 here: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST\n let p;\n let q;\n let n;\n do {\n q = await randomProbablePrime(bits - (bits >> 1), e, 40);\n p = await randomProbablePrime(bits >> 1, e, 40);\n n = p.mul(q);\n } while (n.bitLength() !== bits);\n\n const phi = p.dec().imul(q.dec());\n\n if (q.lt(p)) {\n [p, q] = [q, p];\n }\n\n return {\n n: n.toUint8Array(),\n e: e.toUint8Array(),\n d: e.modInv(phi).toUint8Array(),\n p: p.toUint8Array(),\n q: q.toUint8Array(),\n // dp: d.mod(p.subn(1)),\n // dq: d.mod(q.subn(1)),\n u: p.modInv(q).toUint8Array()\n };\n}\n\n/**\n * Validate RSA parameters\n * @param {Uint8Array} n - RSA public modulus\n * @param {Uint8Array} e - RSA public exponent\n * @param {Uint8Array} d - RSA private exponent\n * @param {Uint8Array} p - RSA private prime p\n * @param {Uint8Array} q - RSA private prime q\n * @param {Uint8Array} u - RSA inverse of p w.r.t. q\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(n, e, d, p, q, u) {\n const BigInteger = await util.getBigInteger();\n n = new BigInteger(n);\n p = new BigInteger(p);\n q = new BigInteger(q);\n\n // expect pq = n\n if (!p.mul(q).equal(n)) {\n return false;\n }\n\n const two = new BigInteger(2);\n // expect p*u = 1 mod q\n u = new BigInteger(u);\n if (!p.mul(u).mod(q).isOne()) {\n return false;\n }\n\n e = new BigInteger(e);\n d = new BigInteger(d);\n /**\n * In RSA pkcs#1 the exponents (d, e) are inverses modulo lcm(p-1, q-1)\n * We check that [de = 1 mod (p-1)] and [de = 1 mod (q-1)]\n * By CRT on coprime factors of (p-1, q-1) it follows that [de = 1 mod lcm(p-1, q-1)]\n *\n * We blind the multiplication with r, and check that rde = r mod lcm(p-1, q-1)\n */\n const nSizeOver3 = new BigInteger(Math.floor(n.bitLength() / 3));\n const r = await getRandomBigInteger(two, two.leftShift(nSizeOver3)); // r in [ 2, 2^{|n|/3} ) < p and q\n const rde = r.mul(d).mul(e);\n\n const areInverses = rde.mod(p.dec()).equal(r) && rde.mod(q.dec()).equal(r);\n if (!areInverses) {\n return false;\n }\n\n return true;\n}\n\nasync function bnSign(hashAlgo, n, d, hashed) {\n const BigInteger = await util.getBigInteger();\n n = new BigInteger(n);\n const m = new BigInteger(await emsaEncode(hashAlgo, hashed, n.byteLength()));\n d = new BigInteger(d);\n if (m.gte(n)) {\n throw new Error('Message size cannot exceed modulus size');\n }\n return m.modExp(d, n).toUint8Array('be', n.byteLength());\n}\n\nasync function webSign(hashName, data, n, e, d, p, q, u) {\n /** OpenPGP keys require that p < q, and Safari Web Crypto requires that p > q.\n * We swap them in privateToJWK, so it usually works out, but nevertheless,\n * not all OpenPGP keys are compatible with this requirement.\n * OpenPGP.js used to generate RSA keys the wrong way around (p > q), and still\n * does if the underlying Web Crypto does so (though the tested implementations\n * don't do so).\n */\n const jwk = await privateToJWK(n, e, d, p, q, u);\n const algo = {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: hashName }\n };\n const key = await webCrypto.importKey('jwk', jwk, algo, false, ['sign']);\n return new Uint8Array(await webCrypto.sign('RSASSA-PKCS1-v1_5', key, data));\n}\n\nasync function nodeSign(hashAlgo, data, n, e, d, p, q, u) {\n const { default: BN } = await import('bn.js');\n const pBNum = new BN(p);\n const qBNum = new BN(q);\n const dBNum = new BN(d);\n const dq = dBNum.mod(qBNum.subn(1)); // d mod (q-1)\n const dp = dBNum.mod(pBNum.subn(1)); // d mod (p-1)\n const sign = nodeCrypto.createSign(enums.read(enums.hash, hashAlgo));\n sign.write(data);\n sign.end();\n const keyObject = {\n version: 0,\n modulus: new BN(n),\n publicExponent: new BN(e),\n privateExponent: new BN(d),\n // switch p and q\n prime1: new BN(q),\n prime2: new BN(p),\n // switch dp and dq\n exponent1: dq,\n exponent2: dp,\n coefficient: new BN(u)\n };\n if (typeof nodeCrypto.createPrivateKey !== 'undefined') { //from version 11.6.0 Node supports der encoded key objects\n const der = RSAPrivateKey.encode(keyObject, 'der');\n return new Uint8Array(sign.sign({ key: der, format: 'der', type: 'pkcs1' }));\n }\n const pem = RSAPrivateKey.encode(keyObject, 'pem', {\n label: 'RSA PRIVATE KEY'\n });\n return new Uint8Array(sign.sign(pem));\n}\n\nasync function bnVerify(hashAlgo, s, n, e, hashed) {\n const BigInteger = await util.getBigInteger();\n n = new BigInteger(n);\n s = new BigInteger(s);\n e = new BigInteger(e);\n if (s.gte(n)) {\n throw new Error('Signature size cannot exceed modulus size');\n }\n const EM1 = s.modExp(e, n).toUint8Array('be', n.byteLength());\n const EM2 = await emsaEncode(hashAlgo, hashed, n.byteLength());\n return util.equalsUint8Array(EM1, EM2);\n}\n\nasync function webVerify(hashName, data, s, n, e) {\n const jwk = publicToJWK(n, e);\n const key = await webCrypto.importKey('jwk', jwk, {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: hashName }\n }, false, ['verify']);\n return webCrypto.verify('RSASSA-PKCS1-v1_5', key, s, data);\n}\n\nasync function nodeVerify(hashAlgo, data, s, n, e) {\n const { default: BN } = await import('bn.js');\n\n const verify = nodeCrypto.createVerify(enums.read(enums.hash, hashAlgo));\n verify.write(data);\n verify.end();\n const keyObject = {\n modulus: new BN(n),\n publicExponent: new BN(e)\n };\n let key;\n if (typeof nodeCrypto.createPrivateKey !== 'undefined') { //from version 11.6.0 Node supports der encoded key objects\n const der = RSAPublicKey.encode(keyObject, 'der');\n key = { key: der, format: 'der', type: 'pkcs1' };\n } else {\n key = RSAPublicKey.encode(keyObject, 'pem', {\n label: 'RSA PUBLIC KEY'\n });\n }\n try {\n return await verify.verify(key, s);\n } catch (err) {\n return false;\n }\n}\n\nasync function nodeEncrypt(data, n, e) {\n const { default: BN } = await import('bn.js');\n\n const keyObject = {\n modulus: new BN(n),\n publicExponent: new BN(e)\n };\n let key;\n if (typeof nodeCrypto.createPrivateKey !== 'undefined') {\n const der = RSAPublicKey.encode(keyObject, 'der');\n key = { key: der, format: 'der', type: 'pkcs1', padding: nodeCrypto.constants.RSA_PKCS1_PADDING };\n } else {\n const pem = RSAPublicKey.encode(keyObject, 'pem', {\n label: 'RSA PUBLIC KEY'\n });\n key = { key: pem, padding: nodeCrypto.constants.RSA_PKCS1_PADDING };\n }\n return new Uint8Array(nodeCrypto.publicEncrypt(key, data));\n}\n\nasync function bnEncrypt(data, n, e) {\n const BigInteger = await util.getBigInteger();\n n = new BigInteger(n);\n data = new BigInteger(emeEncode(data, n.byteLength()));\n e = new BigInteger(e);\n if (data.gte(n)) {\n throw new Error('Message size cannot exceed modulus size');\n }\n return data.modExp(e, n).toUint8Array('be', n.byteLength());\n}\n\nasync function nodeDecrypt(data, n, e, d, p, q, u, randomPayload) {\n const { default: BN } = await import('bn.js');\n\n const pBNum = new BN(p);\n const qBNum = new BN(q);\n const dBNum = new BN(d);\n const dq = dBNum.mod(qBNum.subn(1)); // d mod (q-1)\n const dp = dBNum.mod(pBNum.subn(1)); // d mod (p-1)\n const keyObject = {\n version: 0,\n modulus: new BN(n),\n publicExponent: new BN(e),\n privateExponent: new BN(d),\n // switch p and q\n prime1: new BN(q),\n prime2: new BN(p),\n // switch dp and dq\n exponent1: dq,\n exponent2: dp,\n coefficient: new BN(u)\n };\n let key;\n if (typeof nodeCrypto.createPrivateKey !== 'undefined') {\n const der = RSAPrivateKey.encode(keyObject, 'der');\n key = { key: der, format: 'der' , type: 'pkcs1', padding: nodeCrypto.constants.RSA_PKCS1_PADDING };\n } else {\n const pem = RSAPrivateKey.encode(keyObject, 'pem', {\n label: 'RSA PRIVATE KEY'\n });\n key = { key: pem, padding: nodeCrypto.constants.RSA_PKCS1_PADDING };\n }\n try {\n return new Uint8Array(nodeCrypto.privateDecrypt(key, data));\n } catch (err) {\n if (randomPayload) {\n return randomPayload;\n }\n throw new Error('Decryption error');\n }\n}\n\nasync function bnDecrypt(data, n, e, d, p, q, u, randomPayload) {\n const BigInteger = await util.getBigInteger();\n data = new BigInteger(data);\n n = new BigInteger(n);\n e = new BigInteger(e);\n d = new BigInteger(d);\n p = new BigInteger(p);\n q = new BigInteger(q);\n u = new BigInteger(u);\n if (data.gte(n)) {\n throw new Error('Data too large.');\n }\n const dq = d.mod(q.dec()); // d mod (q-1)\n const dp = d.mod(p.dec()); // d mod (p-1)\n\n const unblinder = (await getRandomBigInteger(new BigInteger(2), n)).mod(n);\n const blinder = unblinder.modInv(n).modExp(e, n);\n data = data.mul(blinder).mod(n);\n\n\n const mp = data.modExp(dp, p); // data**{d mod (q-1)} mod p\n const mq = data.modExp(dq, q); // data**{d mod (p-1)} mod q\n const h = u.mul(mq.sub(mp)).mod(q); // u * (mq-mp) mod q (operands already < q)\n\n let result = h.mul(p).add(mp); // result < n due to relations above\n\n result = result.mul(unblinder).mod(n);\n\n\n return emeDecode(result.toUint8Array('be', n.byteLength()), randomPayload);\n}\n\n/** Convert Openpgp private key params to jwk key according to\n * @link https://tools.ietf.org/html/rfc7517\n * @param {String} hashAlgo\n * @param {Uint8Array} n\n * @param {Uint8Array} e\n * @param {Uint8Array} d\n * @param {Uint8Array} p\n * @param {Uint8Array} q\n * @param {Uint8Array} u\n */\nasync function privateToJWK(n, e, d, p, q, u) {\n const BigInteger = await util.getBigInteger();\n const pNum = new BigInteger(p);\n const qNum = new BigInteger(q);\n const dNum = new BigInteger(d);\n\n let dq = dNum.mod(qNum.dec()); // d mod (q-1)\n let dp = dNum.mod(pNum.dec()); // d mod (p-1)\n dp = dp.toUint8Array();\n dq = dq.toUint8Array();\n return {\n kty: 'RSA',\n n: uint8ArrayToB64(n, true),\n e: uint8ArrayToB64(e, true),\n d: uint8ArrayToB64(d, true),\n // switch p and q\n p: uint8ArrayToB64(q, true),\n q: uint8ArrayToB64(p, true),\n // switch dp and dq\n dp: uint8ArrayToB64(dq, true),\n dq: uint8ArrayToB64(dp, true),\n qi: uint8ArrayToB64(u, true),\n ext: true\n };\n}\n\n/** Convert Openpgp key public params to jwk key according to\n * @link https://tools.ietf.org/html/rfc7517\n * @param {String} hashAlgo\n * @param {Uint8Array} n\n * @param {Uint8Array} e\n */\nfunction publicToJWK(n, e) {\n return {\n kty: 'RSA',\n n: uint8ArrayToB64(n, true),\n e: uint8ArrayToB64(e, true),\n ext: true\n };\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview ElGamal implementation\n * @module crypto/public_key/elgamal\n * @private\n */\n\nimport util from '../../util';\nimport { getRandomBigInteger } from '../random';\nimport { emeEncode, emeDecode } from '../pkcs1';\n\n/**\n * ElGamal Encryption function\n * Note that in OpenPGP, the message needs to be padded with PKCS#1 (same as RSA)\n * @param {Uint8Array} data - To be padded and encrypted\n * @param {Uint8Array} p\n * @param {Uint8Array} g\n * @param {Uint8Array} y\n * @returns {Promise<{ c1: Uint8Array, c2: Uint8Array }>}\n * @async\n */\nexport async function encrypt(data, p, g, y) {\n const BigInteger = await util.getBigInteger();\n p = new BigInteger(p);\n g = new BigInteger(g);\n y = new BigInteger(y);\n\n const padded = emeEncode(data, p.byteLength());\n const m = new BigInteger(padded);\n\n // OpenPGP uses a \"special\" version of ElGamal where g is generator of the full group Z/pZ*\n // hence g has order p-1, and to avoid that k = 0 mod p-1, we need to pick k in [1, p-2]\n const k = await getRandomBigInteger(new BigInteger(1), p.dec());\n return {\n c1: g.modExp(k, p).toUint8Array(),\n c2: y.modExp(k, p).imul(m).imod(p).toUint8Array()\n };\n}\n\n/**\n * ElGamal Encryption function\n * @param {Uint8Array} c1\n * @param {Uint8Array} c2\n * @param {Uint8Array} p\n * @param {Uint8Array} x\n * @param {Uint8Array} randomPayload - Data to return on unpadding error, instead of throwing\n * (needed for constant-time processing)\n * @returns {Promise} Unpadded message.\n * @throws {Error} on decryption error, unless `randomPayload` is given\n * @async\n */\nexport async function decrypt(c1, c2, p, x, randomPayload) {\n const BigInteger = await util.getBigInteger();\n c1 = new BigInteger(c1);\n c2 = new BigInteger(c2);\n p = new BigInteger(p);\n x = new BigInteger(x);\n\n const padded = c1.modExp(x, p).modInv(p).imul(c2).imod(p);\n return emeDecode(padded.toUint8Array('be', p.byteLength()), randomPayload);\n}\n\n/**\n * Validate ElGamal parameters\n * @param {Uint8Array} p - ElGamal prime\n * @param {Uint8Array} g - ElGamal group generator\n * @param {Uint8Array} y - ElGamal public key\n * @param {Uint8Array} x - ElGamal private exponent\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(p, g, y, x) {\n const BigInteger = await util.getBigInteger();\n p = new BigInteger(p);\n g = new BigInteger(g);\n y = new BigInteger(y);\n\n const one = new BigInteger(1);\n // Check that 1 < g < p\n if (g.lte(one) || g.gte(p)) {\n return false;\n }\n\n // Expect p-1 to be large\n const pSize = new BigInteger(p.bitLength());\n const n1023 = new BigInteger(1023);\n if (pSize.lt(n1023)) {\n return false;\n }\n\n /**\n * g should have order p-1\n * Check that g ** (p-1) = 1 mod p\n */\n if (!g.modExp(p.dec(), p).isOne()) {\n return false;\n }\n\n /**\n * Since p-1 is not prime, g might have a smaller order that divides p-1\n * We want to make sure that the order is large enough to hinder a small subgroup attack\n *\n * We just check g**i != 1 for all i up to a threshold\n */\n let res = g;\n const i = new BigInteger(1);\n const threshold = new BigInteger(2).leftShift(new BigInteger(17)); // we want order > threshold\n while (i.lt(threshold)) {\n res = res.mul(g).imod(p);\n if (res.isOne()) {\n return false;\n }\n i.iinc();\n }\n\n /**\n * Re-derive public key y' = g ** x mod p\n * Expect y == y'\n *\n * Blinded exponentiation computes g**{r(p-1) + x} to compare to y\n */\n x = new BigInteger(x);\n const two = new BigInteger(2);\n const r = await getRandomBigInteger(two.leftShift(pSize.dec()), two.leftShift(pSize)); // draw r of same size as p-1\n const rqx = p.dec().imul(r).iadd(x);\n if (!y.equal(g.modExp(rqx, p))) {\n return false;\n }\n\n return true;\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Wrapper to an OID value\n *\n * {@link https://tools.ietf.org/html/rfc6637#section-11|RFC6637, section 11}:\n * The sequence of octets in the third column is the result of applying\n * the Distinguished Encoding Rules (DER) to the ASN.1 Object Identifier\n * with subsequent truncation. The truncation removes the two fields of\n * encoded Object Identifier. The first omitted field is one octet\n * representing the Object Identifier tag, and the second omitted field\n * is the length of the Object Identifier body. For example, the\n * complete ASN.1 DER encoding for the NIST P-256 curve OID is \"06 08 2A\n * 86 48 CE 3D 03 01 07\", from which the first entry in the table above\n * is constructed by omitting the first two octets. Only the truncated\n * sequence of octets is the valid representation of a curve OID.\n * @module type/oid\n * @private\n */\n\nimport util from '../util';\nimport enums from '../enums';\n\nclass OID {\n constructor(oid) {\n if (oid instanceof OID) {\n this.oid = oid.oid;\n } else if (util.isArray(oid) ||\n util.isUint8Array(oid)) {\n oid = new Uint8Array(oid);\n if (oid[0] === 0x06) { // DER encoded oid byte array\n if (oid[1] !== oid.length - 2) {\n throw new Error('Length mismatch in DER encoded oid');\n }\n oid = oid.subarray(2);\n }\n this.oid = oid;\n } else {\n this.oid = '';\n }\n }\n\n /**\n * Method to read an OID object\n * @param {Uint8Array} input - Where to read the OID from\n * @returns {Number} Number of read bytes.\n */\n read(input) {\n if (input.length >= 1) {\n const length = input[0];\n if (input.length >= 1 + length) {\n this.oid = input.subarray(1, 1 + length);\n return 1 + this.oid.length;\n }\n }\n throw new Error('Invalid oid');\n }\n\n /**\n * Serialize an OID object\n * @returns {Uint8Array} Array with the serialized value the OID.\n */\n write() {\n return util.concatUint8Array([new Uint8Array([this.oid.length]), this.oid]);\n }\n\n /**\n * Serialize an OID object as a hex string\n * @returns {string} String with the hex value of the OID.\n */\n toHex() {\n return util.uint8ArrayToHex(this.oid);\n }\n\n /**\n * If a known curve object identifier, return the canonical name of the curve\n * @returns {string} String with the canonical name of the curve.\n */\n getName() {\n const hex = this.toHex();\n if (enums.curve[hex]) {\n return enums.write(enums.curve, hex);\n } else {\n throw new Error('Unknown curve object identifier.');\n }\n }\n}\n\nexport default OID;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Wrapper for a KeyPair of an curve from indutny/elliptic library\n * @module crypto/public_key/elliptic/indutnyKey\n * @private\n */\n\nimport config from '../../../config';\n\nexport function keyFromPrivate(indutnyCurve, priv) {\n const keyPair = indutnyCurve.keyPair({ priv: priv });\n return keyPair;\n}\n\nexport function keyFromPublic(indutnyCurve, pub) {\n const keyPair = indutnyCurve.keyPair({ pub: pub });\n if (keyPair.validate().result !== true) {\n throw new Error('Invalid elliptic public key');\n }\n return keyPair;\n}\n\nexport async function getIndutnyCurve(name) {\n if (!config.useIndutnyElliptic) {\n throw new Error('This curve is only supported in the full build of OpenPGP.js');\n }\n const { default: elliptic } = await import('@openpgp/elliptic');\n return new elliptic.ec(name);\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Functions for reading and writing packets\n * @module packet/packet\n * @private\n */\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport enums from '../enums';\nimport util from '../util';\n\nexport function readSimpleLength(bytes) {\n let len = 0;\n let offset;\n const type = bytes[0];\n\n\n if (type < 192) {\n [len] = bytes;\n offset = 1;\n } else if (type < 255) {\n len = ((bytes[0] - 192) << 8) + (bytes[1]) + 192;\n offset = 2;\n } else if (type === 255) {\n len = util.readNumber(bytes.subarray(1, 1 + 4));\n offset = 5;\n }\n\n return {\n len: len,\n offset: offset\n };\n}\n\n/**\n * Encodes a given integer of length to the openpgp length specifier to a\n * string\n *\n * @param {Integer} length - The length to encode\n * @returns {Uint8Array} String with openpgp length representation.\n */\nexport function writeSimpleLength(length) {\n if (length < 192) {\n return new Uint8Array([length]);\n } else if (length > 191 && length < 8384) {\n /*\n * let a = (total data packet length) - 192 let bc = two octet\n * representation of a let d = b + 192\n */\n return new Uint8Array([((length - 192) >> 8) + 192, (length - 192) & 0xFF]);\n }\n return util.concatUint8Array([new Uint8Array([255]), util.writeNumber(length, 4)]);\n}\n\nexport function writePartialLength(power) {\n if (power < 0 || power > 30) {\n throw new Error('Partial Length power must be between 1 and 30');\n }\n return new Uint8Array([224 + power]);\n}\n\nexport function writeTag(tag_type) {\n /* we're only generating v4 packet headers here */\n return new Uint8Array([0xC0 | tag_type]);\n}\n\n/**\n * Writes a packet header version 4 with the given tag_type and length to a\n * string\n *\n * @param {Integer} tag_type - Tag type\n * @param {Integer} length - Length of the payload\n * @returns {String} String of the header.\n */\nexport function writeHeader(tag_type, length) {\n /* we're only generating v4 packet headers here */\n return util.concatUint8Array([writeTag(tag_type), writeSimpleLength(length)]);\n}\n\n/**\n * Whether the packet type supports partial lengths per RFC4880\n * @param {Integer} tag - Tag type\n * @returns {Boolean} String of the header.\n */\nexport function supportsStreaming(tag) {\n return [\n enums.packet.literalData,\n enums.packet.compressedData,\n enums.packet.symmetricallyEncryptedData,\n enums.packet.symEncryptedIntegrityProtectedData,\n enums.packet.aeadEncryptedData\n ].includes(tag);\n}\n\n/**\n * Generic static Packet Parser function\n *\n * @param {Uint8Array | ReadableStream} input - Input stream as string\n * @param {Function} callback - Function to call with the parsed packet\n * @returns {Boolean} Returns false if the stream was empty and parsing is done, and true otherwise.\n */\nexport async function readPackets(input, callback) {\n const reader = stream.getReader(input);\n let writer;\n let callbackReturned;\n try {\n const peekedBytes = await reader.peekBytes(2);\n // some sanity checks\n if (!peekedBytes || peekedBytes.length < 2 || (peekedBytes[0] & 0x80) === 0) {\n throw new Error('Error during parsing. This message / key probably does not conform to a valid OpenPGP format.');\n }\n const headerByte = await reader.readByte();\n let tag = -1;\n let format = -1;\n let packetLength;\n\n format = 0; // 0 = old format; 1 = new format\n if ((headerByte & 0x40) !== 0) {\n format = 1;\n }\n\n let packetLengthType;\n if (format) {\n // new format header\n tag = headerByte & 0x3F; // bit 5-0\n } else {\n // old format header\n tag = (headerByte & 0x3F) >> 2; // bit 5-2\n packetLengthType = headerByte & 0x03; // bit 1-0\n }\n\n const packetSupportsStreaming = supportsStreaming(tag);\n let packet = null;\n if (packetSupportsStreaming) {\n if (util.isStream(input) === 'array') {\n const arrayStream = new stream.ArrayStream();\n writer = stream.getWriter(arrayStream);\n packet = arrayStream;\n } else {\n const transform = new stream.TransformStream();\n writer = stream.getWriter(transform.writable);\n packet = transform.readable;\n }\n // eslint-disable-next-line callback-return\n callbackReturned = callback({ tag, packet });\n } else {\n packet = [];\n }\n\n let wasPartialLength;\n do {\n if (!format) {\n // 4.2.1. Old Format Packet Lengths\n switch (packetLengthType) {\n case 0:\n // The packet has a one-octet length. The header is 2 octets\n // long.\n packetLength = await reader.readByte();\n break;\n case 1:\n // The packet has a two-octet length. The header is 3 octets\n // long.\n packetLength = (await reader.readByte() << 8) | await reader.readByte();\n break;\n case 2:\n // The packet has a four-octet length. The header is 5\n // octets long.\n packetLength = (await reader.readByte() << 24) | (await reader.readByte() << 16) | (await reader.readByte() <<\n 8) | await reader.readByte();\n break;\n default:\n // 3 - The packet is of indeterminate length. The header is 1\n // octet long, and the implementation must determine how long\n // the packet is. If the packet is in a file, this means that\n // the packet extends until the end of the file. In general,\n // an implementation SHOULD NOT use indeterminate-length\n // packets except where the end of the data will be clear\n // from the context, and even then it is better to use a\n // definite length, or a new format header. The new format\n // headers described below have a mechanism for precisely\n // encoding data of indeterminate length.\n packetLength = Infinity;\n break;\n }\n } else { // 4.2.2. New Format Packet Lengths\n // 4.2.2.1. One-Octet Lengths\n const lengthByte = await reader.readByte();\n wasPartialLength = false;\n if (lengthByte < 192) {\n packetLength = lengthByte;\n // 4.2.2.2. Two-Octet Lengths\n } else if (lengthByte >= 192 && lengthByte < 224) {\n packetLength = ((lengthByte - 192) << 8) + (await reader.readByte()) + 192;\n // 4.2.2.4. Partial Body Lengths\n } else if (lengthByte > 223 && lengthByte < 255) {\n packetLength = 1 << (lengthByte & 0x1F);\n wasPartialLength = true;\n if (!packetSupportsStreaming) {\n throw new TypeError('This packet type does not support partial lengths.');\n }\n // 4.2.2.3. Five-Octet Lengths\n } else {\n packetLength = (await reader.readByte() << 24) | (await reader.readByte() << 16) | (await reader.readByte() <<\n 8) | await reader.readByte();\n }\n }\n if (packetLength > 0) {\n let bytesRead = 0;\n while (true) {\n if (writer) await writer.ready;\n const { done, value } = await reader.read();\n if (done) {\n if (packetLength === Infinity) break;\n throw new Error('Unexpected end of packet');\n }\n const chunk = packetLength === Infinity ? value : value.subarray(0, packetLength - bytesRead);\n if (writer) await writer.write(chunk);\n else packet.push(chunk);\n bytesRead += value.length;\n if (bytesRead >= packetLength) {\n reader.unshift(value.subarray(packetLength - bytesRead + value.length));\n break;\n }\n }\n }\n } while (wasPartialLength);\n\n // If this was not a packet that \"supports streaming\", we peek to check\n // whether it is the last packet in the message. We peek 2 bytes instead\n // of 1 because the beginning of this function also peeks 2 bytes, and we\n // want to cut a `subarray` of the correct length into `web-stream-tools`'\n // `externalBuffer` as a tiny optimization here.\n //\n // If it *was* a streaming packet (i.e. the data packets), we peek at the\n // entire remainder of the stream, in order to forward errors in the\n // remainder of the stream to the packet data. (Note that this means we\n // read/peek at all signature packets before closing the literal data\n // packet, for example.) This forwards MDC errors to the literal data\n // stream, for example, so that they don't get lost / forgotten on\n // decryptedMessage.packets.stream, which we never look at.\n //\n // An example of what we do when stream-parsing a message containing\n // [ one-pass signature packet, literal data packet, signature packet ]:\n // 1. Read the one-pass signature packet\n // 2. Peek 2 bytes of the literal data packet\n // 3. Parse the one-pass signature packet\n //\n // 4. Read the literal data packet, simultaneously stream-parsing it\n // 5. Peek until the end of the message\n // 6. Finish parsing the literal data packet\n //\n // 7. Read the signature packet again (we already peeked at it in step 5)\n // 8. Peek at the end of the stream again (`peekBytes` returns undefined)\n // 9. Parse the signature packet\n //\n // Note that this means that if there's an error in the very end of the\n // stream, such as an MDC error, we throw in step 5 instead of in step 8\n // (or never), which is the point of this exercise.\n const nextPacket = await reader.peekBytes(packetSupportsStreaming ? Infinity : 2);\n if (writer) {\n await writer.ready;\n await writer.close();\n } else {\n packet = util.concatUint8Array(packet);\n // eslint-disable-next-line callback-return\n await callback({ tag, packet });\n }\n return !nextPacket || !nextPacket.length;\n } catch (e) {\n if (writer) {\n await writer.abort(e);\n return true;\n } else {\n throw e;\n }\n } finally {\n if (writer) {\n await callbackReturned;\n }\n reader.releaseLock();\n }\n}\n\nexport class UnsupportedError extends Error {\n constructor(...params) {\n super(...params);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, UnsupportedError);\n }\n\n this.name = 'UnsupportedError';\n }\n}\n\nexport class UnparseablePacket {\n constructor(tag, rawContent) {\n this.tag = tag;\n this.rawContent = rawContent;\n }\n\n write() {\n return this.rawContent;\n }\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Wrapper of an instance of an Elliptic Curve\n * @module crypto/public_key/elliptic/curve\n * @private\n */\n\nimport nacl from '@openpgp/tweetnacl/nacl-fast-light';\nimport { getRandomBytes } from '../../random';\nimport enums from '../../../enums';\nimport util from '../../../util';\nimport { uint8ArrayToB64, b64ToUint8Array } from '../../../encoding/base64';\nimport OID from '../../../type/oid';\nimport { keyFromPublic, keyFromPrivate, getIndutnyCurve } from './indutnyKey';\nimport { UnsupportedError } from '../../../packet/packet';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\n\nconst webCurves = {\n 'p256': 'P-256',\n 'p384': 'P-384',\n 'p521': 'P-521'\n};\nconst knownCurves = nodeCrypto ? nodeCrypto.getCurves() : [];\nconst nodeCurves = nodeCrypto ? {\n secp256k1: knownCurves.includes('secp256k1') ? 'secp256k1' : undefined,\n p256: knownCurves.includes('prime256v1') ? 'prime256v1' : undefined,\n p384: knownCurves.includes('secp384r1') ? 'secp384r1' : undefined,\n p521: knownCurves.includes('secp521r1') ? 'secp521r1' : undefined,\n ed25519: knownCurves.includes('ED25519') ? 'ED25519' : undefined,\n curve25519: knownCurves.includes('X25519') ? 'X25519' : undefined,\n brainpoolP256r1: knownCurves.includes('brainpoolP256r1') ? 'brainpoolP256r1' : undefined,\n brainpoolP384r1: knownCurves.includes('brainpoolP384r1') ? 'brainpoolP384r1' : undefined,\n brainpoolP512r1: knownCurves.includes('brainpoolP512r1') ? 'brainpoolP512r1' : undefined\n} : {};\n\nconst curves = {\n p256: {\n oid: [0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha256,\n cipher: enums.symmetric.aes128,\n node: nodeCurves.p256,\n web: webCurves.p256,\n payloadSize: 32,\n sharedSize: 256\n },\n p384: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha384,\n cipher: enums.symmetric.aes192,\n node: nodeCurves.p384,\n web: webCurves.p384,\n payloadSize: 48,\n sharedSize: 384\n },\n p521: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha512,\n cipher: enums.symmetric.aes256,\n node: nodeCurves.p521,\n web: webCurves.p521,\n payloadSize: 66,\n sharedSize: 528\n },\n secp256k1: {\n oid: [0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha256,\n cipher: enums.symmetric.aes128,\n node: nodeCurves.secp256k1,\n payloadSize: 32\n },\n ed25519: {\n oid: [0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01],\n keyType: enums.publicKey.eddsaLegacy,\n hash: enums.hash.sha512,\n node: false, // nodeCurves.ed25519 TODO\n payloadSize: 32\n },\n curve25519: {\n oid: [0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01],\n keyType: enums.publicKey.ecdh,\n hash: enums.hash.sha256,\n cipher: enums.symmetric.aes128,\n node: false, // nodeCurves.curve25519 TODO\n payloadSize: 32\n },\n brainpoolP256r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha256,\n cipher: enums.symmetric.aes128,\n node: nodeCurves.brainpoolP256r1,\n payloadSize: 32\n },\n brainpoolP384r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha384,\n cipher: enums.symmetric.aes192,\n node: nodeCurves.brainpoolP384r1,\n payloadSize: 48\n },\n brainpoolP512r1: {\n oid: [0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D],\n keyType: enums.publicKey.ecdsa,\n hash: enums.hash.sha512,\n cipher: enums.symmetric.aes256,\n node: nodeCurves.brainpoolP512r1,\n payloadSize: 64\n }\n};\n\nclass CurveWithOID {\n constructor(oidOrName, params) {\n try {\n if (util.isArray(oidOrName) ||\n util.isUint8Array(oidOrName)) {\n // by oid byte array\n oidOrName = new OID(oidOrName);\n }\n if (oidOrName instanceof OID) {\n // by curve OID\n oidOrName = oidOrName.getName();\n }\n // by curve name or oid string\n this.name = enums.write(enums.curve, oidOrName);\n } catch (err) {\n throw new UnsupportedError('Unknown curve');\n }\n params = params || curves[this.name];\n\n this.keyType = params.keyType;\n\n this.oid = params.oid;\n this.hash = params.hash;\n this.cipher = params.cipher;\n this.node = params.node && curves[this.name];\n this.web = params.web && curves[this.name];\n this.payloadSize = params.payloadSize;\n if (this.web && util.getWebCrypto()) {\n this.type = 'web';\n } else if (this.node && util.getNodeCrypto()) {\n this.type = 'node';\n } else if (this.name === 'curve25519') {\n this.type = 'curve25519';\n } else if (this.name === 'ed25519') {\n this.type = 'ed25519';\n }\n }\n\n async genKeyPair() {\n let keyPair;\n switch (this.type) {\n case 'web':\n try {\n return await webGenKeyPair(this.name);\n } catch (err) {\n util.printDebugError('Browser did not support generating ec key ' + err.message);\n break;\n }\n case 'node':\n return nodeGenKeyPair(this.name);\n case 'curve25519': {\n const privateKey = getRandomBytes(32);\n privateKey[0] = (privateKey[0] & 127) | 64;\n privateKey[31] &= 248;\n const secretKey = privateKey.slice().reverse();\n keyPair = nacl.box.keyPair.fromSecretKey(secretKey);\n const publicKey = util.concatUint8Array([new Uint8Array([0x40]), keyPair.publicKey]);\n return { publicKey, privateKey };\n }\n case 'ed25519': {\n const privateKey = getRandomBytes(32);\n const keyPair = nacl.sign.keyPair.fromSeed(privateKey);\n const publicKey = util.concatUint8Array([new Uint8Array([0x40]), keyPair.publicKey]);\n return { publicKey, privateKey };\n }\n }\n const indutnyCurve = await getIndutnyCurve(this.name);\n keyPair = await indutnyCurve.genKeyPair({\n entropy: util.uint8ArrayToString(getRandomBytes(32))\n });\n return { publicKey: new Uint8Array(keyPair.getPublic('array', false)), privateKey: keyPair.getPrivate().toArrayLike(Uint8Array) };\n }\n}\n\nasync function generate(curve) {\n const BigInteger = await util.getBigInteger();\n\n curve = new CurveWithOID(curve);\n const keyPair = await curve.genKeyPair();\n const Q = new BigInteger(keyPair.publicKey).toUint8Array();\n const secret = new BigInteger(keyPair.privateKey).toUint8Array('be', curve.payloadSize);\n return {\n oid: curve.oid,\n Q,\n secret,\n hash: curve.hash,\n cipher: curve.cipher\n };\n}\n\n/**\n * Get preferred hash algo to use with the given curve\n * @param {module:type/oid} oid - curve oid\n * @returns {enums.hash} hash algorithm\n */\nfunction getPreferredHashAlgo(oid) {\n return curves[enums.write(enums.curve, oid.toHex())].hash;\n}\n\n/**\n * Validate ECDH and ECDSA parameters\n * Not suitable for EdDSA (different secret key format)\n * @param {module:enums.publicKey} algo - EC algorithm, to filter supported curves\n * @param {module:type/oid} oid - EC object identifier\n * @param {Uint8Array} Q - EC public point\n * @param {Uint8Array} d - EC secret scalar\n * @returns {Promise} Whether params are valid.\n * @async\n */\nasync function validateStandardParams(algo, oid, Q, d) {\n const supportedCurves = {\n p256: true,\n p384: true,\n p521: true,\n secp256k1: true,\n curve25519: algo === enums.publicKey.ecdh,\n brainpoolP256r1: true,\n brainpoolP384r1: true,\n brainpoolP512r1: true\n };\n\n // Check whether the given curve is supported\n const curveName = oid.getName();\n if (!supportedCurves[curveName]) {\n return false;\n }\n\n if (curveName === 'curve25519') {\n d = d.slice().reverse();\n // Re-derive public point Q'\n const { publicKey } = nacl.box.keyPair.fromSecretKey(d);\n\n Q = new Uint8Array(Q);\n const dG = new Uint8Array([0x40, ...publicKey]); // Add public key prefix\n if (!util.equalsUint8Array(dG, Q)) {\n return false;\n }\n\n return true;\n }\n\n const curve = await getIndutnyCurve(curveName);\n try {\n // Parse Q and check that it is on the curve but not at infinity\n Q = keyFromPublic(curve, Q).getPublic();\n } catch (validationErrors) {\n return false;\n }\n\n /**\n * Re-derive public point Q' = dG from private key\n * Expect Q == Q'\n */\n const dG = keyFromPrivate(curve, d).getPublic();\n if (!dG.eq(Q)) {\n return false;\n }\n\n return true;\n}\n\nexport {\n CurveWithOID, curves, webCurves, nodeCurves, generate, getPreferredHashAlgo, jwkToRawPublic, rawPublicToJWK, privateToJWK, validateStandardParams\n};\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nasync function webGenKeyPair(name) {\n // Note: keys generated with ECDSA and ECDH are structurally equivalent\n const webCryptoKey = await webCrypto.generateKey({ name: 'ECDSA', namedCurve: webCurves[name] }, true, ['sign', 'verify']);\n\n const privateKey = await webCrypto.exportKey('jwk', webCryptoKey.privateKey);\n const publicKey = await webCrypto.exportKey('jwk', webCryptoKey.publicKey);\n\n return {\n publicKey: jwkToRawPublic(publicKey),\n privateKey: b64ToUint8Array(privateKey.d, true)\n };\n}\n\nasync function nodeGenKeyPair(name) {\n // Note: ECDSA and ECDH key generation is structurally equivalent\n const ecdh = nodeCrypto.createECDH(nodeCurves[name]);\n await ecdh.generateKeys();\n return {\n publicKey: new Uint8Array(ecdh.getPublicKey()),\n privateKey: new Uint8Array(ecdh.getPrivateKey())\n };\n}\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n/**\n * @param {JsonWebKey} jwk - key for conversion\n *\n * @returns {Uint8Array} Raw public key.\n */\nfunction jwkToRawPublic(jwk) {\n const bufX = b64ToUint8Array(jwk.x);\n const bufY = b64ToUint8Array(jwk.y);\n const publicKey = new Uint8Array(bufX.length + bufY.length + 1);\n publicKey[0] = 0x04;\n publicKey.set(bufX, 1);\n publicKey.set(bufY, bufX.length + 1);\n return publicKey;\n}\n\n/**\n * @param {Integer} payloadSize - ec payload size\n * @param {String} name - curve name\n * @param {Uint8Array} publicKey - public key\n *\n * @returns {JsonWebKey} Public key in jwk format.\n */\nfunction rawPublicToJWK(payloadSize, name, publicKey) {\n const len = payloadSize;\n const bufX = publicKey.slice(1, len + 1);\n const bufY = publicKey.slice(len + 1, len * 2 + 1);\n // https://www.rfc-editor.org/rfc/rfc7518.txt\n const jwk = {\n kty: 'EC',\n crv: name,\n x: uint8ArrayToB64(bufX, true),\n y: uint8ArrayToB64(bufY, true),\n ext: true\n };\n return jwk;\n}\n\n/**\n * @param {Integer} payloadSize - ec payload size\n * @param {String} name - curve name\n * @param {Uint8Array} publicKey - public key\n * @param {Uint8Array} privateKey - private key\n *\n * @returns {JsonWebKey} Private key in jwk format.\n */\nfunction privateToJWK(payloadSize, name, publicKey, privateKey) {\n const jwk = rawPublicToJWK(payloadSize, name, publicKey);\n jwk.d = uint8ArrayToB64(privateKey, true);\n return jwk;\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of ECDSA following RFC6637 for Openpgpjs\n * @module crypto/public_key/elliptic/ecdsa\n * @private\n */\n\nimport enums from '../../../enums';\nimport util from '../../../util';\nimport { getRandomBytes } from '../../random';\nimport hash from '../../hash';\nimport { CurveWithOID, webCurves, privateToJWK, rawPublicToJWK, validateStandardParams } from './oid_curves';\nimport { getIndutnyCurve, keyFromPrivate, keyFromPublic } from './indutnyKey';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\n\n/**\n * Sign a message using the provided key\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {module:enums.hash} hashAlgo - Hash algorithm used to sign\n * @param {Uint8Array} message - Message to sign\n * @param {Uint8Array} publicKey - Public key\n * @param {Uint8Array} privateKey - Private key used to sign the message\n * @param {Uint8Array} hashed - The hashed message\n * @returns {Promise<{\n * r: Uint8Array,\n * s: Uint8Array\n * }>} Signature of the message\n * @async\n */\nexport async function sign(oid, hashAlgo, message, publicKey, privateKey, hashed) {\n const curve = new CurveWithOID(oid);\n if (message && !util.isStream(message)) {\n const keyPair = { publicKey, privateKey };\n switch (curve.type) {\n case 'web': {\n // If browser doesn't support a curve, we'll catch it\n try {\n // Need to await to make sure browser succeeds\n return await webSign(curve, hashAlgo, message, keyPair);\n } catch (err) {\n // We do not fallback if the error is related to key integrity\n // Unfortunaley Safari does not support p521 and throws a DataError when using it\n // So we need to always fallback for that curve\n if (curve.name !== 'p521' && (err.name === 'DataError' || err.name === 'OperationError')) {\n throw err;\n }\n util.printDebugError('Browser did not support signing: ' + err.message);\n }\n break;\n }\n case 'node': {\n const signature = await nodeSign(curve, hashAlgo, message, keyPair);\n return {\n r: signature.r.toArrayLike(Uint8Array),\n s: signature.s.toArrayLike(Uint8Array)\n };\n }\n }\n }\n return ellipticSign(curve, hashed, privateKey);\n}\n\n/**\n * Verifies if a signature is valid for a message\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {module:enums.hash} hashAlgo - Hash algorithm used in the signature\n * @param {{r: Uint8Array,\n s: Uint8Array}} signature Signature to verify\n * @param {Uint8Array} message - Message to verify\n * @param {Uint8Array} publicKey - Public key used to verify the message\n * @param {Uint8Array} hashed - The hashed message\n * @returns {Boolean}\n * @async\n */\nexport async function verify(oid, hashAlgo, signature, message, publicKey, hashed) {\n const curve = new CurveWithOID(oid);\n if (message && !util.isStream(message)) {\n switch (curve.type) {\n case 'web':\n try {\n // Need to await to make sure browser succeeds\n return await webVerify(curve, hashAlgo, signature, message, publicKey);\n } catch (err) {\n // We do not fallback if the error is related to key integrity\n // Unfortunately Safari does not support p521 and throws a DataError when using it\n // So we need to always fallback for that curve\n if (curve.name !== 'p521' && (err.name === 'DataError' || err.name === 'OperationError')) {\n throw err;\n }\n util.printDebugError('Browser did not support verifying: ' + err.message);\n }\n break;\n case 'node':\n return nodeVerify(curve, hashAlgo, signature, message, publicKey);\n }\n }\n const digest = (typeof hashAlgo === 'undefined') ? message : hashed;\n return ellipticVerify(curve, signature, digest, publicKey);\n}\n\n/**\n * Validate ECDSA parameters\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {Uint8Array} Q - ECDSA public point\n * @param {Uint8Array} d - ECDSA secret scalar\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(oid, Q, d) {\n const curve = new CurveWithOID(oid);\n // Reject curves x25519 and ed25519\n if (curve.keyType !== enums.publicKey.ecdsa) {\n return false;\n }\n\n // To speed up the validation, we try to use node- or webcrypto when available\n // and sign + verify a random message\n switch (curve.type) {\n case 'web':\n case 'node': {\n const message = getRandomBytes(8);\n const hashAlgo = enums.hash.sha256;\n const hashed = await hash.digest(hashAlgo, message);\n try {\n const signature = await sign(oid, hashAlgo, message, Q, d, hashed);\n return await verify(oid, hashAlgo, signature, message, Q, hashed);\n } catch (err) {\n return false;\n }\n }\n default:\n return validateStandardParams(enums.publicKey.ecdsa, oid, Q, d);\n }\n}\n\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\nasync function ellipticSign(curve, hashed, privateKey) {\n const indutnyCurve = await getIndutnyCurve(curve.name);\n const key = keyFromPrivate(indutnyCurve, privateKey);\n const signature = key.sign(hashed);\n return {\n r: signature.r.toArrayLike(Uint8Array),\n s: signature.s.toArrayLike(Uint8Array)\n };\n}\n\nasync function ellipticVerify(curve, signature, digest, publicKey) {\n const indutnyCurve = await getIndutnyCurve(curve.name);\n const key = keyFromPublic(indutnyCurve, publicKey);\n return key.verify(digest, signature);\n}\n\nasync function webSign(curve, hashAlgo, message, keyPair) {\n const len = curve.payloadSize;\n const jwk = privateToJWK(curve.payloadSize, webCurves[curve.name], keyPair.publicKey, keyPair.privateKey);\n const key = await webCrypto.importKey(\n 'jwk',\n jwk,\n {\n 'name': 'ECDSA',\n 'namedCurve': webCurves[curve.name],\n 'hash': { name: enums.read(enums.webHash, curve.hash) }\n },\n false,\n ['sign']\n );\n\n const signature = new Uint8Array(await webCrypto.sign(\n {\n 'name': 'ECDSA',\n 'namedCurve': webCurves[curve.name],\n 'hash': { name: enums.read(enums.webHash, hashAlgo) }\n },\n key,\n message\n ));\n\n return {\n r: signature.slice(0, len),\n s: signature.slice(len, len << 1)\n };\n}\n\nasync function webVerify(curve, hashAlgo, { r, s }, message, publicKey) {\n const jwk = rawPublicToJWK(curve.payloadSize, webCurves[curve.name], publicKey);\n const key = await webCrypto.importKey(\n 'jwk',\n jwk,\n {\n 'name': 'ECDSA',\n 'namedCurve': webCurves[curve.name],\n 'hash': { name: enums.read(enums.webHash, curve.hash) }\n },\n false,\n ['verify']\n );\n\n const signature = util.concatUint8Array([r, s]).buffer;\n\n return webCrypto.verify(\n {\n 'name': 'ECDSA',\n 'namedCurve': webCurves[curve.name],\n 'hash': { name: enums.read(enums.webHash, hashAlgo) }\n },\n key,\n signature,\n message\n );\n}\n\nasync function nodeSign(curve, hashAlgo, message, keyPair) {\n const sign = nodeCrypto.createSign(enums.read(enums.hash, hashAlgo));\n sign.write(message);\n sign.end();\n const key = ECPrivateKey.encode({\n version: 1,\n parameters: curve.oid,\n privateKey: Array.from(keyPair.privateKey),\n publicKey: { unused: 0, data: Array.from(keyPair.publicKey) }\n }, 'pem', {\n label: 'EC PRIVATE KEY'\n });\n\n return ECDSASignature.decode(sign.sign(key), 'der');\n}\n\nasync function nodeVerify(curve, hashAlgo, { r, s }, message, publicKey) {\n const { default: BN } = await import('bn.js');\n\n const verify = nodeCrypto.createVerify(enums.read(enums.hash, hashAlgo));\n verify.write(message);\n verify.end();\n const key = SubjectPublicKeyInfo.encode({\n algorithm: {\n algorithm: [1, 2, 840, 10045, 2, 1],\n parameters: curve.oid\n },\n subjectPublicKey: { unused: 0, data: Array.from(publicKey) }\n }, 'pem', {\n label: 'PUBLIC KEY'\n });\n const signature = ECDSASignature.encode({\n r: new BN(r), s: new BN(s)\n }, 'der');\n\n try {\n return verify.verify(key, signature);\n } catch (err) {\n return false;\n }\n}\n\n// Originally written by Owen Smith https://github.com/omsmith\n// Adapted on Feb 2018 from https://github.com/Brightspace/node-jwk-to-pem/\n\n/* eslint-disable no-invalid-this */\n\nconst asn1 = nodeCrypto ? require('asn1.js') : undefined;\n\nconst ECDSASignature = nodeCrypto ?\n asn1.define('ECDSASignature', function() {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n );\n }) : undefined;\n\nconst ECPrivateKey = nodeCrypto ?\n asn1.define('ECPrivateKey', function() {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').explicit(0).optional().any(),\n this.key('publicKey').explicit(1).optional().bitstr()\n );\n }) : undefined;\n\nconst AlgorithmIdentifier = nodeCrypto ?\n asn1.define('AlgorithmIdentifier', function() {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional().any()\n );\n }) : undefined;\n\nconst SubjectPublicKeyInfo = nodeCrypto ?\n asn1.define('SubjectPublicKeyInfo', function() {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n );\n }) : undefined;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of legacy EdDSA following RFC4880bis-03 for OpenPGP.\n * This key type has been deprecated by the crypto-refresh RFC.\n * @module crypto/public_key/elliptic/eddsa_legacy\n * @private\n */\n\nimport sha512 from 'hash.js/lib/hash/sha/512';\nimport nacl from '@openpgp/tweetnacl/nacl-fast-light';\nimport util from '../../../util';\nimport enums from '../../../enums';\nimport hash from '../../hash';\n\nnacl.hash = bytes => new Uint8Array(sha512().update(bytes).digest());\n\n/**\n * Sign a message using the provided legacy EdDSA key\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {module:enums.hash} hashAlgo - Hash algorithm used to sign (must be sha256 or stronger)\n * @param {Uint8Array} message - Message to sign\n * @param {Uint8Array} publicKey - Public key\n * @param {Uint8Array} privateKey - Private key used to sign the message\n * @param {Uint8Array} hashed - The hashed message\n * @returns {Promise<{\n * r: Uint8Array,\n * s: Uint8Array\n * }>} Signature of the message\n * @async\n */\nexport async function sign(oid, hashAlgo, message, publicKey, privateKey, hashed) {\n if (hash.getHashByteLength(hashAlgo) < hash.getHashByteLength(enums.hash.sha256)) {\n // see https://tools.ietf.org/id/draft-ietf-openpgp-rfc4880bis-10.html#section-15-7.2\n throw new Error('Hash algorithm too weak for EdDSA.');\n }\n const secretKey = util.concatUint8Array([privateKey, publicKey.subarray(1)]);\n const signature = nacl.sign.detached(hashed, secretKey);\n // EdDSA signature params are returned in little-endian format\n return {\n r: signature.subarray(0, 32),\n s: signature.subarray(32)\n };\n}\n\n/**\n * Verifies if a legacy EdDSA signature is valid for a message\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {module:enums.hash} hashAlgo - Hash algorithm used in the signature\n * @param {{r: Uint8Array,\n s: Uint8Array}} signature Signature to verify the message\n * @param {Uint8Array} m - Message to verify\n * @param {Uint8Array} publicKey - Public key used to verify the message\n * @param {Uint8Array} hashed - The hashed message\n * @returns {Boolean}\n * @async\n */\nexport async function verify(oid, hashAlgo, { r, s }, m, publicKey, hashed) {\n if (hash.getHashByteLength(hashAlgo) < hash.getHashByteLength(enums.hash.sha256)) {\n throw new Error('Hash algorithm too weak for EdDSA.');\n }\n const signature = util.concatUint8Array([r, s]);\n return nacl.sign.detached.verify(hashed, signature, publicKey.subarray(1));\n}\n/**\n * Validate legacy EdDSA parameters\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {Uint8Array} Q - EdDSA public point\n * @param {Uint8Array} k - EdDSA secret seed\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(oid, Q, k) {\n // Check whether the given curve is supported\n if (oid.getName() !== 'ed25519') {\n return false;\n }\n\n /**\n * Derive public point Q' = dG from private key\n * and expect Q == Q'\n */\n const { publicKey } = nacl.sign.keyPair.fromSeed(k);\n const dG = new Uint8Array([0x40, ...publicKey]); // Add public key prefix\n return util.equalsUint8Array(Q, dG);\n\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2018 Proton Technologies AG\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of EdDSA following RFC4880bis-03 for OpenPGP\n * @module crypto/public_key/elliptic/eddsa\n * @private\n */\n\nimport sha512 from 'hash.js/lib/hash/sha/512';\nimport nacl from '@openpgp/tweetnacl/nacl-fast-light';\nimport util from '../../../util';\nimport enums from '../../../enums';\nimport hash from '../../hash';\nimport { getRandomBytes } from '../../random';\n\nnacl.hash = bytes => new Uint8Array(sha512().update(bytes).digest());\n\n/**\n * Generate (non-legacy) EdDSA key\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @returns {Promise<{ A: Uint8Array, seed: Uint8Array }>}\n */\nexport async function generate(algo) {\n switch (algo) {\n case enums.publicKey.ed25519: {\n const seed = getRandomBytes(32);\n const { publicKey: A } = nacl.sign.keyPair.fromSeed(seed);\n return { A, seed };\n }\n default:\n throw new Error('Unsupported EdDSA algorithm');\n }\n}\n\n/**\n * Sign a message using the provided key\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @param {module:enums.hash} hashAlgo - Hash algorithm used to sign (must be sha256 or stronger)\n * @param {Uint8Array} message - Message to sign\n * @param {Uint8Array} publicKey - Public key\n * @param {Uint8Array} privateKey - Private key used to sign the message\n * @param {Uint8Array} hashed - The hashed message\n * @returns {Promise<{\n * RS: Uint8Array\n * }>} Signature of the message\n * @async\n */\nexport async function sign(algo, hashAlgo, message, publicKey, privateKey, hashed) {\n if (hash.getHashByteLength(hashAlgo) < hash.getHashByteLength(getPreferredHashAlgo(algo))) {\n throw new Error('Hash algorithm too weak for EdDSA.');\n }\n switch (algo) {\n case enums.publicKey.ed25519: {\n const secretKey = util.concatUint8Array([privateKey, publicKey]);\n const signature = nacl.sign.detached(hashed, secretKey);\n return { RS: signature };\n }\n case enums.publicKey.ed448:\n default:\n throw new Error('Unsupported EdDSA algorithm');\n }\n\n}\n\n/**\n * Verifies if a signature is valid for a message\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @param {module:enums.hash} hashAlgo - Hash algorithm used in the signature\n * @param {{ RS: Uint8Array }} signature Signature to verify the message\n * @param {Uint8Array} m - Message to verify\n * @param {Uint8Array} publicKey - Public key used to verify the message\n * @param {Uint8Array} hashed - The hashed message\n * @returns {Boolean}\n * @async\n */\nexport async function verify(algo, hashAlgo, { RS }, m, publicKey, hashed) {\n if (hash.getHashByteLength(hashAlgo) < hash.getHashByteLength(getPreferredHashAlgo(algo))) {\n throw new Error('Hash algorithm too weak for EdDSA.');\n }\n switch (algo) {\n case enums.publicKey.ed25519: {\n return nacl.sign.detached.verify(hashed, RS, publicKey);\n }\n case enums.publicKey.ed448:\n default:\n throw new Error('Unsupported EdDSA algorithm');\n }\n}\n/**\n * Validate (non-legacy) EdDSA parameters\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @param {Uint8Array} A - EdDSA public point\n * @param {Uint8Array} seed - EdDSA secret seed\n * @param {Uint8Array} oid - (legacy only) EdDSA OID\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(algo, A, seed) {\n switch (algo) {\n case enums.publicKey.ed25519: {\n /**\n * Derive public point A' from private key\n * and expect A == A'\n */\n const { publicKey } = nacl.sign.keyPair.fromSeed(seed);\n return util.equalsUint8Array(A, publicKey);\n }\n\n case enums.publicKey.ed448: // unsupported\n default:\n return false;\n }\n}\n\nexport function getPreferredHashAlgo(algo) {\n switch (algo) {\n case enums.publicKey.ed25519:\n return enums.hash.sha256;\n default:\n throw new Error('Unknown EdDSA algo');\n }\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Implementation of RFC 3394 AES Key Wrap & Key Unwrap funcions\n * @see module:crypto/public_key/elliptic/ecdh\n * @module crypto/aes_kw\n * @private\n */\n\nimport * as cipher from './cipher';\nimport util from '../util';\n\n/**\n * AES key wrap\n * @function\n * @param {Uint8Array} key\n * @param {Uint8Array} data\n * @returns {Uint8Array}\n */\nexport function wrap(key, data) {\n const aes = new cipher['aes' + (key.length * 8)](key);\n const IV = new Uint32Array([0xA6A6A6A6, 0xA6A6A6A6]);\n const P = unpack(data);\n let A = IV;\n const R = P;\n const n = P.length / 2;\n const t = new Uint32Array([0, 0]);\n let B = new Uint32Array(4);\n for (let j = 0; j <= 5; ++j) {\n for (let i = 0; i < n; ++i) {\n t[1] = n * j + (1 + i);\n // B = A\n B[0] = A[0];\n B[1] = A[1];\n // B = A || R[i]\n B[2] = R[2 * i];\n B[3] = R[2 * i + 1];\n // B = AES(K, B)\n B = unpack(aes.encrypt(pack(B)));\n // A = MSB(64, B) ^ t\n A = B.subarray(0, 2);\n A[0] ^= t[0];\n A[1] ^= t[1];\n // R[i] = LSB(64, B)\n R[2 * i] = B[2];\n R[2 * i + 1] = B[3];\n }\n }\n return pack(A, R);\n}\n\n/**\n * AES key unwrap\n * @function\n * @param {String} key\n * @param {String} data\n * @returns {Uint8Array}\n * @throws {Error}\n */\nexport function unwrap(key, data) {\n const aes = new cipher['aes' + (key.length * 8)](key);\n const IV = new Uint32Array([0xA6A6A6A6, 0xA6A6A6A6]);\n const C = unpack(data);\n let A = C.subarray(0, 2);\n const R = C.subarray(2);\n const n = C.length / 2 - 1;\n const t = new Uint32Array([0, 0]);\n let B = new Uint32Array(4);\n for (let j = 5; j >= 0; --j) {\n for (let i = n - 1; i >= 0; --i) {\n t[1] = n * j + (i + 1);\n // B = A ^ t\n B[0] = A[0] ^ t[0];\n B[1] = A[1] ^ t[1];\n // B = (A ^ t) || R[i]\n B[2] = R[2 * i];\n B[3] = R[2 * i + 1];\n // B = AES-1(B)\n B = unpack(aes.decrypt(pack(B)));\n // A = MSB(64, B)\n A = B.subarray(0, 2);\n // R[i] = LSB(64, B)\n R[2 * i] = B[2];\n R[2 * i + 1] = B[3];\n }\n }\n if (A[0] === IV[0] && A[1] === IV[1]) {\n return pack(R);\n }\n throw new Error('Key Data Integrity failed');\n}\n\nfunction createArrayBuffer(data) {\n if (util.isString(data)) {\n const { length } = data;\n const buffer = new ArrayBuffer(length);\n const view = new Uint8Array(buffer);\n for (let j = 0; j < length; ++j) {\n view[j] = data.charCodeAt(j);\n }\n return buffer;\n }\n return new Uint8Array(data).buffer;\n}\n\nfunction unpack(data) {\n const { length } = data;\n const buffer = createArrayBuffer(data);\n const view = new DataView(buffer);\n const arr = new Uint32Array(length / 4);\n for (let i = 0; i < length / 4; ++i) {\n arr[i] = view.getUint32(4 * i);\n }\n return arr;\n}\n\nfunction pack() {\n let length = 0;\n for (let k = 0; k < arguments.length; ++k) {\n length += 4 * arguments[k].length;\n }\n const buffer = new ArrayBuffer(length);\n const view = new DataView(buffer);\n let offset = 0;\n for (let i = 0; i < arguments.length; ++i) {\n for (let j = 0; j < arguments[i].length; ++j) {\n view.setUint32(offset + 4 * j, arguments[i][j]);\n }\n offset += 4 * arguments[i].length;\n }\n return new Uint8Array(buffer);\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport util from '../util';\n\n/**\n * @fileoverview Functions to add and remove PKCS5 padding\n * @see PublicKeyEncryptedSessionKeyPacket\n * @module crypto/pkcs5\n * @private\n */\n\n/**\n * Add pkcs5 padding to a message\n * @param {Uint8Array} message - message to pad\n * @returns {Uint8Array} Padded message.\n */\nexport function encode(message) {\n const c = 8 - (message.length % 8);\n const padded = new Uint8Array(message.length + c).fill(c);\n padded.set(message);\n return padded;\n}\n\n/**\n * Remove pkcs5 padding from a message\n * @param {Uint8Array} message - message to remove padding from\n * @returns {Uint8Array} Message without padding.\n */\nexport function decode(message) {\n const len = message.length;\n if (len > 0) {\n const c = message[len - 1];\n if (c >= 1) {\n const provided = message.subarray(len - c);\n const computed = new Uint8Array(c).fill(c);\n if (util.equalsUint8Array(provided, computed)) {\n return message.subarray(0, len - c);\n }\n }\n }\n throw new Error('Invalid padding');\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview Key encryption and decryption for RFC 6637 ECDH\n * @module crypto/public_key/elliptic/ecdh\n * @private\n */\n\nimport nacl from '@openpgp/tweetnacl/nacl-fast-light';\nimport { CurveWithOID, jwkToRawPublic, rawPublicToJWK, privateToJWK, validateStandardParams } from './oid_curves';\nimport * as aesKW from '../../aes_kw';\nimport { getRandomBytes } from '../../random';\nimport hash from '../../hash';\nimport enums from '../../../enums';\nimport util from '../../../util';\nimport { b64ToUint8Array } from '../../../encoding/base64';\nimport * as pkcs5 from '../../pkcs5';\nimport { keyFromPublic, keyFromPrivate, getIndutnyCurve } from './indutnyKey';\nimport getCipher from '../../cipher/getCipher';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\n\n/**\n * Validate ECDH parameters\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {Uint8Array} Q - ECDH public point\n * @param {Uint8Array} d - ECDH secret scalar\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(oid, Q, d) {\n return validateStandardParams(enums.publicKey.ecdh, oid, Q, d);\n}\n\n// Build Param for ECDH algorithm (RFC 6637)\nfunction buildEcdhParam(public_algo, oid, kdfParams, fingerprint) {\n return util.concatUint8Array([\n oid.write(),\n new Uint8Array([public_algo]),\n kdfParams.write(),\n util.stringToUint8Array('Anonymous Sender '),\n fingerprint.subarray(0, 20)\n ]);\n}\n\n// Key Derivation Function (RFC 6637)\nasync function kdf(hashAlgo, X, length, param, stripLeading = false, stripTrailing = false) {\n // Note: X is little endian for Curve25519, big-endian for all others.\n // This is not ideal, but the RFC's are unclear\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n let i;\n if (stripLeading) {\n // Work around old go crypto bug\n for (i = 0; i < X.length && X[i] === 0; i++);\n X = X.subarray(i);\n }\n if (stripTrailing) {\n // Work around old OpenPGP.js bug\n for (i = X.length - 1; i >= 0 && X[i] === 0; i--);\n X = X.subarray(0, i + 1);\n }\n const digest = await hash.digest(hashAlgo, util.concatUint8Array([\n new Uint8Array([0, 0, 0, 1]),\n X,\n param\n ]));\n return digest.subarray(0, length);\n}\n\n/**\n * Generate ECDHE ephemeral key and secret from public key\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} Q - Recipient public key\n * @returns {Promise<{publicKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function genPublicEphemeralKey(curve, Q) {\n switch (curve.type) {\n case 'curve25519': {\n const d = getRandomBytes(32);\n const { secretKey, sharedKey } = await genPrivateEphemeralKey(curve, Q, null, d);\n let { publicKey } = nacl.box.keyPair.fromSecretKey(secretKey);\n publicKey = util.concatUint8Array([new Uint8Array([0x40]), publicKey]);\n return { publicKey, sharedKey }; // Note: sharedKey is little-endian here, unlike below\n }\n case 'web':\n if (curve.web && util.getWebCrypto()) {\n try {\n return await webPublicEphemeralKey(curve, Q);\n } catch (err) {\n util.printDebugError(err);\n }\n }\n break;\n case 'node':\n return nodePublicEphemeralKey(curve, Q);\n }\n return ellipticPublicEphemeralKey(curve, Q);\n}\n\n/**\n * Encrypt and wrap a session key\n *\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {module:type/kdf_params} kdfParams - KDF params including cipher and algorithm to use\n * @param {Uint8Array} data - Unpadded session key data\n * @param {Uint8Array} Q - Recipient public key\n * @param {Uint8Array} fingerprint - Recipient fingerprint\n * @returns {Promise<{publicKey: Uint8Array, wrappedKey: Uint8Array}>}\n * @async\n */\nexport async function encrypt(oid, kdfParams, data, Q, fingerprint) {\n const m = pkcs5.encode(data);\n\n const curve = new CurveWithOID(oid);\n const { publicKey, sharedKey } = await genPublicEphemeralKey(curve, Q);\n const param = buildEcdhParam(enums.publicKey.ecdh, oid, kdfParams, fingerprint);\n const { keySize } = getCipher(kdfParams.cipher);\n const Z = await kdf(kdfParams.hash, sharedKey, keySize, param);\n const wrappedKey = aesKW.wrap(Z, m);\n return { publicKey, wrappedKey };\n}\n\n/**\n * Generate ECDHE secret from private key and public part of ephemeral key\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} V - Public part of ephemeral key\n * @param {Uint8Array} Q - Recipient public key\n * @param {Uint8Array} d - Recipient private key\n * @returns {Promise<{secretKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function genPrivateEphemeralKey(curve, V, Q, d) {\n if (d.length !== curve.payloadSize) {\n const privateKey = new Uint8Array(curve.payloadSize);\n privateKey.set(d, curve.payloadSize - d.length);\n d = privateKey;\n }\n switch (curve.type) {\n case 'curve25519': {\n const secretKey = d.slice().reverse();\n const sharedKey = nacl.scalarMult(secretKey, V.subarray(1));\n return { secretKey, sharedKey }; // Note: sharedKey is little-endian here, unlike below\n }\n case 'web':\n if (curve.web && util.getWebCrypto()) {\n try {\n return await webPrivateEphemeralKey(curve, V, Q, d);\n } catch (err) {\n util.printDebugError(err);\n }\n }\n break;\n case 'node':\n return nodePrivateEphemeralKey(curve, V, d);\n }\n return ellipticPrivateEphemeralKey(curve, V, d);\n}\n\n/**\n * Decrypt and unwrap the value derived from session key\n *\n * @param {module:type/oid} oid - Elliptic curve object identifier\n * @param {module:type/kdf_params} kdfParams - KDF params including cipher and algorithm to use\n * @param {Uint8Array} V - Public part of ephemeral key\n * @param {Uint8Array} C - Encrypted and wrapped value derived from session key\n * @param {Uint8Array} Q - Recipient public key\n * @param {Uint8Array} d - Recipient private key\n * @param {Uint8Array} fingerprint - Recipient fingerprint\n * @returns {Promise} Value derived from session key.\n * @async\n */\nexport async function decrypt(oid, kdfParams, V, C, Q, d, fingerprint) {\n const curve = new CurveWithOID(oid);\n const { sharedKey } = await genPrivateEphemeralKey(curve, V, Q, d);\n const param = buildEcdhParam(enums.publicKey.ecdh, oid, kdfParams, fingerprint);\n const { keySize } = getCipher(kdfParams.cipher);\n let err;\n for (let i = 0; i < 3; i++) {\n try {\n // Work around old go crypto bug and old OpenPGP.js bug, respectively.\n const Z = await kdf(kdfParams.hash, sharedKey, keySize, param, i === 1, i === 2);\n return pkcs5.decode(aesKW.unwrap(Z, C));\n } catch (e) {\n err = e;\n }\n }\n throw err;\n}\n\n/**\n * Generate ECDHE secret from private key and public part of ephemeral key using webCrypto\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} V - Public part of ephemeral key\n * @param {Uint8Array} Q - Recipient public key\n * @param {Uint8Array} d - Recipient private key\n * @returns {Promise<{secretKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function webPrivateEphemeralKey(curve, V, Q, d) {\n const recipient = privateToJWK(curve.payloadSize, curve.web.web, Q, d);\n let privateKey = webCrypto.importKey(\n 'jwk',\n recipient,\n {\n name: 'ECDH',\n namedCurve: curve.web.web\n },\n true,\n ['deriveKey', 'deriveBits']\n );\n const jwk = rawPublicToJWK(curve.payloadSize, curve.web.web, V);\n let sender = webCrypto.importKey(\n 'jwk',\n jwk,\n {\n name: 'ECDH',\n namedCurve: curve.web.web\n },\n true,\n []\n );\n [privateKey, sender] = await Promise.all([privateKey, sender]);\n let S = webCrypto.deriveBits(\n {\n name: 'ECDH',\n namedCurve: curve.web.web,\n public: sender\n },\n privateKey,\n curve.web.sharedSize\n );\n let secret = webCrypto.exportKey(\n 'jwk',\n privateKey\n );\n [S, secret] = await Promise.all([S, secret]);\n const sharedKey = new Uint8Array(S);\n const secretKey = b64ToUint8Array(secret.d, true);\n return { secretKey, sharedKey };\n}\n\n/**\n * Generate ECDHE ephemeral key and secret from public key using webCrypto\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} Q - Recipient public key\n * @returns {Promise<{publicKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function webPublicEphemeralKey(curve, Q) {\n const jwk = rawPublicToJWK(curve.payloadSize, curve.web.web, Q);\n let keyPair = webCrypto.generateKey(\n {\n name: 'ECDH',\n namedCurve: curve.web.web\n },\n true,\n ['deriveKey', 'deriveBits']\n );\n let recipient = webCrypto.importKey(\n 'jwk',\n jwk,\n {\n name: 'ECDH',\n namedCurve: curve.web.web\n },\n false,\n []\n );\n [keyPair, recipient] = await Promise.all([keyPair, recipient]);\n let s = webCrypto.deriveBits(\n {\n name: 'ECDH',\n namedCurve: curve.web.web,\n public: recipient\n },\n keyPair.privateKey,\n curve.web.sharedSize\n );\n let p = webCrypto.exportKey(\n 'jwk',\n keyPair.publicKey\n );\n [s, p] = await Promise.all([s, p]);\n const sharedKey = new Uint8Array(s);\n const publicKey = new Uint8Array(jwkToRawPublic(p));\n return { publicKey, sharedKey };\n}\n\n/**\n * Generate ECDHE secret from private key and public part of ephemeral key using indutny/elliptic\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} V - Public part of ephemeral key\n * @param {Uint8Array} d - Recipient private key\n * @returns {Promise<{secretKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function ellipticPrivateEphemeralKey(curve, V, d) {\n const indutnyCurve = await getIndutnyCurve(curve.name);\n V = keyFromPublic(indutnyCurve, V);\n d = keyFromPrivate(indutnyCurve, d);\n const secretKey = new Uint8Array(d.getPrivate());\n const S = d.derive(V.getPublic());\n const len = indutnyCurve.curve.p.byteLength();\n const sharedKey = S.toArrayLike(Uint8Array, 'be', len);\n return { secretKey, sharedKey };\n}\n\n/**\n * Generate ECDHE ephemeral key and secret from public key using indutny/elliptic\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} Q - Recipient public key\n * @returns {Promise<{publicKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function ellipticPublicEphemeralKey(curve, Q) {\n const indutnyCurve = await getIndutnyCurve(curve.name);\n const v = await curve.genKeyPair();\n Q = keyFromPublic(indutnyCurve, Q);\n const V = keyFromPrivate(indutnyCurve, v.privateKey);\n const publicKey = v.publicKey;\n const S = V.derive(Q.getPublic());\n const len = indutnyCurve.curve.p.byteLength();\n const sharedKey = S.toArrayLike(Uint8Array, 'be', len);\n return { publicKey, sharedKey };\n}\n\n/**\n * Generate ECDHE secret from private key and public part of ephemeral key using nodeCrypto\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} V - Public part of ephemeral key\n * @param {Uint8Array} d - Recipient private key\n * @returns {Promise<{secretKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function nodePrivateEphemeralKey(curve, V, d) {\n const recipient = nodeCrypto.createECDH(curve.node.node);\n recipient.setPrivateKey(d);\n const sharedKey = new Uint8Array(recipient.computeSecret(V));\n const secretKey = new Uint8Array(recipient.getPrivateKey());\n return { secretKey, sharedKey };\n}\n\n/**\n * Generate ECDHE ephemeral key and secret from public key using nodeCrypto\n *\n * @param {CurveWithOID} curve - Elliptic curve object\n * @param {Uint8Array} Q - Recipient public key\n * @returns {Promise<{publicKey: Uint8Array, sharedKey: Uint8Array}>}\n * @async\n */\nasync function nodePublicEphemeralKey(curve, Q) {\n const sender = nodeCrypto.createECDH(curve.node.node);\n sender.generateKeys();\n const sharedKey = new Uint8Array(sender.computeSecret(Q));\n const publicKey = new Uint8Array(sender.getPublicKey());\n return { publicKey, sharedKey };\n}\n","/**\n * @fileoverview This module implements HKDF using either the WebCrypto API or Node.js' crypto API.\n * @module crypto/hkdf\n * @private\n */\n\nimport enums from '../enums';\nimport util from '../util';\n\nconst webCrypto = util.getWebCrypto();\nconst nodeCrypto = util.getNodeCrypto();\nconst nodeSubtleCrypto = nodeCrypto && nodeCrypto.webcrypto && nodeCrypto.webcrypto.subtle;\n\nexport default async function HKDF(hashAlgo, inputKey, salt, info, outLen) {\n const hash = enums.read(enums.webHash, hashAlgo);\n if (!hash) throw new Error('Hash algo not supported with HKDF');\n\n if (webCrypto || nodeSubtleCrypto) {\n const crypto = webCrypto || nodeSubtleCrypto;\n const importedKey = await crypto.importKey('raw', inputKey, 'HKDF', false, ['deriveBits']);\n const bits = await crypto.deriveBits({ name: 'HKDF', hash, salt, info }, importedKey, outLen * 8);\n return new Uint8Array(bits);\n }\n\n if (nodeCrypto) {\n const hashAlgoName = enums.read(enums.hash, hashAlgo);\n // Node-only HKDF implementation based on https://www.rfc-editor.org/rfc/rfc5869\n\n const computeHMAC = (hmacKey, hmacMessage) => nodeCrypto.createHmac(hashAlgoName, hmacKey).update(hmacMessage).digest();\n // Step 1: Extract\n // PRK = HMAC-Hash(salt, IKM)\n const pseudoRandomKey = computeHMAC(salt, inputKey);\n\n const hashLen = pseudoRandomKey.length;\n\n // Step 2: Expand\n // HKDF-Expand(PRK, info, L) -> OKM\n const n = Math.ceil(outLen / hashLen);\n const outputKeyingMaterial = new Uint8Array(n * hashLen);\n\n // HMAC input buffer updated at each iteration\n const roundInput = new Uint8Array(hashLen + info.length + 1);\n // T_i and last byte are updated at each iteration, but `info` remains constant\n roundInput.set(info, hashLen);\n\n for (let i = 0; i < n; i++) {\n // T(0) = empty string (zero length)\n // T(i) = HMAC-Hash(PRK, T(i-1) | info | i)\n roundInput[roundInput.length - 1] = i + 1;\n // t = T(i+1)\n const t = computeHMAC(pseudoRandomKey, i > 0 ? roundInput : roundInput.subarray(hashLen));\n roundInput.set(t, 0);\n\n outputKeyingMaterial.set(t, i * hashLen);\n }\n\n return outputKeyingMaterial.subarray(0, outLen);\n }\n\n throw new Error('No HKDF implementation available');\n}\n","/**\n * @fileoverview Key encryption and decryption for RFC 6637 ECDH\n * @module crypto/public_key/elliptic/ecdh\n * @private\n */\n\nimport nacl from '@openpgp/tweetnacl/nacl-fast-light';\nimport * as aesKW from '../../aes_kw';\nimport { getRandomBytes } from '../../random';\n\nimport enums from '../../../enums';\nimport util from '../../../util';\nimport getCipher from '../../cipher/getCipher';\nimport computeHKDF from '../../hkdf';\n\nconst HKDF_INFO = {\n x25519: util.encodeUTF8('OpenPGP X25519')\n};\n\n/**\n * Generate ECDH key for Montgomery curves\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @returns {Promise<{ A: Uint8Array, k: Uint8Array }>}\n */\nexport async function generate(algo) {\n switch (algo) {\n case enums.publicKey.x25519: {\n // k stays in little-endian, unlike legacy ECDH over curve25519\n const k = getRandomBytes(32);\n const { publicKey: A } = nacl.box.keyPair.fromSecretKey(k);\n return { A, k };\n }\n default:\n throw new Error('Unsupported ECDH algorithm');\n }\n}\n\n/**\n* Validate ECDH parameters\n* @param {module:enums.publicKey} algo - Algorithm identifier\n* @param {Uint8Array} A - ECDH public point\n* @param {Uint8Array} k - ECDH secret scalar\n* @returns {Promise} Whether params are valid.\n* @async\n*/\nexport async function validateParams(algo, A, k) {\n switch (algo) {\n case enums.publicKey.x25519: {\n /**\n * Derive public point A' from private key\n * and expect A == A'\n */\n const { publicKey } = nacl.box.keyPair.fromSecretKey(k);\n return util.equalsUint8Array(A, publicKey);\n }\n\n default:\n return false;\n }\n}\n\n/**\n * Wrap and encrypt a session key\n *\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @param {Uint8Array} data - session key data to be encrypted\n * @param {Uint8Array} recipientA - Recipient public key (K_B)\n * @returns {Promise<{\n * ephemeralPublicKey: Uint8Array,\n * wrappedKey: Uint8Array\n * }>} ephemeral public key (K_A) and encrypted key\n * @async\n */\nexport async function encrypt(algo, data, recipientA) {\n switch (algo) {\n case enums.publicKey.x25519: {\n const ephemeralSecretKey = getRandomBytes(32);\n const sharedSecret = nacl.scalarMult(ephemeralSecretKey, recipientA);\n const { publicKey: ephemeralPublicKey } = nacl.box.keyPair.fromSecretKey(ephemeralSecretKey);\n const hkdfInput = util.concatUint8Array([\n ephemeralPublicKey,\n recipientA,\n sharedSecret\n ]);\n const { keySize } = getCipher(enums.symmetric.aes128);\n const encryptionKey = await computeHKDF(enums.hash.sha256, hkdfInput, new Uint8Array(), HKDF_INFO.x25519, keySize);\n const wrappedKey = aesKW.wrap(encryptionKey, data);\n return { ephemeralPublicKey, wrappedKey };\n }\n\n default:\n throw new Error('Unsupported ECDH algorithm');\n }\n}\n\n/**\n * Decrypt and unwrap the session key\n *\n * @param {module:enums.publicKey} algo - Algorithm identifier\n * @param {Uint8Array} ephemeralPublicKey - (K_A)\n * @param {Uint8Array} wrappedKey,\n * @param {Uint8Array} A - Recipient public key (K_b), needed for KDF\n * @param {Uint8Array} k - Recipient secret key (b)\n * @returns {Promise} decrypted session key data\n * @async\n */\nexport async function decrypt(algo, ephemeralPublicKey, wrappedKey, A, k) {\n switch (algo) {\n case enums.publicKey.x25519: {\n const sharedSecret = nacl.scalarMult(k, ephemeralPublicKey);\n const hkdfInput = util.concatUint8Array([\n ephemeralPublicKey,\n A,\n sharedSecret\n ]);\n const { keySize } = getCipher(enums.symmetric.aes128);\n const encryptionKey = await computeHKDF(enums.hash.sha256, hkdfInput, new Uint8Array(), HKDF_INFO.x25519, keySize);\n return aesKW.unwrap(encryptionKey, wrappedKey);\n }\n default:\n throw new Error('Unsupported ECDH algorithm');\n }\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * @fileoverview A Digital signature algorithm implementation\n * @module crypto/public_key/dsa\n * @private\n */\nimport { getRandomBigInteger } from '../random';\nimport util from '../../util';\nimport { isProbablePrime } from './prime';\n\n/*\n TODO regarding the hash function, read:\n https://tools.ietf.org/html/rfc4880#section-13.6\n https://tools.ietf.org/html/rfc4880#section-14\n*/\n\n/**\n * DSA Sign function\n * @param {Integer} hashAlgo\n * @param {Uint8Array} hashed\n * @param {Uint8Array} g\n * @param {Uint8Array} p\n * @param {Uint8Array} q\n * @param {Uint8Array} x\n * @returns {Promise<{ r: Uint8Array, s: Uint8Array }>}\n * @async\n */\nexport async function sign(hashAlgo, hashed, g, p, q, x) {\n const BigInteger = await util.getBigInteger();\n const one = new BigInteger(1);\n p = new BigInteger(p);\n q = new BigInteger(q);\n g = new BigInteger(g);\n x = new BigInteger(x);\n\n let k;\n let r;\n let s;\n let t;\n g = g.mod(p);\n x = x.mod(q);\n // If the output size of the chosen hash is larger than the number of\n // bits of q, the hash result is truncated to fit by taking the number\n // of leftmost bits equal to the number of bits of q. This (possibly\n // truncated) hash function result is treated as a number and used\n // directly in the DSA signature algorithm.\n const h = new BigInteger(hashed.subarray(0, q.byteLength())).mod(q);\n // FIPS-186-4, section 4.6:\n // The values of r and s shall be checked to determine if r = 0 or s = 0.\n // If either r = 0 or s = 0, a new value of k shall be generated, and the\n // signature shall be recalculated. It is extremely unlikely that r = 0\n // or s = 0 if signatures are generated properly.\n while (true) {\n // See Appendix B here: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf\n k = await getRandomBigInteger(one, q); // returns in [1, q-1]\n r = g.modExp(k, p).imod(q); // (g**k mod p) mod q\n if (r.isZero()) {\n continue;\n }\n const xr = x.mul(r).imod(q);\n t = h.add(xr).imod(q); // H(m) + x*r mod q\n s = k.modInv(q).imul(t).imod(q); // k**-1 * (H(m) + x*r) mod q\n if (s.isZero()) {\n continue;\n }\n break;\n }\n return {\n r: r.toUint8Array('be', q.byteLength()),\n s: s.toUint8Array('be', q.byteLength())\n };\n}\n\n/**\n * DSA Verify function\n * @param {Integer} hashAlgo\n * @param {Uint8Array} r\n * @param {Uint8Array} s\n * @param {Uint8Array} hashed\n * @param {Uint8Array} g\n * @param {Uint8Array} p\n * @param {Uint8Array} q\n * @param {Uint8Array} y\n * @returns {boolean}\n * @async\n */\nexport async function verify(hashAlgo, r, s, hashed, g, p, q, y) {\n const BigInteger = await util.getBigInteger();\n const zero = new BigInteger(0);\n r = new BigInteger(r);\n s = new BigInteger(s);\n\n p = new BigInteger(p);\n q = new BigInteger(q);\n g = new BigInteger(g);\n y = new BigInteger(y);\n\n if (r.lte(zero) || r.gte(q) ||\n s.lte(zero) || s.gte(q)) {\n util.printDebug('invalid DSA Signature');\n return false;\n }\n const h = new BigInteger(hashed.subarray(0, q.byteLength())).imod(q);\n const w = s.modInv(q); // s**-1 mod q\n if (w.isZero()) {\n util.printDebug('invalid DSA Signature');\n return false;\n }\n\n g = g.mod(p);\n y = y.mod(p);\n const u1 = h.mul(w).imod(q); // H(m) * w mod q\n const u2 = r.mul(w).imod(q); // r * w mod q\n const t1 = g.modExp(u1, p); // g**u1 mod p\n const t2 = y.modExp(u2, p); // y**u2 mod p\n const v = t1.mul(t2).imod(p).imod(q); // (g**u1 * y**u2 mod p) mod q\n return v.equal(r);\n}\n\n/**\n * Validate DSA parameters\n * @param {Uint8Array} p - DSA prime\n * @param {Uint8Array} q - DSA group order\n * @param {Uint8Array} g - DSA sub-group generator\n * @param {Uint8Array} y - DSA public key\n * @param {Uint8Array} x - DSA private key\n * @returns {Promise} Whether params are valid.\n * @async\n */\nexport async function validateParams(p, q, g, y, x) {\n const BigInteger = await util.getBigInteger();\n p = new BigInteger(p);\n q = new BigInteger(q);\n g = new BigInteger(g);\n y = new BigInteger(y);\n const one = new BigInteger(1);\n // Check that 1 < g < p\n if (g.lte(one) || g.gte(p)) {\n return false;\n }\n\n /**\n * Check that subgroup order q divides p-1\n */\n if (!p.dec().mod(q).isZero()) {\n return false;\n }\n\n /**\n * g has order q\n * Check that g ** q = 1 mod p\n */\n if (!g.modExp(q, p).isOne()) {\n return false;\n }\n\n /**\n * Check q is large and probably prime (we mainly want to avoid small factors)\n */\n const qSize = new BigInteger(q.bitLength());\n const n150 = new BigInteger(150);\n if (qSize.lt(n150) || !(await isProbablePrime(q, null, 32))) {\n return false;\n }\n\n /**\n * Re-derive public key y' = g ** x mod p\n * Expect y == y'\n *\n * Blinded exponentiation computes g**{rq + x} to compare to y\n */\n x = new BigInteger(x);\n const two = new BigInteger(2);\n const r = await getRandomBigInteger(two.leftShift(qSize.dec()), two.leftShift(qSize)); // draw r of same size as q\n const rqx = q.mul(r).add(x);\n if (!y.equal(g.modExp(rqx, p))) {\n return false;\n }\n\n return true;\n}\n","/**\n * @fileoverview Asymmetric cryptography functions\n * @module crypto/public_key\n * @private\n */\n\nimport nacl from '@openpgp/tweetnacl/nacl-fast-light';\nimport * as rsa from './rsa';\nimport * as elgamal from './elgamal';\nimport * as elliptic from './elliptic';\nimport * as dsa from './dsa';\n\nexport default {\n /** @see module:crypto/public_key/rsa */\n rsa: rsa,\n /** @see module:crypto/public_key/elgamal */\n elgamal: elgamal,\n /** @see module:crypto/public_key/elliptic */\n elliptic: elliptic,\n /** @see module:crypto/public_key/dsa */\n dsa: dsa,\n /** @see tweetnacl */\n nacl: nacl\n};\n","/**\n * @fileoverview Provides functions for asymmetric signing and signature verification\n * @module crypto/signature\n * @private\n */\n\nimport publicKey from './public_key';\nimport enums from '../enums';\nimport util from '../util';\nimport { UnsupportedError } from '../packet/packet';\n\n/**\n * Parse signature in binary form to get the parameters.\n * The returned values are only padded for EdDSA, since in the other cases their expected length\n * depends on the key params, hence we delegate the padding to the signature verification function.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * See {@link https://tools.ietf.org/html/rfc4880#section-5.2.2|RFC 4880 5.2.2.}\n * @param {module:enums.publicKey} algo - Public key algorithm\n * @param {Uint8Array} signature - Data for which the signature was created\n * @returns {Promise} True if signature is valid.\n * @async\n */\nexport function parseSignatureParams(algo, signature) {\n let read = 0;\n switch (algo) {\n // Algorithm-Specific Fields for RSA signatures:\n // - MPI of RSA signature value m**d mod n.\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaSign: {\n const s = util.readMPI(signature.subarray(read));\n // The signature needs to be the same length as the public key modulo n.\n // We pad s on signature verification, where we have access to n.\n return { s };\n }\n // Algorithm-Specific Fields for DSA or ECDSA signatures:\n // - MPI of DSA or ECDSA value r.\n // - MPI of DSA or ECDSA value s.\n case enums.publicKey.dsa:\n case enums.publicKey.ecdsa:\n {\n const r = util.readMPI(signature.subarray(read)); read += r.length + 2;\n const s = util.readMPI(signature.subarray(read));\n return { r, s };\n }\n // Algorithm-Specific Fields for legacy EdDSA signatures:\n // - MPI of an EC point r.\n // - EdDSA value s, in MPI, in the little endian representation\n case enums.publicKey.eddsaLegacy: {\n // When parsing little-endian MPI data, we always need to left-pad it, as done with big-endian values:\n // https://www.ietf.org/archive/id/draft-ietf-openpgp-rfc4880bis-10.html#section-3.2-9\n let r = util.readMPI(signature.subarray(read)); read += r.length + 2;\n r = util.leftPad(r, 32);\n let s = util.readMPI(signature.subarray(read));\n s = util.leftPad(s, 32);\n return { r, s };\n }\n // Algorithm-Specific Fields for Ed25519 signatures:\n // - 64 octets of the native signature\n case enums.publicKey.ed25519: {\n const RS = signature.subarray(read, read + 64); read += RS.length;\n return { RS };\n }\n default:\n throw new UnsupportedError('Unknown signature algorithm.');\n }\n}\n\n/**\n * Verifies the signature provided for data using specified algorithms and public key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * and {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4}\n * for public key and hash algorithms.\n * @param {module:enums.publicKey} algo - Public key algorithm\n * @param {module:enums.hash} hashAlgo - Hash algorithm\n * @param {Object} signature - Named algorithm-specific signature parameters\n * @param {Object} publicParams - Algorithm-specific public key parameters\n * @param {Uint8Array} data - Data for which the signature was created\n * @param {Uint8Array} hashed - The hashed data\n * @returns {Promise} True if signature is valid.\n * @async\n */\nexport async function verify(algo, hashAlgo, signature, publicParams, data, hashed) {\n switch (algo) {\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaSign: {\n const { n, e } = publicParams;\n const s = util.leftPad(signature.s, n.length); // padding needed for webcrypto and node crypto\n return publicKey.rsa.verify(hashAlgo, data, s, n, e, hashed);\n }\n case enums.publicKey.dsa: {\n const { g, p, q, y } = publicParams;\n const { r, s } = signature; // no need to pad, since we always handle them as BigIntegers\n return publicKey.dsa.verify(hashAlgo, r, s, hashed, g, p, q, y);\n }\n case enums.publicKey.ecdsa: {\n const { oid, Q } = publicParams;\n const curveSize = new publicKey.elliptic.CurveWithOID(oid).payloadSize;\n // padding needed for webcrypto\n const r = util.leftPad(signature.r, curveSize);\n const s = util.leftPad(signature.s, curveSize);\n return publicKey.elliptic.ecdsa.verify(oid, hashAlgo, { r, s }, data, Q, hashed);\n }\n case enums.publicKey.eddsaLegacy: {\n const { oid, Q } = publicParams;\n // signature already padded on parsing\n return publicKey.elliptic.eddsaLegacy.verify(oid, hashAlgo, signature, data, Q, hashed);\n }\n case enums.publicKey.ed25519: {\n const { A } = publicParams;\n return publicKey.elliptic.eddsa.verify(algo, hashAlgo, signature, data, A, hashed);\n }\n default:\n throw new Error('Unknown signature algorithm.');\n }\n}\n\n/**\n * Creates a signature on data using specified algorithms and private key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1}\n * and {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC 4880 9.4}\n * for public key and hash algorithms.\n * @param {module:enums.publicKey} algo - Public key algorithm\n * @param {module:enums.hash} hashAlgo - Hash algorithm\n * @param {Object} publicKeyParams - Algorithm-specific public and private key parameters\n * @param {Object} privateKeyParams - Algorithm-specific public and private key parameters\n * @param {Uint8Array} data - Data to be signed\n * @param {Uint8Array} hashed - The hashed data\n * @returns {Promise} Signature Object containing named signature parameters.\n * @async\n */\nexport async function sign(algo, hashAlgo, publicKeyParams, privateKeyParams, data, hashed) {\n if (!publicKeyParams || !privateKeyParams) {\n throw new Error('Missing key parameters');\n }\n switch (algo) {\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaSign: {\n const { n, e } = publicKeyParams;\n const { d, p, q, u } = privateKeyParams;\n const s = await publicKey.rsa.sign(hashAlgo, data, n, e, d, p, q, u, hashed);\n return { s };\n }\n case enums.publicKey.dsa: {\n const { g, p, q } = publicKeyParams;\n const { x } = privateKeyParams;\n return publicKey.dsa.sign(hashAlgo, hashed, g, p, q, x);\n }\n case enums.publicKey.elgamal: {\n throw new Error('Signing with Elgamal is not defined in the OpenPGP standard.');\n }\n case enums.publicKey.ecdsa: {\n const { oid, Q } = publicKeyParams;\n const { d } = privateKeyParams;\n return publicKey.elliptic.ecdsa.sign(oid, hashAlgo, data, Q, d, hashed);\n }\n case enums.publicKey.eddsaLegacy: {\n const { oid, Q } = publicKeyParams;\n const { seed } = privateKeyParams;\n return publicKey.elliptic.eddsaLegacy.sign(oid, hashAlgo, data, Q, seed, hashed);\n }\n case enums.publicKey.ed25519: {\n const { A } = publicKeyParams;\n const { seed } = privateKeyParams;\n return publicKey.elliptic.eddsa.sign(algo, hashAlgo, data, A, seed, hashed);\n }\n default:\n throw new Error('Unknown signature algorithm.');\n }\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Encoded symmetric key for ECDH (incl. legacy x25519)\n *\n * @module type/ecdh_symkey\n * @private\n */\n\nimport util from '../util';\n\nclass ECDHSymmetricKey {\n constructor(data) {\n if (data) {\n this.data = data;\n }\n }\n\n /**\n * Read an ECDHSymmetricKey from an Uint8Array:\n * - 1 octect for the length `l`\n * - `l` octects of encoded session key data\n * @param {Uint8Array} bytes\n * @returns {Number} Number of read bytes.\n */\n read(bytes) {\n if (bytes.length >= 1) {\n const length = bytes[0];\n if (bytes.length >= 1 + length) {\n this.data = bytes.subarray(1, 1 + length);\n return 1 + this.data.length;\n }\n }\n throw new Error('Invalid symmetric key');\n }\n\n /**\n * Write an ECDHSymmetricKey as an Uint8Array\n * @returns {Uint8Array} Serialised data\n */\n write() {\n return util.concatUint8Array([new Uint8Array([this.data.length]), this.data]);\n }\n}\n\nexport default ECDHSymmetricKey;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { UnsupportedError } from '../packet/packet';\n\n/**\n * Implementation of type KDF parameters\n *\n * {@link https://tools.ietf.org/html/rfc6637#section-7|RFC 6637 7}:\n * A key derivation function (KDF) is necessary to implement the EC\n * encryption. The Concatenation Key Derivation Function (Approved\n * Alternative 1) [NIST-SP800-56A] with the KDF hash function that is\n * SHA2-256 [FIPS-180-3] or stronger is REQUIRED.\n * @module type/kdf_params\n * @private\n */\n\nclass KDFParams {\n /**\n * @param {enums.hash} hash - Hash algorithm\n * @param {enums.symmetric} cipher - Symmetric algorithm\n */\n constructor(data) {\n if (data) {\n const { hash, cipher } = data;\n this.hash = hash;\n this.cipher = cipher;\n } else {\n this.hash = null;\n this.cipher = null;\n }\n }\n\n /**\n * Read KDFParams from an Uint8Array\n * @param {Uint8Array} input - Where to read the KDFParams from\n * @returns {Number} Number of read bytes.\n */\n read(input) {\n if (input.length < 4 || input[0] !== 3 || input[1] !== 1) {\n throw new UnsupportedError('Cannot read KDFParams');\n }\n this.hash = input[2];\n this.cipher = input[3];\n return 4;\n }\n\n /**\n * Write KDFParams to an Uint8Array\n * @returns {Uint8Array} Array with the KDFParams value\n */\n write() {\n return new Uint8Array([3, 1, this.hash, this.cipher]);\n }\n}\n\nexport default KDFParams;\n","/**\n * Encoded symmetric key for x25519 and x448\n * The payload format varies for v3 and v6 PKESK:\n * the former includes an algorithm byte preceeding the encrypted session key.\n *\n * @module type/x25519x448_symkey\n */\n\nimport util from '../util';\n\nclass ECDHXSymmetricKey {\n static fromObject({ wrappedKey, algorithm }) {\n const instance = new ECDHXSymmetricKey();\n instance.wrappedKey = wrappedKey;\n instance.algorithm = algorithm;\n return instance;\n }\n\n /**\n * - 1 octect for the length `l`\n * - `l` octects of encoded session key data (with optional leading algorithm byte)\n * @param {Uint8Array} bytes\n * @returns {Number} Number of read bytes.\n */\n read(bytes) {\n let read = 0;\n let followLength = bytes[read++];\n this.algorithm = followLength % 2 ? bytes[read++] : null; // session key size is always even\n followLength -= followLength % 2;\n this.wrappedKey = bytes.subarray(read, read + followLength); read += followLength;\n }\n\n /**\n * Write an MontgomerySymmetricKey as an Uint8Array\n * @returns {Uint8Array} Serialised data\n */\n write() {\n return util.concatUint8Array([\n this.algorithm ?\n new Uint8Array([this.wrappedKey.length + 1, this.algorithm]) :\n new Uint8Array([this.wrappedKey.length]),\n this.wrappedKey\n ]);\n }\n}\n\nexport default ECDHXSymmetricKey;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n// The GPG4Browsers crypto interface\n\n/**\n * @fileoverview Provides functions for asymmetric encryption and decryption as\n * well as key generation and parameter handling for all public-key cryptosystems.\n * @module crypto/crypto\n * @private\n */\n\nimport publicKey from './public_key';\nimport mode from './mode';\nimport { getRandomBytes } from './random';\nimport getCipher from './cipher/getCipher';\nimport ECDHSymkey from '../type/ecdh_symkey';\nimport KDFParams from '../type/kdf_params';\nimport enums from '../enums';\nimport util from '../util';\nimport OID from '../type/oid';\nimport { CurveWithOID } from './public_key/elliptic/oid_curves';\nimport { UnsupportedError } from '../packet/packet';\nimport ECDHXSymmetricKey from '../type/ecdh_x_symkey';\n\n/**\n * Encrypts data using specified algorithm and public key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC 4880 9.1} for public key algorithms.\n * @param {module:enums.publicKey} keyAlgo - Public key algorithm\n * @param {module:enums.symmetric} symmetricAlgo - Cipher algorithm\n * @param {Object} publicParams - Algorithm-specific public key parameters\n * @param {Uint8Array} data - Session key data to be encrypted\n * @param {Uint8Array} fingerprint - Recipient fingerprint\n * @returns {Promise} Encrypted session key parameters.\n * @async\n */\nexport async function publicKeyEncrypt(keyAlgo, symmetricAlgo, publicParams, data, fingerprint) {\n switch (keyAlgo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign: {\n const { n, e } = publicParams;\n const c = await publicKey.rsa.encrypt(data, n, e);\n return { c };\n }\n case enums.publicKey.elgamal: {\n const { p, g, y } = publicParams;\n return publicKey.elgamal.encrypt(data, p, g, y);\n }\n case enums.publicKey.ecdh: {\n const { oid, Q, kdfParams } = publicParams;\n const { publicKey: V, wrappedKey: C } = await publicKey.elliptic.ecdh.encrypt(\n oid, kdfParams, data, Q, fingerprint);\n return { V, C: new ECDHSymkey(C) };\n }\n case enums.publicKey.x25519: {\n if (!util.isAES(symmetricAlgo)) {\n // see https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/276\n throw new Error('X25519 keys can only encrypt AES session keys');\n }\n const { A } = publicParams;\n const { ephemeralPublicKey, wrappedKey } = await publicKey.elliptic.ecdhX.encrypt(\n keyAlgo, data, A);\n const C = ECDHXSymmetricKey.fromObject({ algorithm: symmetricAlgo, wrappedKey });\n return { ephemeralPublicKey, C };\n }\n default:\n return [];\n }\n}\n\n/**\n * Decrypts data using specified algorithm and private key parameters.\n * See {@link https://tools.ietf.org/html/rfc4880#section-5.5.3|RFC 4880 5.5.3}\n * @param {module:enums.publicKey} algo - Public key algorithm\n * @param {Object} publicKeyParams - Algorithm-specific public key parameters\n * @param {Object} privateKeyParams - Algorithm-specific private key parameters\n * @param {Object} sessionKeyParams - Encrypted session key parameters\n * @param {Uint8Array} fingerprint - Recipient fingerprint\n * @param {Uint8Array} [randomPayload] - Data to return on decryption error, instead of throwing\n * (needed for constant-time processing in RSA and ElGamal)\n * @returns {Promise} Decrypted data.\n * @throws {Error} on sensitive decryption error, unless `randomPayload` is given\n * @async\n */\nexport async function publicKeyDecrypt(algo, publicKeyParams, privateKeyParams, sessionKeyParams, fingerprint, randomPayload) {\n switch (algo) {\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaEncrypt: {\n const { c } = sessionKeyParams;\n const { n, e } = publicKeyParams;\n const { d, p, q, u } = privateKeyParams;\n return publicKey.rsa.decrypt(c, n, e, d, p, q, u, randomPayload);\n }\n case enums.publicKey.elgamal: {\n const { c1, c2 } = sessionKeyParams;\n const p = publicKeyParams.p;\n const x = privateKeyParams.x;\n return publicKey.elgamal.decrypt(c1, c2, p, x, randomPayload);\n }\n case enums.publicKey.ecdh: {\n const { oid, Q, kdfParams } = publicKeyParams;\n const { d } = privateKeyParams;\n const { V, C } = sessionKeyParams;\n return publicKey.elliptic.ecdh.decrypt(\n oid, kdfParams, V, C.data, Q, d, fingerprint);\n }\n case enums.publicKey.x25519: {\n const { A } = publicKeyParams;\n const { k } = privateKeyParams;\n const { ephemeralPublicKey, C } = sessionKeyParams;\n if (!util.isAES(C.algorithm)) {\n throw new Error('AES session key expected');\n }\n return publicKey.elliptic.ecdhX.decrypt(\n algo, ephemeralPublicKey, C.wrappedKey, A, k);\n }\n default:\n throw new Error('Unknown public key encryption algorithm.');\n }\n}\n\n/**\n * Parse public key material in binary form to get the key parameters\n * @param {module:enums.publicKey} algo - The key algorithm\n * @param {Uint8Array} bytes - The key material to parse\n * @returns {{ read: Number, publicParams: Object }} Number of read bytes plus key parameters referenced by name.\n */\nexport function parsePublicKeyParams(algo, bytes) {\n let read = 0;\n switch (algo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaSign: {\n const n = util.readMPI(bytes.subarray(read)); read += n.length + 2;\n const e = util.readMPI(bytes.subarray(read)); read += e.length + 2;\n return { read, publicParams: { n, e } };\n }\n case enums.publicKey.dsa: {\n const p = util.readMPI(bytes.subarray(read)); read += p.length + 2;\n const q = util.readMPI(bytes.subarray(read)); read += q.length + 2;\n const g = util.readMPI(bytes.subarray(read)); read += g.length + 2;\n const y = util.readMPI(bytes.subarray(read)); read += y.length + 2;\n return { read, publicParams: { p, q, g, y } };\n }\n case enums.publicKey.elgamal: {\n const p = util.readMPI(bytes.subarray(read)); read += p.length + 2;\n const g = util.readMPI(bytes.subarray(read)); read += g.length + 2;\n const y = util.readMPI(bytes.subarray(read)); read += y.length + 2;\n return { read, publicParams: { p, g, y } };\n }\n case enums.publicKey.ecdsa: {\n const oid = new OID(); read += oid.read(bytes);\n checkSupportedCurve(oid);\n const Q = util.readMPI(bytes.subarray(read)); read += Q.length + 2;\n return { read: read, publicParams: { oid, Q } };\n }\n case enums.publicKey.eddsaLegacy: {\n const oid = new OID(); read += oid.read(bytes);\n checkSupportedCurve(oid);\n let Q = util.readMPI(bytes.subarray(read)); read += Q.length + 2;\n Q = util.leftPad(Q, 33);\n return { read: read, publicParams: { oid, Q } };\n }\n case enums.publicKey.ecdh: {\n const oid = new OID(); read += oid.read(bytes);\n checkSupportedCurve(oid);\n const Q = util.readMPI(bytes.subarray(read)); read += Q.length + 2;\n const kdfParams = new KDFParams(); read += kdfParams.read(bytes.subarray(read));\n return { read: read, publicParams: { oid, Q, kdfParams } };\n }\n case enums.publicKey.ed25519:\n case enums.publicKey.x25519: {\n const A = bytes.subarray(read, read + 32); read += A.length;\n return { read, publicParams: { A } };\n }\n default:\n throw new UnsupportedError('Unknown public key encryption algorithm.');\n }\n}\n\n/**\n * Parse private key material in binary form to get the key parameters\n * @param {module:enums.publicKey} algo - The key algorithm\n * @param {Uint8Array} bytes - The key material to parse\n * @param {Object} publicParams - (ECC only) public params, needed to format some private params\n * @returns {{ read: Number, privateParams: Object }} Number of read bytes plus the key parameters referenced by name.\n */\nexport function parsePrivateKeyParams(algo, bytes, publicParams) {\n let read = 0;\n switch (algo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaSign: {\n const d = util.readMPI(bytes.subarray(read)); read += d.length + 2;\n const p = util.readMPI(bytes.subarray(read)); read += p.length + 2;\n const q = util.readMPI(bytes.subarray(read)); read += q.length + 2;\n const u = util.readMPI(bytes.subarray(read)); read += u.length + 2;\n return { read, privateParams: { d, p, q, u } };\n }\n case enums.publicKey.dsa:\n case enums.publicKey.elgamal: {\n const x = util.readMPI(bytes.subarray(read)); read += x.length + 2;\n return { read, privateParams: { x } };\n }\n case enums.publicKey.ecdsa:\n case enums.publicKey.ecdh: {\n const curve = new CurveWithOID(publicParams.oid);\n let d = util.readMPI(bytes.subarray(read)); read += d.length + 2;\n d = util.leftPad(d, curve.payloadSize);\n return { read, privateParams: { d } };\n }\n case enums.publicKey.eddsaLegacy: {\n const curve = new CurveWithOID(publicParams.oid);\n let seed = util.readMPI(bytes.subarray(read)); read += seed.length + 2;\n seed = util.leftPad(seed, curve.payloadSize);\n return { read, privateParams: { seed } };\n }\n case enums.publicKey.ed25519: {\n const seed = bytes.subarray(read, read + 32); read += seed.length;\n return { read, privateParams: { seed } };\n }\n case enums.publicKey.x25519: {\n const k = bytes.subarray(read, read + 32); read += k.length;\n return { read, privateParams: { k } };\n }\n default:\n throw new UnsupportedError('Unknown public key encryption algorithm.');\n }\n}\n\n/** Returns the types comprising the encrypted session key of an algorithm\n * @param {module:enums.publicKey} algo - The key algorithm\n * @param {Uint8Array} bytes - The key material to parse\n * @returns {Object} The session key parameters referenced by name.\n */\nexport function parseEncSessionKeyParams(algo, bytes) {\n let read = 0;\n switch (algo) {\n // Algorithm-Specific Fields for RSA encrypted session keys:\n // - MPI of RSA encrypted value m**e mod n.\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign: {\n const c = util.readMPI(bytes.subarray(read));\n return { c };\n }\n\n // Algorithm-Specific Fields for Elgamal encrypted session keys:\n // - MPI of Elgamal value g**k mod p\n // - MPI of Elgamal value m * y**k mod p\n case enums.publicKey.elgamal: {\n const c1 = util.readMPI(bytes.subarray(read)); read += c1.length + 2;\n const c2 = util.readMPI(bytes.subarray(read));\n return { c1, c2 };\n }\n // Algorithm-Specific Fields for ECDH encrypted session keys:\n // - MPI containing the ephemeral key used to establish the shared secret\n // - ECDH Symmetric Key\n case enums.publicKey.ecdh: {\n const V = util.readMPI(bytes.subarray(read)); read += V.length + 2;\n const C = new ECDHSymkey(); C.read(bytes.subarray(read));\n return { V, C };\n }\n // Algorithm-Specific Fields for X25519 encrypted session keys:\n // - 32 octets representing an ephemeral X25519 public key.\n // - A one-octet size of the following fields.\n // - The one-octet algorithm identifier, if it was passed (in the case of a v3 PKESK packet).\n // - The encrypted session key.\n case enums.publicKey.x25519: {\n const ephemeralPublicKey = bytes.subarray(read, read + 32); read += ephemeralPublicKey.length;\n const C = new ECDHXSymmetricKey(); C.read(bytes.subarray(read));\n return { ephemeralPublicKey, C };\n }\n default:\n throw new UnsupportedError('Unknown public key encryption algorithm.');\n }\n}\n\n/**\n * Convert params to MPI and serializes them in the proper order\n * @param {module:enums.publicKey} algo - The public key algorithm\n * @param {Object} params - The key parameters indexed by name\n * @returns {Uint8Array} The array containing the MPIs.\n */\nexport function serializeParams(algo, params) {\n // Some algorithms do not rely on MPIs to store the binary params\n const algosWithNativeRepresentation = new Set([enums.publicKey.ed25519, enums.publicKey.x25519]);\n const orderedParams = Object.keys(params).map(name => {\n const param = params[name];\n if (!util.isUint8Array(param)) return param.write();\n return algosWithNativeRepresentation.has(algo) ? param : util.uint8ArrayToMPI(param);\n });\n return util.concatUint8Array(orderedParams);\n}\n\n/**\n * Generate algorithm-specific key parameters\n * @param {module:enums.publicKey} algo - The public key algorithm\n * @param {Integer} bits - Bit length for RSA keys\n * @param {module:type/oid} oid - Object identifier for ECC keys\n * @returns {Promise<{ publicParams: {Object}, privateParams: {Object} }>} The parameters referenced by name.\n * @async\n */\nexport function generateParams(algo, bits, oid) {\n switch (algo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaSign: {\n return publicKey.rsa.generate(bits, 65537).then(({ n, e, d, p, q, u }) => ({\n privateParams: { d, p, q, u },\n publicParams: { n, e }\n }));\n }\n case enums.publicKey.ecdsa:\n return publicKey.elliptic.generate(oid).then(({ oid, Q, secret }) => ({\n privateParams: { d: secret },\n publicParams: { oid: new OID(oid), Q }\n }));\n case enums.publicKey.eddsaLegacy:\n return publicKey.elliptic.generate(oid).then(({ oid, Q, secret }) => ({\n privateParams: { seed: secret },\n publicParams: { oid: new OID(oid), Q }\n }));\n case enums.publicKey.ecdh:\n return publicKey.elliptic.generate(oid).then(({ oid, Q, secret, hash, cipher }) => ({\n privateParams: { d: secret },\n publicParams: {\n oid: new OID(oid),\n Q,\n kdfParams: new KDFParams({ hash, cipher })\n }\n }));\n case enums.publicKey.ed25519:\n return publicKey.elliptic.eddsa.generate(algo).then(({ A, seed }) => ({\n privateParams: { seed },\n publicParams: { A }\n }));\n case enums.publicKey.x25519:\n return publicKey.elliptic.ecdhX.generate(algo).then(({ A, k }) => ({\n privateParams: { k },\n publicParams: { A }\n }));\n case enums.publicKey.dsa:\n case enums.publicKey.elgamal:\n throw new Error('Unsupported algorithm for key generation.');\n default:\n throw new Error('Unknown public key algorithm.');\n }\n}\n\n/**\n * Validate algorithm-specific key parameters\n * @param {module:enums.publicKey} algo - The public key algorithm\n * @param {Object} publicParams - Algorithm-specific public key parameters\n * @param {Object} privateParams - Algorithm-specific private key parameters\n * @returns {Promise} Whether the parameters are valid.\n * @async\n */\nexport async function validateParams(algo, publicParams, privateParams) {\n if (!publicParams || !privateParams) {\n throw new Error('Missing key parameters');\n }\n switch (algo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaSign: {\n const { n, e } = publicParams;\n const { d, p, q, u } = privateParams;\n return publicKey.rsa.validateParams(n, e, d, p, q, u);\n }\n case enums.publicKey.dsa: {\n const { p, q, g, y } = publicParams;\n const { x } = privateParams;\n return publicKey.dsa.validateParams(p, q, g, y, x);\n }\n case enums.publicKey.elgamal: {\n const { p, g, y } = publicParams;\n const { x } = privateParams;\n return publicKey.elgamal.validateParams(p, g, y, x);\n }\n case enums.publicKey.ecdsa:\n case enums.publicKey.ecdh: {\n const algoModule = publicKey.elliptic[enums.read(enums.publicKey, algo)];\n const { oid, Q } = publicParams;\n const { d } = privateParams;\n return algoModule.validateParams(oid, Q, d);\n }\n case enums.publicKey.eddsaLegacy: {\n const { Q, oid } = publicParams;\n const { seed } = privateParams;\n return publicKey.elliptic.eddsaLegacy.validateParams(oid, Q, seed);\n }\n case enums.publicKey.ed25519: {\n const { A } = publicParams;\n const { seed } = privateParams;\n return publicKey.elliptic.eddsa.validateParams(algo, A, seed);\n }\n case enums.publicKey.x25519: {\n const { A } = publicParams;\n const { k } = privateParams;\n return publicKey.elliptic.ecdhX.validateParams(algo, A, k);\n }\n default:\n throw new Error('Unknown public key algorithm.');\n }\n}\n\n/**\n * Generates a random byte prefix for the specified algorithm\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} algo - Symmetric encryption algorithm\n * @returns {Promise} Random bytes with length equal to the block size of the cipher, plus the last two bytes repeated.\n * @async\n */\nexport async function getPrefixRandom(algo) {\n const { blockSize } = getCipher(algo);\n const prefixrandom = await getRandomBytes(blockSize);\n const repeat = new Uint8Array([prefixrandom[prefixrandom.length - 2], prefixrandom[prefixrandom.length - 1]]);\n return util.concat([prefixrandom, repeat]);\n}\n\n/**\n * Generating a session key for the specified symmetric algorithm\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} algo - Symmetric encryption algorithm\n * @returns {Uint8Array} Random bytes as a string to be used as a key.\n */\nexport function generateSessionKey(algo) {\n const { keySize } = getCipher(algo);\n return getRandomBytes(keySize);\n}\n\n/**\n * Get implementation of the given AEAD mode\n * @param {enums.aead} algo\n * @returns {Object}\n * @throws {Error} on invalid algo\n */\nexport function getAEADMode(algo) {\n const algoName = enums.read(enums.aead, algo);\n return mode[algoName];\n}\n\nexport { getCipher };\n\n/**\n * Check whether the given curve OID is supported\n * @param {module:type/oid} oid - EC object identifier\n * @throws {UnsupportedError} if curve is not supported\n */\nfunction checkSupportedCurve(oid) {\n try {\n oid.getName();\n } catch (e) {\n throw new UnsupportedError('Unknown curve OID');\n }\n}\n\n/**\n * Get preferred hash algo for a given elliptic algo\n * @param {module:enums.publicKey} algo - alrogithm identifier\n * @param {module:type/oid} [oid] - curve OID if needed by algo\n */\nexport function getPreferredCurveHashAlgo(algo, oid) {\n switch (algo) {\n case enums.publicKey.ecdsa:\n case enums.publicKey.eddsaLegacy:\n return publicKey.elliptic.getPreferredHashAlgo(oid);\n case enums.publicKey.ed25519:\n return publicKey.elliptic.eddsa.getPreferredHashAlgo(algo);\n default:\n throw new Error('Unknown elliptic signing algo');\n }\n}\n","/**\n * @fileoverview Provides access to all cryptographic primitives used in OpenPGP.js\n * @see module:crypto/crypto\n * @see module:crypto/signature\n * @see module:crypto/public_key\n * @see module:crypto/cipher\n * @see module:crypto/random\n * @see module:crypto/hash\n * @module crypto\n * @private\n */\n\nimport * as cipher from './cipher';\nimport hash from './hash';\nimport mode from './mode';\nimport publicKey from './public_key';\nimport * as signature from './signature';\nimport * as random from './random';\nimport * as pkcs1 from './pkcs1';\nimport * as pkcs5 from './pkcs5';\nimport * as crypto from './crypto';\nimport * as aesKW from './aes_kw';\n\n// TODO move cfb and gcm to cipher\nconst mod = {\n /** @see module:crypto/cipher */\n cipher: cipher,\n /** @see module:crypto/hash */\n hash: hash,\n /** @see module:crypto/mode */\n mode: mode,\n /** @see module:crypto/public_key */\n publicKey: publicKey,\n /** @see module:crypto/signature */\n signature: signature,\n /** @see module:crypto/random */\n random: random,\n /** @see module:crypto/pkcs1 */\n pkcs1: pkcs1,\n /** @see module:crypto/pkcs5 */\n pkcs5: pkcs5,\n /** @see module:crypto/aes_kw */\n aesKW: aesKW\n};\n\nObject.assign(mod, crypto);\n\nexport default mod;\n","\n\n\nvar TYPED_OK = typeof Uint8Array !== \"undefined\" &&\n typeof Uint16Array !== \"undefined\" &&\n typeof Int32Array !== \"undefined\";\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexport function assign(obj /*...args obj, from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) {\n continue; \n }\n\n if (typeof source !== \"object\") {\n throw new TypeError(source + \"must be non-object\");\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n //return Object.assign(...args);\n}\n\n\n// reduce buffer size, avoiding mem copy\nexport function shrinkBuf(buf, size) {\n if (buf.length === size) {\n return buf; \n }\n if (buf.subarray) {\n return buf.subarray(0, size); \n }\n buf.length = size;\n return buf;\n}\n\n\nconst fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (let i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n let i, l, len, pos, chunk;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nconst fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (let i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\n\nexport let Buf8 = TYPED_OK ? Uint8Array : Array;\nexport let Buf16 = TYPED_OK ? Uint16Array : Array;\nexport let Buf32 = TYPED_OK ? Int32Array : Array;\nexport let flattenChunks = TYPED_OK ? fnTyped.flattenChunks : fnUntyped.flattenChunks;\nexport let arraySet = TYPED_OK ? fnTyped.arraySet : fnUntyped.arraySet;\nexport function setTyped(on) {\n if (on) {\n Buf8 = Uint8Array;\n Buf16 = Uint16Array;\n Buf32 = Int32Array;\n ({ flattenChunks, arraySet } = fnTyped);\n } else {\n Buf8 = Array;\n Buf16 = Array;\n Buf32 = Array;\n ({ flattenChunks, arraySet } = fnUntyped);\n }\n}","\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nexport const Z_NO_FLUSH = 0;\nexport const Z_PARTIAL_FLUSH = 1;\nexport const Z_SYNC_FLUSH = 2;\nexport const Z_FULL_FLUSH = 3;\nexport const Z_FINISH = 4;\nexport const Z_BLOCK = 5;\nexport const Z_TREES = 6;\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nexport const Z_OK = 0;\nexport const Z_STREAM_END = 1;\nexport const Z_NEED_DICT = 2;\nexport const Z_ERRNO = -1;\nexport const Z_STREAM_ERROR = -2;\nexport const Z_DATA_ERROR = -3;\n//export const Z_MEM_ERROR = -4;\nexport const Z_BUF_ERROR = -5;\n//export const Z_VERSION_ERROR = -6;\n\n /* compression levels */\nexport const Z_NO_COMPRESSION = 0;\nexport const Z_BEST_SPEED = 1;\nexport const Z_BEST_COMPRESSION = 9;\nexport const Z_DEFAULT_COMPRESSION = -1;\n\n\nexport const Z_FILTERED = 1;\nexport const Z_HUFFMAN_ONLY = 2;\nexport const Z_RLE = 3;\nexport const Z_FIXED = 4;\nexport const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nexport const Z_BINARY = 0;\nexport const Z_TEXT = 1;\n//export const Z_ASCII = 1; // = Z_TEXT (deprecated)\nexport const Z_UNKNOWN = 2;\n\n/* The deflate compression method */\nexport const Z_DEFLATED = 8;\n//export const Z_NULL = null // Use -1 or null inline, depending on var type\n","\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nimport * as utils from \"../utils/common.js\";\nimport {\n Z_FIXED,\n Z_BINARY,\n Z_TEXT,\n Z_UNKNOWN\n} from \"./constants.js\";\n\n/*============================================================================*/\n\n\nfunction zero(buf) {\n let len = buf.length; while (--len >= 0) {\n buf[len] = 0; \n } \n}\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES = 30;\n/* number of distance codes */\n\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nconst extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nconst extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nconst bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = w & 0xff;\n s.pending_buf[s.pending++] = w >>> 8 & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > Buf_size - length) {\n s.bi_buf |= value << s.bi_valid & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> Buf_size - s.bi_valid;\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= value << s.bi_valid & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) {\n continue; \n } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) {\n return; \n }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) {\n bits--; \n }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) {\n continue; \n }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n const next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = code + bl_count[bits - 1] << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < 1 << extra_lbits[code]; n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < 1 << extra_dbits[code]; n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) {\n s.dyn_ltree[n * 2]/*.Freq*/ = 0; \n }\n for (n = 0; n < D_CODES; n++) {\n s.dyn_dtree[n * 2]/*.Freq*/ = 0; \n }\n for (n = 0; n < BL_CODES; n++) {\n s.bl_tree[n * 2]/*.Freq*/ = 0; \n }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s) {\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n // while (len--) {\n // put_byte(s, *buf++);\n // }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n const _n2 = n * 2;\n const _m2 = m * 2;\n return tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m];\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) {\n break; \n }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let lx = 0; /* running index in l_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = s.heap_len >> 1/*int /2*/; n >= 1; n--) {\n pqdownheap(s, tree, n); \n }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) {\n s.bl_tree[curlen * 2]/*.Freq*/++; \n }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do {\n send_code(s, curlen, s.bl_tree); \n } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let black_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if (black_mask & 1 && s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s) {\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = s.opt_len + 3 + 7 >>> 3;\n static_lenb = s.static_len + 3 + 7 >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) {\n opt_lenb = static_lenb; \n }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if (stored_len + 4 <= opt_lenb && buf !== -1) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n // (!) This block is disabled in zlib defaults,\n // don't enable it for binary compatibility\n\n //#ifdef TRUNCATE_BLOCK\n // /* Try to guess if it is profitable to stop the current block here */\n // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n // /* Compute an upper bound for the compressed length */\n // out_length = s.last_lit*8;\n // in_length = s.strstart - s.block_start;\n //\n // for (dcode = 0; dcode < D_CODES; dcode++) {\n // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n // }\n // out_length >>>= 3;\n // //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n // // s->last_lit, in_length, out_length,\n // // 100L - out_length*100L/in_length));\n // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n // return true;\n // }\n // }\n //#endif\n\n return s.last_lit === s.lit_bufsize - 1;\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexport {\n _tr_init,\n _tr_stored_block,\n _tr_flush_block,\n _tr_tally,\n _tr_align\n};","\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default function adler32(adler, buf, len, pos) {\n let s1 = adler & 0xffff |0,\n s2 = adler >>> 16 & 0xffff |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = s1 + buf[pos++] |0;\n s2 = s2 + s1 |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return s1 | s2 << 16 |0;\n}\n","\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n let c;\n const table = [];\n\n for (let n = 0; n < 256; n++) {\n c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = makeTable();\n\n\nexport default function crc32(crc, buf, len, pos) {\n const t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return crc ^ -1; // >>> 0;\n}","\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default {\n 2: \"need dictionary\", /* Z_NEED_DICT 2 */\n 1: \"stream end\", /* Z_STREAM_END 1 */\n 0: \"\", /* Z_OK 0 */\n \"-1\": \"file error\", /* Z_ERRNO (-1) */\n \"-2\": \"stream error\", /* Z_STREAM_ERROR (-2) */\n \"-3\": \"data error\", /* Z_DATA_ERROR (-3) */\n \"-4\": \"insufficient memory\", /* Z_MEM_ERROR (-4) */\n \"-5\": \"buffer error\", /* Z_BUF_ERROR (-5) */\n \"-6\": \"incompatible version\" /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nimport * as utils from \"../utils/common.js\";\nimport * as trees from \"./trees.js\";\nimport adler32 from \"./adler32.js\";\nimport crc32 from \"./crc32.js\";\nimport msg from \"./messages.js\";\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nimport {\n Z_NO_FLUSH,\n Z_PARTIAL_FLUSH,\n Z_FULL_FLUSH,\n Z_FINISH,\n Z_BLOCK,\n Z_OK,\n Z_STREAM_END,\n Z_STREAM_ERROR,\n Z_DATA_ERROR,\n Z_BUF_ERROR,\n Z_DEFAULT_COMPRESSION,\n Z_FILTERED,\n Z_HUFFMAN_ONLY,\n Z_RLE,\n Z_FIXED,\n Z_DEFAULT_STRATEGY,\n Z_UNKNOWN,\n Z_DEFLATED\n} from \"./constants.js\";\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42;\nconst EXTRA_STATE = 69;\nconst NAME_STATE = 73;\nconst COMMENT_STATE = 91;\nconst HCRC_STATE = 103;\nconst BUSY_STATE = 113;\nconst FINISH_STATE = 666;\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n // put_byte(s, (Byte)(b >> 8));\n // put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n const _w_size = s.w_size;\n let p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n //#if MIN_MATCH != 3\n // Call update_hash() MIN_MATCH-3 more times\n //#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n // if (s.high_water < s.window_size) {\n // var curr = s.strstart + s.lookahead;\n // var init = 0;\n //\n // if (s.high_water < curr) {\n // /* Previous high water mark below current data -- zero WIN_INIT\n // * bytes or up to end of window, whichever is less.\n // */\n // init = s.window_size - curr;\n // if (init > WIN_INIT)\n // init = WIN_INIT;\n // zmemzero(s->window + curr, (unsigned)init);\n // s->high_water = curr + init;\n // }\n // else if (s->high_water < (ulg)curr + WIN_INIT) {\n // /* High water mark at or above current data, but below current data\n // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n // * to end of window, whichever is less.\n // */\n // init = (ulg)curr + WIN_INIT - s->high_water;\n // if (init > s->window_size - s->high_water)\n // init = s->window_size - s->high_water;\n // zmemzero(s->window + s->high_water, (unsigned)init);\n // s->high_water += init;\n // }\n // }\n //\n // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n // \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n let max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (; ;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n // s.block_start >= s.w_size)) {\n // throw new Error(\"slide too late\");\n // }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n // if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n const max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (; ;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n //#if MIN_MATCH != 3\n // Call UPDATE_HASH() MIN_MATCH-3 more times\n //#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (; ;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (; ;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n let bflush; /* set if current block must be flushed */\n\n for (; ;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nclass Config {\n constructor(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n }\n};\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\nclass DeflateState {\n constructor() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n }\n}\n\nfunction deflateResetKeep(strm) {\n let s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n let old_flush, s;\n let beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n let header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n //#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n //#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n let status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n let dictLength = dictionary.length;\n\n let s;\n let str, n;\n let wrap;\n let avail;\n let next;\n let input;\n let tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\nconst deflateInfo = 'pako deflate (from Nodeca project)';\nexport {\n deflateInit,\n deflateInit2,\n deflateReset,\n deflateResetKeep,\n deflateSetHeader,\n deflate,\n deflateEnd,\n deflateSetDictionary,\n deflateInfo\n};\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","// String encode/decode helpers\n\n\n\nimport * as utils from \"./common.js\";\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_OK = true;\nlet STR_APPLY_UIA_OK = true;\n\ntry {\n String.fromCharCode.apply(null, [ 0 ]); \n} catch (__) {\n STR_APPLY_OK = false; \n}\ntry {\n String.fromCharCode.apply(null, new Uint8Array(1)); \n} catch (__) {\n STR_APPLY_UIA_OK = false; \n}\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new utils.Buf8(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexport function string2buf (str) {\n let c, c2, m_pos, i, buf_len = 0;\n const str_len = str.length;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n const buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | c >>> 6;\n buf[i++] = 0x80 | c & 0x3f;\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | c >>> 12;\n buf[i++] = 0x80 | c >>> 6 & 0x3f;\n buf[i++] = 0x80 | c & 0x3f;\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | c >>> 18;\n buf[i++] = 0x80 | c >>> 12 & 0x3f;\n buf[i++] = 0x80 | c >>> 6 & 0x3f;\n buf[i++] = 0x80 | c & 0x3f;\n }\n }\n\n return buf;\n}\n\n// Helper (used in 2 places)\nfunction _buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n let result = \"\";\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexport function buf2binstring (buf) {\n return _buf2binstring(buf, buf.length);\n}\n\n\n// Convert binary string (typed, when possible)\nexport function binstring2buf (str) {\n const buf = new utils.Buf8(str.length);\n for (let i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n}\n\n\n// convert array to string\nexport function buf2string (buf, max) {\n let i, out, c, c_len;\n const len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n // var utf16buf = new Array(len * 2);\n // try Uint16Array\n const utf16buf = new Uint16Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) {\n utf16buf[out++] = c; continue; \n }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) {\n utf16buf[out++] = 0xfffd; i += c_len - 1; continue; \n }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = c << 6 | buf[i++] & 0x3f;\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) {\n utf16buf[out++] = 0xfffd; continue; \n }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;\n utf16buf[out++] = 0xdc00 | c & 0x3ff;\n }\n }\n\n return _buf2binstring(utf16buf, out);\n}\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexport function utf8border (buf, max) {\n let pos;\n\n max = max || buf.length;\n if (max > buf.length) {\n max = buf.length; \n }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {\n pos--; \n }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) {\n return max; \n }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) {\n return max; \n }\n\n return pos + _utf8len[buf[pos]] > max ? pos : max;\n}\n","\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default class ZStream {\n constructor() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n }\n}","'use strict';\n\nimport * as zlib_deflate from \"./zlib/deflate.js\";\nimport * as utils from \"./utils/common.js\";\nimport * as strings from \"./utils/strings.js\";\nimport msg from \"./zlib/messages.js\";\nimport ZStream from \"./zlib/zstream.js\";\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\nimport { Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_SYNC_FLUSH,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED } from \"./zlib/constants.js\"\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\n\nclass Deflate {\n constructor(options) {\n this.options = {\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n ...(options || {})\n };\n\n const opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (opt.dictionary instanceof ArrayBuffer) {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n }\n\n /**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\n push(data, mode) {\n const { strm, options: { chunkSize } } = this;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (data instanceof ArrayBuffer) {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n };\n /**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n onData(chunk) {\n this.chunks.push(chunk);\n };\n\n /**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n onEnd(status) {\n // On success - join\n if (status === Z_OK) {\n this.result = utils.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n };\n}\n\n\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n const deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw new Error(deflator.msg || msg[deflator.err]); }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\nexport { Deflate, deflate, deflateRaw, gzip };\n","\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 30; /* got a data error -- remain here until reset */\nconst TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nexport default function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let _out; /* local strm.output */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n const input = strm.input;\n const last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n const output = strm.output;\n const beg = _out - (start - strm.avail_out);\n const end = _out + (strm.avail_out - 257);\n //#ifdef INFLATE_STRICT\n const dmax = state.dmax;\n //#endif\n const wsize = state.wsize;\n const whave = state.whave;\n const wnext = state.wnext;\n const s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n const lcode = state.lencode;\n const dcode = state.distcode;\n const lmask = (1 << state.lenbits) - 1;\n const dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = here >>> 16 & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n } else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & (1 << op) - 1;\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = here >>> 16 & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & (1 << op) - 1;\n //#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = \"invalid distance too far back\";\n state.mode = BAD;\n break top;\n }\n //#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = \"invalid distance too far back\";\n state.mode = BAD;\n break top;\n }\n\n // (!) This block is disabled in zlib defaults,\n // don't enable it for binary compatibility\n //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n // if (len <= op - whave) {\n // do {\n // output[_out++] = 0;\n // } while (--len);\n // continue top;\n // }\n // len -= op - whave;\n // do {\n // output[_out++] = 0;\n // } while (--op > whave);\n // if (op === 0) {\n // from = _out - dist;\n // do {\n // output[_out++] = output[from++];\n // } while (--len);\n // continue top;\n // }\n //#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n } else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n } else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n } else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n } else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & (1 << op) - 1)];\n continue dodist;\n } else {\n strm.msg = \"invalid distance code\";\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & (1 << op) - 1)];\n continue dolen;\n } else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n } else {\n strm.msg = \"invalid literal/length code\";\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);\n strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);\n state.hold = hold;\n state.bits = bits;\n return;\n}\n","\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nimport * as utils from \"../utils/common.js\";\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nconst lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nconst dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nconst dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nexport default function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n let base_index = 0;\n // var shoextra; /* extra bits table to use */\n let end; /* use base and extra for symbol > end */\n const count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n let extra_index = 0;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) {\n break; \n }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = 1 << 24 | 64 << 16 | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = 1 << 24 | 64 << 16 | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) {\n break; \n }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n const mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if (type === LENS && used > ENOUGH_LENS ||\n type === DISTS && used > ENOUGH_DISTS) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n } else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n } else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << len - drop;\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << len - 1;\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) {\n break; \n }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) {\n break; \n }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if (type === LENS && used > ENOUGH_LENS ||\n type === DISTS && used > ENOUGH_DISTS) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = root << 24 | curr << 16 | next - table_index |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = len - drop << 24 | 64 << 16 |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n}\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nimport * as utils from \"../utils/common.js\";\nimport adler32 from \"./adler32.js\";\nimport crc32 from \"./crc32.js\";\nimport inflate_fast from \"./inffast.js\";\nimport inflate_table from \"./inftrees.js\";\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nimport {\n Z_FINISH,\n Z_BLOCK,\n Z_TREES,\n Z_OK,\n Z_STREAM_END,\n Z_NEED_DICT,\n Z_STREAM_ERROR,\n Z_DATA_ERROR,\n Z_BUF_ERROR,\n Z_DEFLATED\n} from \"./constants.js\";\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 1; /* i: waiting for magic header */\nconst FLAGS = 2; /* i: waiting for method and flags (gzip) */\nconst TIME = 3; /* i: waiting for modification time (gzip) */\nconst OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 5; /* i: waiting for extra length (gzip) */\nconst EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nconst NAME = 7; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 8; /* i: waiting for end of comment (gzip) */\nconst HCRC = 9; /* i: waiting for header crc (gzip) */\nconst DICTID = 10; /* i: waiting for dictionary check value */\nconst DICT = 11; /* waiting for inflateSetDictionary() call */\nconst TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 14; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 17; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 18; /* i: waiting for code length code lengths */\nconst CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 20; /* i: same as LEN below, but only first time in */\nconst LEN = 21; /* i: waiting for length/lit/eob code */\nconst LENEXT = 22; /* i: waiting for length extra bits */\nconst DIST = 23; /* i: waiting for distance code */\nconst DISTEXT = 24; /* i: waiting for distance extra bits */\nconst MATCH = 25; /* o: waiting for output space to copy string */\nconst LIT = 26; /* o: waiting for output space to write literal */\nconst CHECK = 27; /* i: waiting for 32-bit check value */\nconst LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 29; /* finished check, done -- remain here until reset */\nconst BAD = 30; /* got a data error -- remain here until reset */\n//const MEM = 31; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nclass InflateState {\n constructor() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n }\n}\n\nfunction inflateResetKeep(strm) {\n let state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n let state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n let wrap;\n let state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n let ret;\n let state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n let sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n let hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary var for NEED_BITS\n\n const order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n // case MEM:\n // return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n // state.mode = MEM;\n // return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n const state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n let state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n // if (ret) {\n // state.mode = MEM;\n // return Z_MEM_ERROR;\n // }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nconst inflateInfo = 'pako inflate (from Nodeca project)';\n\nexport {\n inflateReset,\n inflateReset2,\n inflateResetKeep,\n inflateInit,\n inflateInit2,\n inflate,\n inflateEnd,\n inflateGetHeader,\n inflateSetDictionary,\n inflateInfo\n};\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default class GZheader {\n constructor() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n }\n}","'use strict';\n\nimport * as zlib_inflate from \"./zlib/inflate.js\";\nimport * as utils from \"./utils/common.js\";\nimport * as strings from \"./utils/strings.js\";\nimport * as c from \"./zlib/constants.js\";\nimport msg from \"./zlib/messages.js\";\nimport ZStream from \"./zlib/zstream.js\";\nimport GZheader from \"./zlib/gzheader.js\";\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nclass Inflate {\n constructor(options) {\n this.options = {\n chunkSize: 16384,\n windowBits: 0,\n ...(options || {})\n };\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (opt.dictionary instanceof ArrayBuffer) {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n }\n /**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\n push(data, mode) {\n const { strm, options: { chunkSize, dictionary } } = this;\n let status, _mode;\n let next_out_utf8, tail, utf8str;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n let allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (data instanceof ArrayBuffer) {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n };\n\n /**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n onData(chunk) {\n this.chunks.push(chunk);\n };\n\n\n\n /**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n onEnd(status) {\n // On success - join\n if (status === c.Z_OK) {\n this.result = utils.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n };\n}\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n const inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw new Error(inflator.msg || msg[inflator.err]); }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\nexport { Inflate, inflate, inflateRaw, inflate as ungzip };\n","/*\nnode-bzip - a pure-javascript Node.JS module for decoding bzip2 data\n\nCopyright (C) 2012 Eli Skeggs\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public\nLicense as published by the Free Software Foundation; either\nversion 2.1 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nLesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public\nLicense along with this library; if not, see\nhttp://www.gnu.org/licenses/lgpl-2.1.html\n\nAdapted from bzip2.js, copyright 2011 antimatter15 (antimatter15@gmail.com).\n\nBased on micro-bunzip by Rob Landley (rob@landley.net).\n\nBased on bzip2 decompression code by Julian R Seward (jseward@acm.org),\nwhich also acknowledges contributions by Mike Burrows, David Wheeler,\nPeter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,\nRobert Sedgewick, and Jon L. Bentley.\n*/\n\nvar BITMASK = [0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];\n\n// offset in bytes\nvar BitReader = function(stream) {\n this.stream = stream;\n this.bitOffset = 0;\n this.curByte = 0;\n this.hasByte = false;\n};\n\nBitReader.prototype._ensureByte = function() {\n if (!this.hasByte) {\n this.curByte = this.stream.readByte();\n this.hasByte = true;\n }\n};\n\n// reads bits from the buffer\nBitReader.prototype.read = function(bits) {\n var result = 0;\n while (bits > 0) {\n this._ensureByte();\n var remaining = 8 - this.bitOffset;\n // if we're in a byte\n if (bits >= remaining) {\n result <<= remaining;\n result |= BITMASK[remaining] & this.curByte;\n this.hasByte = false;\n this.bitOffset = 0;\n bits -= remaining;\n } else {\n result <<= bits;\n var shift = remaining - bits;\n result |= (this.curByte & (BITMASK[bits] << shift)) >> shift;\n this.bitOffset += bits;\n bits = 0;\n }\n }\n return result;\n};\n\n// seek to an arbitrary point in the buffer (expressed in bits)\nBitReader.prototype.seek = function(pos) {\n var n_bit = pos % 8;\n var n_byte = (pos - n_bit) / 8;\n this.bitOffset = n_bit;\n this.stream.seek(n_byte);\n this.hasByte = false;\n};\n\n// reads 6 bytes worth of data using the read method\nBitReader.prototype.pi = function() {\n var buf = new Uint8Array(6), i;\n for (i = 0; i < buf.length; i++) {\n buf[i] = this.read(8);\n }\n return bufToHex(buf);\n};\n\nfunction bufToHex(buf) {\n return Array.prototype.map.call(buf, x => ('00' + x.toString(16)).slice(-2)).join('');\n}\n\nmodule.exports = BitReader;\n","/* very simple input/output stream interface */\nvar Stream = function() {\n};\n\n// input streams //////////////\n/** Returns the next byte, or -1 for EOF. */\nStream.prototype.readByte = function() {\n throw new Error(\"abstract method readByte() not implemented\");\n};\n/** Attempts to fill the buffer; returns number of bytes read, or\n * -1 for EOF. */\nStream.prototype.read = function(buffer, bufOffset, length) {\n var bytesRead = 0;\n while (bytesRead < length) {\n var c = this.readByte();\n if (c < 0) { // EOF\n return (bytesRead===0) ? -1 : bytesRead;\n }\n buffer[bufOffset++] = c;\n bytesRead++;\n }\n return bytesRead;\n};\nStream.prototype.seek = function(new_pos) {\n throw new Error(\"abstract method seek() not implemented\");\n};\n\n// output streams ///////////\nStream.prototype.writeByte = function(_byte) {\n throw new Error(\"abstract method readByte() not implemented\");\n};\nStream.prototype.write = function(buffer, bufOffset, length) {\n var i;\n for (i=0; i>> 0; // return an unsigned value\n };\n\n /**\n * Update the CRC with a single byte\n * @param value The value to update the CRC with\n */\n this.updateCRC = function(value) {\n crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff];\n };\n\n /**\n * Update the CRC with a sequence of identical bytes\n * @param value The value to update the CRC with\n * @param count The number of bytes\n */\n this.updateCRCRun = function(value, count) {\n while (count-- > 0) {\n crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff];\n }\n };\n };\n return CRC32;\n})();\n","/*\nseek-bzip - a pure-javascript module for seeking within bzip2 data\n\nCopyright (C) 2013 C. Scott Ananian\nCopyright (C) 2012 Eli Skeggs\nCopyright (C) 2011 Kevin Kwok\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public\nLicense as published by the Free Software Foundation; either\nversion 2.1 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nLesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public\nLicense along with this library; if not, see\nhttp://www.gnu.org/licenses/lgpl-2.1.html\n\nAdapted from node-bzip, copyright 2012 Eli Skeggs.\nAdapted from bzip2.js, copyright 2011 Kevin Kwok (antimatter15@gmail.com).\n\nBased on micro-bunzip by Rob Landley (rob@landley.net).\n\nBased on bzip2 decompression code by Julian R Seward (jseward@acm.org),\nwhich also acknowledges contributions by Mike Burrows, David Wheeler,\nPeter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten,\nRobert Sedgewick, and Jon L. Bentley.\n*/\n\nvar BitReader = require('./bitreader');\nvar Stream = require('./stream');\nvar CRC32 = require('./crc32');\n\nvar MAX_HUFCODE_BITS = 20;\nvar MAX_SYMBOLS = 258;\nvar SYMBOL_RUNA = 0;\nvar SYMBOL_RUNB = 1;\nvar MIN_GROUPS = 2;\nvar MAX_GROUPS = 6;\nvar GROUP_SIZE = 50;\n\nvar WHOLEPI = \"314159265359\";\nvar SQRTPI = \"177245385090\";\n\nvar mtf = function(array, index) {\n var src = array[index], i;\n for (i = index; i > 0; i--) {\n array[i] = array[i-1];\n }\n array[0] = src;\n return src;\n};\n\nvar Err = {\n OK: 0,\n LAST_BLOCK: -1,\n NOT_BZIP_DATA: -2,\n UNEXPECTED_INPUT_EOF: -3,\n UNEXPECTED_OUTPUT_EOF: -4,\n DATA_ERROR: -5,\n OUT_OF_MEMORY: -6,\n OBSOLETE_INPUT: -7,\n END_OF_BLOCK: -8\n};\nvar ErrorMessages = {};\nErrorMessages[Err.LAST_BLOCK] = \"Bad file checksum\";\nErrorMessages[Err.NOT_BZIP_DATA] = \"Not bzip data\";\nErrorMessages[Err.UNEXPECTED_INPUT_EOF] = \"Unexpected input EOF\";\nErrorMessages[Err.UNEXPECTED_OUTPUT_EOF] = \"Unexpected output EOF\";\nErrorMessages[Err.DATA_ERROR] = \"Data error\";\nErrorMessages[Err.OUT_OF_MEMORY] = \"Out of memory\";\nErrorMessages[Err.OBSOLETE_INPUT] = \"Obsolete (pre 0.9.5) bzip format not supported.\";\n\nvar _throw = function(status, optDetail) {\n var msg = ErrorMessages[status] || 'unknown error';\n if (optDetail) { msg += ': '+optDetail; }\n var e = new TypeError(msg);\n e.errorCode = status;\n throw e;\n};\n\nvar Bunzip = function(inputStream, outputStream) {\n this.writePos = this.writeCurrent = this.writeCount = 0;\n\n this._start_bunzip(inputStream, outputStream);\n};\nBunzip.prototype._init_block = function() {\n var moreBlocks = this._get_next_block();\n if ( !moreBlocks ) {\n this.writeCount = -1;\n return false; /* no more blocks */\n }\n this.blockCRC = new CRC32();\n return true;\n};\n/* XXX micro-bunzip uses (inputStream, inputBuffer, len) as arguments */\nBunzip.prototype._start_bunzip = function(inputStream, outputStream) {\n /* Ensure that file starts with \"BZh['1'-'9'].\" */\n var buf = new Uint8Array(4);\n if (inputStream.read(buf, 0, 4) !== 4 ||\n String.fromCharCode(buf[0], buf[1], buf[2]) !== 'BZh')\n _throw(Err.NOT_BZIP_DATA, 'bad magic');\n\n var level = buf[3] - 0x30;\n if (level < 1 || level > 9)\n _throw(Err.NOT_BZIP_DATA, 'level out of range');\n\n this.reader = new BitReader(inputStream);\n\n /* Fourth byte (ascii '1'-'9'), indicates block size in units of 100k of\n uncompressed data. Allocate intermediate buffer for block. */\n this.dbufSize = 100000 * level;\n this.nextoutput = 0;\n this.outputStream = outputStream;\n this.streamCRC = 0;\n};\nBunzip.prototype._get_next_block = function() {\n var i, j, k;\n var reader = this.reader;\n // this is get_next_block() function from micro-bunzip:\n /* Read in header signature and CRC, then validate signature.\n (last block signature means CRC is for whole file, return now) */\n var h = reader.pi();\n if (h === SQRTPI) { // last block\n return false; /* no more blocks */\n }\n if (h !== WHOLEPI)\n _throw(Err.NOT_BZIP_DATA);\n this.targetBlockCRC = reader.read(32) >>> 0; // (convert to unsigned)\n this.streamCRC = (this.targetBlockCRC ^\n ((this.streamCRC << 1) | (this.streamCRC>>>31))) >>> 0;\n /* We can add support for blockRandomised if anybody complains. There was\n some code for this in busybox 1.0.0-pre3, but nobody ever noticed that\n it didn't actually work. */\n if (reader.read(1))\n _throw(Err.OBSOLETE_INPUT);\n var origPointer = reader.read(24);\n if (origPointer > this.dbufSize)\n _throw(Err.DATA_ERROR, 'initial position out of bounds');\n /* mapping table: if some byte values are never used (encoding things\n like ascii text), the compression code removes the gaps to have fewer\n symbols to deal with, and writes a sparse bitfield indicating which\n values were present. We make a translation table to convert the symbols\n back to the corresponding bytes. */\n var t = reader.read(16);\n var symToByte = new Uint8Array(256), symTotal = 0;\n for (i = 0; i < 16; i++) {\n if (t & (1 << (0xF - i))) {\n var o = i * 16;\n k = reader.read(16);\n for (j = 0; j < 16; j++)\n if (k & (1 << (0xF - j)))\n symToByte[symTotal++] = o + j;\n }\n }\n\n /* How many different huffman coding groups does this block use? */\n var groupCount = reader.read(3);\n if (groupCount < MIN_GROUPS || groupCount > MAX_GROUPS)\n _throw(Err.DATA_ERROR);\n /* nSelectors: Every GROUP_SIZE many symbols we select a new huffman coding\n group. Read in the group selector list, which is stored as MTF encoded\n bit runs. (MTF=Move To Front, as each value is used it's moved to the\n start of the list.) */\n var nSelectors = reader.read(15);\n if (nSelectors === 0)\n _throw(Err.DATA_ERROR);\n\n var mtfSymbol = new Uint8Array(256);\n for (i = 0; i < groupCount; i++)\n mtfSymbol[i] = i;\n\n var selectors = new Uint8Array(nSelectors); // was 32768...\n\n for (i = 0; i < nSelectors; i++) {\n /* Get next value */\n for (j = 0; reader.read(1); j++)\n if (j >= groupCount) _throw(Err.DATA_ERROR);\n /* Decode MTF to get the next selector */\n selectors[i] = mtf(mtfSymbol, j);\n }\n\n /* Read the huffman coding tables for each group, which code for symTotal\n literal symbols, plus two run symbols (RUNA, RUNB) */\n var symCount = symTotal + 2;\n var groups = [], hufGroup;\n for (j = 0; j < groupCount; j++) {\n var length = new Uint8Array(symCount), temp = new Uint16Array(MAX_HUFCODE_BITS + 1);\n /* Read huffman code lengths for each symbol. They're stored in\n a way similar to mtf; record a starting value for the first symbol,\n and an offset from the previous value for everys symbol after that. */\n t = reader.read(5); // lengths\n for (i = 0; i < symCount; i++) {\n for (;;) {\n if (t < 1 || t > MAX_HUFCODE_BITS) _throw(Err.DATA_ERROR);\n /* If first bit is 0, stop. Else second bit indicates whether\n to increment or decrement the value. */\n if(!reader.read(1))\n break;\n if(!reader.read(1))\n t++;\n else\n t--;\n }\n length[i] = t;\n }\n\n /* Find largest and smallest lengths in this group */\n var minLen, maxLen;\n minLen = maxLen = length[0];\n for (i = 1; i < symCount; i++) {\n if (length[i] > maxLen)\n maxLen = length[i];\n else if (length[i] < minLen)\n minLen = length[i];\n }\n\n /* Calculate permute[], base[], and limit[] tables from length[].\n *\n * permute[] is the lookup table for converting huffman coded symbols\n * into decoded symbols. base[] is the amount to subtract from the\n * value of a huffman symbol of a given length when using permute[].\n *\n * limit[] indicates the largest numerical value a symbol with a given\n * number of bits can have. This is how the huffman codes can vary in\n * length: each code with a value>limit[length] needs another bit.\n */\n hufGroup = {};\n groups.push(hufGroup);\n hufGroup.permute = new Uint16Array(MAX_SYMBOLS);\n hufGroup.limit = new Uint32Array(MAX_HUFCODE_BITS + 2);\n hufGroup.base = new Uint32Array(MAX_HUFCODE_BITS + 1);\n hufGroup.minLen = minLen;\n hufGroup.maxLen = maxLen;\n /* Calculate permute[]. Concurently, initialize temp[] and limit[]. */\n var pp = 0;\n for (i = minLen; i <= maxLen; i++) {\n temp[i] = hufGroup.limit[i] = 0;\n for (t = 0; t < symCount; t++)\n if (length[t] === i)\n hufGroup.permute[pp++] = t;\n }\n /* Count symbols coded for at each bit length */\n for (i = 0; i < symCount; i++)\n temp[length[i]]++;\n /* Calculate limit[] (the largest symbol-coding value at each bit\n * length, which is (previous limit<<1)+symbols at this level), and\n * base[] (number of symbols to ignore at each bit length, which is\n * limit minus the cumulative count of symbols coded for already). */\n pp = t = 0;\n for (i = minLen; i < maxLen; i++) {\n pp += temp[i];\n /* We read the largest possible symbol size and then unget bits\n after determining how many we need, and those extra bits could\n be set to anything. (They're noise from future symbols.) At\n each level we're really only interested in the first few bits,\n so here we set all the trailing to-be-ignored bits to 1 so they\n don't affect the value>limit[length] comparison. */\n hufGroup.limit[i] = pp - 1;\n pp <<= 1;\n t += temp[i];\n hufGroup.base[i + 1] = pp - t;\n }\n hufGroup.limit[maxLen + 1] = Number.MAX_VALUE; /* Sentinal value for reading next sym. */\n hufGroup.limit[maxLen] = pp + temp[maxLen] - 1;\n hufGroup.base[minLen] = 0;\n }\n /* We've finished reading and digesting the block header. Now read this\n block's huffman coded symbols from the file and undo the huffman coding\n and run length encoding, saving the result into dbuf[dbufCount++]=uc */\n\n /* Initialize symbol occurrence counters and symbol Move To Front table */\n var byteCount = new Uint32Array(256);\n for (i = 0; i < 256; i++)\n mtfSymbol[i] = i;\n /* Loop through compressed symbols. */\n var runPos = 0, dbufCount = 0, selector = 0, uc;\n var dbuf = this.dbuf = new Uint32Array(this.dbufSize);\n symCount = 0;\n for (;;) {\n /* Determine which huffman coding group to use. */\n if (!(symCount--)) {\n symCount = GROUP_SIZE - 1;\n if (selector >= nSelectors) { _throw(Err.DATA_ERROR); }\n hufGroup = groups[selectors[selector++]];\n }\n /* Read next huffman-coded symbol. */\n i = hufGroup.minLen;\n j = reader.read(i);\n for (;;i++) {\n if (i > hufGroup.maxLen) { _throw(Err.DATA_ERROR); }\n if (j <= hufGroup.limit[i])\n break;\n j = (j << 1) | reader.read(1);\n }\n /* Huffman decode value to get nextSym (with bounds checking) */\n j -= hufGroup.base[i];\n if (j < 0 || j >= MAX_SYMBOLS) { _throw(Err.DATA_ERROR); }\n var nextSym = hufGroup.permute[j];\n /* We have now decoded the symbol, which indicates either a new literal\n byte, or a repeated run of the most recent literal byte. First,\n check if nextSym indicates a repeated run, and if so loop collecting\n how many times to repeat the last literal. */\n if (nextSym === SYMBOL_RUNA || nextSym === SYMBOL_RUNB) {\n /* If this is the start of a new run, zero out counter */\n if (!runPos){\n runPos = 1;\n t = 0;\n }\n /* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at\n each bit position, add 1 or 2 instead. For example,\n 1011 is 1<<0 + 1<<1 + 2<<2. 1010 is 2<<0 + 2<<1 + 1<<2.\n You can make any bit pattern that way using 1 less symbol than\n the basic or 0/1 method (except all bits 0, which would use no\n symbols, but a run of length 0 doesn't mean anything in this\n context). Thus space is saved. */\n if (nextSym === SYMBOL_RUNA)\n t += runPos;\n else\n t += 2 * runPos;\n runPos <<= 1;\n continue;\n }\n /* When we hit the first non-run symbol after a run, we now know\n how many times to repeat the last literal, so append that many\n copies to our buffer of decoded symbols (dbuf) now. (The last\n literal used is the one at the head of the mtfSymbol array.) */\n if (runPos){\n runPos = 0;\n if (dbufCount + t > this.dbufSize) { _throw(Err.DATA_ERROR); }\n uc = symToByte[mtfSymbol[0]];\n byteCount[uc] += t;\n while (t--)\n dbuf[dbufCount++] = uc;\n }\n /* Is this the terminating symbol? */\n if (nextSym > symTotal)\n break;\n /* At this point, nextSym indicates a new literal character. Subtract\n one to get the position in the MTF array at which this literal is\n currently to be found. (Note that the result can't be -1 or 0,\n because 0 and 1 are RUNA and RUNB. But another instance of the\n first symbol in the mtf array, position 0, would have been handled\n as part of a run above. Therefore 1 unused mtf position minus\n 2 non-literal nextSym values equals -1.) */\n if (dbufCount >= this.dbufSize) { _throw(Err.DATA_ERROR); }\n i = nextSym - 1;\n uc = mtf(mtfSymbol, i);\n uc = symToByte[uc];\n /* We have our literal byte. Save it into dbuf. */\n byteCount[uc]++;\n dbuf[dbufCount++] = uc;\n }\n /* At this point, we've read all the huffman-coded symbols (and repeated\n runs) for this block from the input stream, and decoded them into the\n intermediate buffer. There are dbufCount many decoded bytes in dbuf[].\n Now undo the Burrows-Wheeler transform on dbuf.\n See http://dogma.net/markn/articles/bwt/bwt.htm\n */\n if (origPointer < 0 || origPointer >= dbufCount) { _throw(Err.DATA_ERROR); }\n /* Turn byteCount into cumulative occurrence counts of 0 to n-1. */\n j = 0;\n for (i = 0; i < 256; i++) {\n k = j + byteCount[i];\n byteCount[i] = j;\n j = k;\n }\n /* Figure out what order dbuf would be in if we sorted it. */\n for (i = 0; i < dbufCount; i++) {\n uc = dbuf[i] & 0xff;\n dbuf[byteCount[uc]] |= (i << 8);\n byteCount[uc]++;\n }\n /* Decode first byte by hand to initialize \"previous\" byte. Note that it\n doesn't get output, and if the first three characters are identical\n it doesn't qualify as a run (hence writeRunCountdown=5). */\n var pos = 0, current = 0, run = 0;\n if (dbufCount) {\n pos = dbuf[origPointer];\n current = (pos & 0xff);\n pos >>= 8;\n run = -1;\n }\n this.writePos = pos;\n this.writeCurrent = current;\n this.writeCount = dbufCount;\n this.writeRun = run;\n\n return true; /* more blocks to come */\n};\n/* Undo burrows-wheeler transform on intermediate buffer to produce output.\n If start_bunzip was initialized with out_fd=-1, then up to len bytes of\n data are written to outbuf. Return value is number of bytes written or\n error (all errors are negative numbers). If out_fd!=-1, outbuf and len\n are ignored, data is written to out_fd and return is RETVAL_OK or error.\n*/\nBunzip.prototype._read_bunzip = function(outputBuffer, len) {\n var copies, previous, outbyte;\n /* james@jamestaylor.org: writeCount goes to -1 when the buffer is fully\n decoded, which results in this returning RETVAL_LAST_BLOCK, also\n equal to -1... Confusing, I'm returning 0 here to indicate no\n bytes written into the buffer */\n if (this.writeCount < 0) { return 0; }\n\n var gotcount = 0;\n var dbuf = this.dbuf, pos = this.writePos, current = this.writeCurrent;\n var dbufCount = this.writeCount, outputsize = this.outputsize;\n var run = this.writeRun;\n\n while (dbufCount) {\n dbufCount--;\n previous = current;\n pos = dbuf[pos];\n current = pos & 0xff;\n pos >>= 8;\n if (run++ === 3){\n copies = current;\n outbyte = previous;\n current = -1;\n } else {\n copies = 1;\n outbyte = current;\n }\n this.blockCRC.updateCRCRun(outbyte, copies);\n while (copies--) {\n this.outputStream.writeByte(outbyte);\n this.nextoutput++;\n }\n if (current != previous)\n run = 0;\n }\n this.writeCount = dbufCount;\n // check CRC\n if (this.blockCRC.getCRC() !== this.targetBlockCRC) {\n _throw(Err.DATA_ERROR, \"Bad block CRC \"+\n \"(got \"+this.blockCRC.getCRC().toString(16)+\n \" expected \"+this.targetBlockCRC.toString(16)+\")\");\n }\n return this.nextoutput;\n};\n\nvar coerceInputStream = function(input) {\n if ('readByte' in input) { return input; }\n var inputStream = new Stream();\n inputStream.pos = 0;\n inputStream.readByte = function() { return input[this.pos++]; };\n inputStream.seek = function(pos) { this.pos = pos; };\n inputStream.eof = function() { return this.pos >= input.length; };\n return inputStream;\n};\nvar coerceOutputStream = function(output) {\n var outputStream = new Stream();\n var resizeOk = true;\n if (output) {\n if (typeof(output)==='number') {\n outputStream.buffer = new Uint8Array(output);\n resizeOk = false;\n } else if ('writeByte' in output) {\n return output;\n } else {\n outputStream.buffer = output;\n resizeOk = false;\n }\n } else {\n outputStream.buffer = new Uint8Array(16384);\n }\n outputStream.pos = 0;\n outputStream.writeByte = function(_byte) {\n if (resizeOk && this.pos >= this.buffer.length) {\n var newBuffer = new Uint8Array(this.buffer.length*2);\n newBuffer.set(this.buffer);\n this.buffer = newBuffer;\n }\n this.buffer[this.pos++] = _byte;\n };\n outputStream.getBuffer = function() {\n // trim buffer\n if (this.pos !== this.buffer.length) {\n if (!resizeOk)\n throw new TypeError('outputsize does not match decoded input');\n var newBuffer = new Uint8Array(this.pos);\n newBuffer.set(this.buffer.subarray(0, this.pos));\n this.buffer = newBuffer;\n }\n return this.buffer;\n };\n outputStream._coerced = true;\n return outputStream;\n};\n\n/* Static helper functions */\n// 'input' can be a stream or a buffer\n// 'output' can be a stream or a buffer or a number (buffer size)\nconst decode = function(input, output, multistream) {\n // make a stream from a buffer, if necessary\n var inputStream = coerceInputStream(input);\n var outputStream = coerceOutputStream(output);\n\n var bz = new Bunzip(inputStream, outputStream);\n while (true) {\n if ('eof' in inputStream && inputStream.eof()) break;\n if (bz._init_block()) {\n bz._read_bunzip();\n } else {\n var targetStreamCRC = bz.reader.read(32) >>> 0; // (convert to unsigned)\n if (targetStreamCRC !== bz.streamCRC) {\n _throw(Err.DATA_ERROR, \"Bad stream CRC \"+\n \"(got \"+bz.streamCRC.toString(16)+\n \" expected \"+targetStreamCRC.toString(16)+\")\");\n }\n if (multistream &&\n 'eof' in inputStream &&\n !inputStream.eof()) {\n // note that start_bunzip will also resync the bit reader to next byte\n bz._start_bunzip(inputStream, outputStream);\n } else break;\n }\n }\n if ('getBuffer' in outputStream)\n return outputStream.getBuffer();\n};\nconst decodeBlock = function(input, pos, output) {\n // make a stream from a buffer, if necessary\n var inputStream = coerceInputStream(input);\n var outputStream = coerceOutputStream(output);\n var bz = new Bunzip(inputStream, outputStream);\n bz.reader.seek(pos);\n /* Fill the decode buffer for the block */\n var moreBlocks = bz._get_next_block();\n if (moreBlocks) {\n /* Init the CRC for writing */\n bz.blockCRC = new CRC32();\n\n /* Zero this so the current byte from before the seek is not written */\n bz.writeCopies = 0;\n\n /* Decompress the block and write to stdout */\n bz._read_bunzip();\n // XXX keep writing?\n }\n if ('getBuffer' in outputStream)\n return outputStream.getBuffer();\n};\n/* Reads bzip2 file from stream or buffer `input`, and invoke\n * `callback(position, size)` once for each bzip2 block,\n * where position gives the starting position (in *bits*)\n * and size gives uncompressed size of the block (in *bytes*). */\nconst table = function(input, callback, multistream) {\n // make a stream from a buffer, if necessary\n var inputStream = new Stream();\n inputStream.delegate = coerceInputStream(input);\n inputStream.pos = 0;\n inputStream.readByte = function() {\n this.pos++;\n return this.delegate.readByte();\n };\n if (inputStream.delegate.eof) {\n inputStream.eof = inputStream.delegate.eof.bind(inputStream.delegate);\n }\n var outputStream = new Stream();\n outputStream.pos = 0;\n outputStream.writeByte = function() { this.pos++; };\n\n var bz = new Bunzip(inputStream, outputStream);\n var blockSize = bz.dbufSize;\n while (true) {\n if ('eof' in inputStream && inputStream.eof()) break;\n\n var position = inputStream.pos*8 + bz.reader.bitOffset;\n if (bz.reader.hasByte) { position -= 8; }\n\n if (bz._init_block()) {\n var start = outputStream.pos;\n bz._read_bunzip();\n callback(position, outputStream.pos - start);\n } else {\n var crc = bz.reader.read(32); // (but we ignore the crc)\n if (multistream &&\n 'eof' in inputStream &&\n !inputStream.eof()) {\n // note that start_bunzip will also resync the bit reader to next byte\n bz._start_bunzip(inputStream, outputStream);\n console.assert(bz.dbufSize === blockSize,\n \"shouldn't change block size within multistream file\");\n } else break;\n }\n }\n};\n\nmodule.exports = {\n Bunzip,\n Stream,\n Err,\n decode,\n decodeBlock,\n table\n};\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport enums from '../enums';\nimport util from '../util';\n\n/**\n * Implementation of the Literal Data Packet (Tag 11)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.9|RFC4880 5.9}:\n * A Literal Data packet contains the body of a message; data that is not to be\n * further interpreted.\n */\nclass LiteralDataPacket {\n static get tag() {\n return enums.packet.literalData;\n }\n\n /**\n * @param {Date} date - The creation date of the literal package\n */\n constructor(date = new Date()) {\n this.format = enums.literal.utf8; // default format for literal data packets\n this.date = util.normalizeDate(date);\n this.text = null; // textual data representation\n this.data = null; // literal data representation\n this.filename = '';\n }\n\n /**\n * Set the packet data to a javascript native string, end of line\n * will be normalized to \\r\\n and by default text is converted to UTF8\n * @param {String | ReadableStream} text - Any native javascript string\n * @param {enums.literal} [format] - The format of the string of bytes\n */\n setText(text, format = enums.literal.utf8) {\n this.format = format;\n this.text = text;\n this.data = null;\n }\n\n /**\n * Returns literal data packets as native JavaScript string\n * with normalized end of line to \\n\n * @param {Boolean} [clone] - Whether to return a clone so that getBytes/getText can be called again\n * @returns {String | ReadableStream} Literal data as text.\n */\n getText(clone = false) {\n if (this.text === null || util.isStream(this.text)) { // Assume that this.text has been read\n this.text = util.decodeUTF8(util.nativeEOL(this.getBytes(clone)));\n }\n return this.text;\n }\n\n /**\n * Set the packet data to value represented by the provided string of bytes.\n * @param {Uint8Array | ReadableStream} bytes - The string of bytes\n * @param {enums.literal} format - The format of the string of bytes\n */\n setBytes(bytes, format) {\n this.format = format;\n this.data = bytes;\n this.text = null;\n }\n\n\n /**\n * Get the byte sequence representing the literal packet data\n * @param {Boolean} [clone] - Whether to return a clone so that getBytes/getText can be called again\n * @returns {Uint8Array | ReadableStream} A sequence of bytes.\n */\n getBytes(clone = false) {\n if (this.data === null) {\n // encode UTF8 and normalize EOL to \\r\\n\n this.data = util.canonicalizeEOL(util.encodeUTF8(this.text));\n }\n if (clone) {\n return stream.passiveClone(this.data);\n }\n return this.data;\n }\n\n\n /**\n * Sets the filename of the literal packet data\n * @param {String} filename - Any native javascript string\n */\n setFilename(filename) {\n this.filename = filename;\n }\n\n\n /**\n * Get the filename of the literal packet data\n * @returns {String} Filename.\n */\n getFilename() {\n return this.filename;\n }\n\n /**\n * Parsing function for a literal data packet (tag 11).\n *\n * @param {Uint8Array | ReadableStream} input - Payload of a tag 11 packet\n * @returns {Promise} Object representation.\n * @async\n */\n async read(bytes) {\n await stream.parse(bytes, async reader => {\n // - A one-octet field that describes how the data is formatted.\n const format = await reader.readByte(); // enums.literal\n\n const filename_len = await reader.readByte();\n this.filename = util.decodeUTF8(await reader.readBytes(filename_len));\n\n this.date = util.readDate(await reader.readBytes(4));\n\n let data = reader.remainder();\n if (stream.isArrayStream(data)) data = await stream.readToEnd(data);\n this.setBytes(data, format);\n });\n }\n\n /**\n * Creates a Uint8Array representation of the packet, excluding the data\n *\n * @returns {Uint8Array} Uint8Array representation of the packet.\n */\n writeHeader() {\n const filename = util.encodeUTF8(this.filename);\n const filename_length = new Uint8Array([filename.length]);\n\n const format = new Uint8Array([this.format]);\n const date = util.writeDate(this.date);\n\n return util.concatUint8Array([format, filename_length, filename, date]);\n }\n\n /**\n * Creates a Uint8Array representation of the packet\n *\n * @returns {Uint8Array | ReadableStream} Uint8Array representation of the packet.\n */\n write() {\n const header = this.writeHeader();\n const data = this.getBytes();\n\n return util.concat([header, data]);\n }\n}\n\nexport default LiteralDataPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport { readSimpleLength, UnsupportedError, writeSimpleLength } from './packet';\nimport KeyID from '../type/keyid';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\n\n// Symbol to store cryptographic validity of the signature, to avoid recomputing multiple times on verification.\nconst verified = Symbol('verified');\n\n// GPG puts the Issuer and Signature subpackets in the unhashed area.\n// Tampering with those invalidates the signature, so we still trust them and parse them.\n// All other unhashed subpackets are ignored.\nconst allowedUnhashedSubpackets = new Set([\n enums.signatureSubpacket.issuer,\n enums.signatureSubpacket.issuerFingerprint,\n enums.signatureSubpacket.embeddedSignature\n]);\n\n/**\n * Implementation of the Signature Packet (Tag 2)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.2|RFC4480 5.2}:\n * A Signature packet describes a binding between some public key and\n * some data. The most common signatures are a signature of a file or a\n * block of text, and a signature that is a certification of a User ID.\n */\nclass SignaturePacket {\n static get tag() {\n return enums.packet.signature;\n }\n\n constructor() {\n this.version = null;\n /** @type {enums.signature} */\n this.signatureType = null;\n /** @type {enums.hash} */\n this.hashAlgorithm = null;\n /** @type {enums.publicKey} */\n this.publicKeyAlgorithm = null;\n\n this.signatureData = null;\n this.unhashedSubpackets = [];\n this.signedHashValue = null;\n\n this.created = null;\n this.signatureExpirationTime = null;\n this.signatureNeverExpires = true;\n this.exportable = null;\n this.trustLevel = null;\n this.trustAmount = null;\n this.regularExpression = null;\n this.revocable = null;\n this.keyExpirationTime = null;\n this.keyNeverExpires = null;\n this.preferredSymmetricAlgorithms = null;\n this.revocationKeyClass = null;\n this.revocationKeyAlgorithm = null;\n this.revocationKeyFingerprint = null;\n this.issuerKeyID = new KeyID();\n this.rawNotations = [];\n this.notations = {};\n this.preferredHashAlgorithms = null;\n this.preferredCompressionAlgorithms = null;\n this.keyServerPreferences = null;\n this.preferredKeyServer = null;\n this.isPrimaryUserID = null;\n this.policyURI = null;\n this.keyFlags = null;\n this.signersUserID = null;\n this.reasonForRevocationFlag = null;\n this.reasonForRevocationString = null;\n this.features = null;\n this.signatureTargetPublicKeyAlgorithm = null;\n this.signatureTargetHashAlgorithm = null;\n this.signatureTargetHash = null;\n this.embeddedSignature = null;\n this.issuerKeyVersion = null;\n this.issuerFingerprint = null;\n this.preferredAEADAlgorithms = null;\n\n this.revoked = null;\n this[verified] = null;\n }\n\n /**\n * parsing function for a signature packet (tag 2).\n * @param {String} bytes - Payload of a tag 2 packet\n * @returns {SignaturePacket} Object representation.\n */\n read(bytes) {\n let i = 0;\n this.version = bytes[i++];\n\n if (this.version !== 4 && this.version !== 5) {\n throw new UnsupportedError(`Version ${this.version} of the signature packet is unsupported.`);\n }\n\n this.signatureType = bytes[i++];\n this.publicKeyAlgorithm = bytes[i++];\n this.hashAlgorithm = bytes[i++];\n\n // hashed subpackets\n i += this.readSubPackets(bytes.subarray(i, bytes.length), true);\n if (!this.created) {\n throw new Error('Missing signature creation time subpacket.');\n }\n\n // A V4 signature hashes the packet body\n // starting from its first field, the version number, through the end\n // of the hashed subpacket data. Thus, the fields hashed are the\n // signature version, the signature type, the public-key algorithm, the\n // hash algorithm, the hashed subpacket length, and the hashed\n // subpacket body.\n this.signatureData = bytes.subarray(0, i);\n\n // unhashed subpackets\n i += this.readSubPackets(bytes.subarray(i, bytes.length), false);\n\n // Two-octet field holding left 16 bits of signed hash value.\n this.signedHashValue = bytes.subarray(i, i + 2);\n i += 2;\n\n this.params = crypto.signature.parseSignatureParams(this.publicKeyAlgorithm, bytes.subarray(i, bytes.length));\n }\n\n /**\n * @returns {Uint8Array | ReadableStream}\n */\n writeParams() {\n if (this.params instanceof Promise) {\n return stream.fromAsync(\n async () => crypto.serializeParams(this.publicKeyAlgorithm, await this.params)\n );\n }\n return crypto.serializeParams(this.publicKeyAlgorithm, this.params);\n }\n\n write() {\n const arr = [];\n arr.push(this.signatureData);\n arr.push(this.writeUnhashedSubPackets());\n arr.push(this.signedHashValue);\n arr.push(this.writeParams());\n return util.concat(arr);\n }\n\n /**\n * Signs provided data. This needs to be done prior to serialization.\n * @param {SecretKeyPacket} key - Private key used to sign the message.\n * @param {Object} data - Contains packets to be signed.\n * @param {Date} [date] - The signature creation time.\n * @param {Boolean} [detached] - Whether to create a detached signature\n * @throws {Error} if signing failed\n * @async\n */\n async sign(key, data, date = new Date(), detached = false) {\n if (key.version === 5) {\n this.version = 5;\n } else {\n this.version = 4;\n }\n const arr = [new Uint8Array([this.version, this.signatureType, this.publicKeyAlgorithm, this.hashAlgorithm])];\n\n this.created = util.normalizeDate(date);\n this.issuerKeyVersion = key.version;\n this.issuerFingerprint = key.getFingerprintBytes();\n this.issuerKeyID = key.getKeyID();\n\n // Add hashed subpackets\n arr.push(this.writeHashedSubPackets());\n\n // Remove unhashed subpackets, in case some allowed unhashed\n // subpackets existed, in order not to duplicate them (in both\n // the hashed and unhashed subpackets) when re-signing.\n this.unhashedSubpackets = [];\n\n this.signatureData = util.concat(arr);\n\n const toHash = this.toHash(this.signatureType, data, detached);\n const hash = await this.hash(this.signatureType, data, toHash, detached);\n\n this.signedHashValue = stream.slice(stream.clone(hash), 0, 2);\n const signed = async () => crypto.signature.sign(\n this.publicKeyAlgorithm, this.hashAlgorithm, key.publicParams, key.privateParams, toHash, await stream.readToEnd(hash)\n );\n if (util.isStream(hash)) {\n this.params = signed();\n } else {\n this.params = await signed();\n\n // Store the fact that this signature is valid, e.g. for when we call `await\n // getLatestValidSignature(this.revocationSignatures, key, data)` later.\n // Note that this only holds up if the key and data passed to verify are the\n // same as the ones passed to sign.\n this[verified] = true;\n }\n }\n\n /**\n * Creates Uint8Array of bytes of all subpacket data except Issuer and Embedded Signature subpackets\n * @returns {Uint8Array} Subpacket data.\n */\n writeHashedSubPackets() {\n const sub = enums.signatureSubpacket;\n const arr = [];\n let bytes;\n if (this.created === null) {\n throw new Error('Missing signature creation time');\n }\n arr.push(writeSubPacket(sub.signatureCreationTime, true, util.writeDate(this.created)));\n if (this.signatureExpirationTime !== null) {\n arr.push(writeSubPacket(sub.signatureExpirationTime, true, util.writeNumber(this.signatureExpirationTime, 4)));\n }\n if (this.exportable !== null) {\n arr.push(writeSubPacket(sub.exportableCertification, true, new Uint8Array([this.exportable ? 1 : 0])));\n }\n if (this.trustLevel !== null) {\n bytes = new Uint8Array([this.trustLevel, this.trustAmount]);\n arr.push(writeSubPacket(sub.trustSignature, true, bytes));\n }\n if (this.regularExpression !== null) {\n arr.push(writeSubPacket(sub.regularExpression, true, this.regularExpression));\n }\n if (this.revocable !== null) {\n arr.push(writeSubPacket(sub.revocable, true, new Uint8Array([this.revocable ? 1 : 0])));\n }\n if (this.keyExpirationTime !== null) {\n arr.push(writeSubPacket(sub.keyExpirationTime, true, util.writeNumber(this.keyExpirationTime, 4)));\n }\n if (this.preferredSymmetricAlgorithms !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.preferredSymmetricAlgorithms));\n arr.push(writeSubPacket(sub.preferredSymmetricAlgorithms, false, bytes));\n }\n if (this.revocationKeyClass !== null) {\n bytes = new Uint8Array([this.revocationKeyClass, this.revocationKeyAlgorithm]);\n bytes = util.concat([bytes, this.revocationKeyFingerprint]);\n arr.push(writeSubPacket(sub.revocationKey, false, bytes));\n }\n if (!this.issuerKeyID.isNull() && this.issuerKeyVersion !== 5) {\n // If the version of [the] key is greater than 4, this subpacket\n // MUST NOT be included in the signature.\n arr.push(writeSubPacket(sub.issuer, true, this.issuerKeyID.write()));\n }\n this.rawNotations.forEach(({ name, value, humanReadable, critical }) => {\n bytes = [new Uint8Array([humanReadable ? 0x80 : 0, 0, 0, 0])];\n const encodedName = util.encodeUTF8(name);\n // 2 octets of name length\n bytes.push(util.writeNumber(encodedName.length, 2));\n // 2 octets of value length\n bytes.push(util.writeNumber(value.length, 2));\n bytes.push(encodedName);\n bytes.push(value);\n bytes = util.concat(bytes);\n arr.push(writeSubPacket(sub.notationData, critical, bytes));\n });\n if (this.preferredHashAlgorithms !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.preferredHashAlgorithms));\n arr.push(writeSubPacket(sub.preferredHashAlgorithms, false, bytes));\n }\n if (this.preferredCompressionAlgorithms !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.preferredCompressionAlgorithms));\n arr.push(writeSubPacket(sub.preferredCompressionAlgorithms, false, bytes));\n }\n if (this.keyServerPreferences !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.keyServerPreferences));\n arr.push(writeSubPacket(sub.keyServerPreferences, false, bytes));\n }\n if (this.preferredKeyServer !== null) {\n arr.push(writeSubPacket(sub.preferredKeyServer, false, util.encodeUTF8(this.preferredKeyServer)));\n }\n if (this.isPrimaryUserID !== null) {\n arr.push(writeSubPacket(sub.primaryUserID, false, new Uint8Array([this.isPrimaryUserID ? 1 : 0])));\n }\n if (this.policyURI !== null) {\n arr.push(writeSubPacket(sub.policyURI, false, util.encodeUTF8(this.policyURI)));\n }\n if (this.keyFlags !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.keyFlags));\n arr.push(writeSubPacket(sub.keyFlags, true, bytes));\n }\n if (this.signersUserID !== null) {\n arr.push(writeSubPacket(sub.signersUserID, false, util.encodeUTF8(this.signersUserID)));\n }\n if (this.reasonForRevocationFlag !== null) {\n bytes = util.stringToUint8Array(String.fromCharCode(this.reasonForRevocationFlag) + this.reasonForRevocationString);\n arr.push(writeSubPacket(sub.reasonForRevocation, true, bytes));\n }\n if (this.features !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.features));\n arr.push(writeSubPacket(sub.features, false, bytes));\n }\n if (this.signatureTargetPublicKeyAlgorithm !== null) {\n bytes = [new Uint8Array([this.signatureTargetPublicKeyAlgorithm, this.signatureTargetHashAlgorithm])];\n bytes.push(util.stringToUint8Array(this.signatureTargetHash));\n bytes = util.concat(bytes);\n arr.push(writeSubPacket(sub.signatureTarget, true, bytes));\n }\n if (this.embeddedSignature !== null) {\n arr.push(writeSubPacket(sub.embeddedSignature, true, this.embeddedSignature.write()));\n }\n if (this.issuerFingerprint !== null) {\n bytes = [new Uint8Array([this.issuerKeyVersion]), this.issuerFingerprint];\n bytes = util.concat(bytes);\n arr.push(writeSubPacket(sub.issuerFingerprint, this.version === 5, bytes));\n }\n if (this.preferredAEADAlgorithms !== null) {\n bytes = util.stringToUint8Array(util.uint8ArrayToString(this.preferredAEADAlgorithms));\n arr.push(writeSubPacket(sub.preferredAEADAlgorithms, false, bytes));\n }\n\n const result = util.concat(arr);\n const length = util.writeNumber(result.length, 2);\n\n return util.concat([length, result]);\n }\n\n /**\n * Creates an Uint8Array containing the unhashed subpackets\n * @returns {Uint8Array} Subpacket data.\n */\n writeUnhashedSubPackets() {\n const arr = [];\n this.unhashedSubpackets.forEach(data => {\n arr.push(writeSimpleLength(data.length));\n arr.push(data);\n });\n\n const result = util.concat(arr);\n const length = util.writeNumber(result.length, 2);\n\n return util.concat([length, result]);\n }\n\n // V4 signature sub packets\n readSubPacket(bytes, hashed = true) {\n let mypos = 0;\n\n // The leftmost bit denotes a \"critical\" packet\n const critical = !!(bytes[mypos] & 0x80);\n const type = bytes[mypos] & 0x7F;\n\n if (!hashed) {\n this.unhashedSubpackets.push(bytes.subarray(mypos, bytes.length));\n if (!allowedUnhashedSubpackets.has(type)) {\n return;\n }\n }\n\n mypos++;\n\n // subpacket type\n switch (type) {\n case enums.signatureSubpacket.signatureCreationTime:\n // Signature Creation Time\n this.created = util.readDate(bytes.subarray(mypos, bytes.length));\n break;\n case enums.signatureSubpacket.signatureExpirationTime: {\n // Signature Expiration Time in seconds\n const seconds = util.readNumber(bytes.subarray(mypos, bytes.length));\n\n this.signatureNeverExpires = seconds === 0;\n this.signatureExpirationTime = seconds;\n\n break;\n }\n case enums.signatureSubpacket.exportableCertification:\n // Exportable Certification\n this.exportable = bytes[mypos++] === 1;\n break;\n case enums.signatureSubpacket.trustSignature:\n // Trust Signature\n this.trustLevel = bytes[mypos++];\n this.trustAmount = bytes[mypos++];\n break;\n case enums.signatureSubpacket.regularExpression:\n // Regular Expression\n this.regularExpression = bytes[mypos];\n break;\n case enums.signatureSubpacket.revocable:\n // Revocable\n this.revocable = bytes[mypos++] === 1;\n break;\n case enums.signatureSubpacket.keyExpirationTime: {\n // Key Expiration Time in seconds\n const seconds = util.readNumber(bytes.subarray(mypos, bytes.length));\n\n this.keyExpirationTime = seconds;\n this.keyNeverExpires = seconds === 0;\n\n break;\n }\n case enums.signatureSubpacket.preferredSymmetricAlgorithms:\n // Preferred Symmetric Algorithms\n this.preferredSymmetricAlgorithms = [...bytes.subarray(mypos, bytes.length)];\n break;\n case enums.signatureSubpacket.revocationKey:\n // Revocation Key\n // (1 octet of class, 1 octet of public-key algorithm ID, 20\n // octets of\n // fingerprint)\n this.revocationKeyClass = bytes[mypos++];\n this.revocationKeyAlgorithm = bytes[mypos++];\n this.revocationKeyFingerprint = bytes.subarray(mypos, mypos + 20);\n break;\n\n case enums.signatureSubpacket.issuer:\n // Issuer\n this.issuerKeyID.read(bytes.subarray(mypos, bytes.length));\n break;\n\n case enums.signatureSubpacket.notationData: {\n // Notation Data\n const humanReadable = !!(bytes[mypos] & 0x80);\n\n // We extract key/value tuple from the byte stream.\n mypos += 4;\n const m = util.readNumber(bytes.subarray(mypos, mypos + 2));\n mypos += 2;\n const n = util.readNumber(bytes.subarray(mypos, mypos + 2));\n mypos += 2;\n\n const name = util.decodeUTF8(bytes.subarray(mypos, mypos + m));\n const value = bytes.subarray(mypos + m, mypos + m + n);\n\n this.rawNotations.push({ name, humanReadable, value, critical });\n\n if (humanReadable) {\n this.notations[name] = util.decodeUTF8(value);\n }\n break;\n }\n case enums.signatureSubpacket.preferredHashAlgorithms:\n // Preferred Hash Algorithms\n this.preferredHashAlgorithms = [...bytes.subarray(mypos, bytes.length)];\n break;\n case enums.signatureSubpacket.preferredCompressionAlgorithms:\n // Preferred Compression Algorithms\n this.preferredCompressionAlgorithms = [...bytes.subarray(mypos, bytes.length)];\n break;\n case enums.signatureSubpacket.keyServerPreferences:\n // Key Server Preferences\n this.keyServerPreferences = [...bytes.subarray(mypos, bytes.length)];\n break;\n case enums.signatureSubpacket.preferredKeyServer:\n // Preferred Key Server\n this.preferredKeyServer = util.decodeUTF8(bytes.subarray(mypos, bytes.length));\n break;\n case enums.signatureSubpacket.primaryUserID:\n // Primary User ID\n this.isPrimaryUserID = bytes[mypos++] !== 0;\n break;\n case enums.signatureSubpacket.policyURI:\n // Policy URI\n this.policyURI = util.decodeUTF8(bytes.subarray(mypos, bytes.length));\n break;\n case enums.signatureSubpacket.keyFlags:\n // Key Flags\n this.keyFlags = [...bytes.subarray(mypos, bytes.length)];\n break;\n case enums.signatureSubpacket.signersUserID:\n // Signer's User ID\n this.signersUserID = util.decodeUTF8(bytes.subarray(mypos, bytes.length));\n break;\n case enums.signatureSubpacket.reasonForRevocation:\n // Reason for Revocation\n this.reasonForRevocationFlag = bytes[mypos++];\n this.reasonForRevocationString = util.decodeUTF8(bytes.subarray(mypos, bytes.length));\n break;\n case enums.signatureSubpacket.features:\n // Features\n this.features = [...bytes.subarray(mypos, bytes.length)];\n break;\n case enums.signatureSubpacket.signatureTarget: {\n // Signature Target\n // (1 octet public-key algorithm, 1 octet hash algorithm, N octets hash)\n this.signatureTargetPublicKeyAlgorithm = bytes[mypos++];\n this.signatureTargetHashAlgorithm = bytes[mypos++];\n\n const len = crypto.getHashByteLength(this.signatureTargetHashAlgorithm);\n\n this.signatureTargetHash = util.uint8ArrayToString(bytes.subarray(mypos, mypos + len));\n break;\n }\n case enums.signatureSubpacket.embeddedSignature:\n // Embedded Signature\n this.embeddedSignature = new SignaturePacket();\n this.embeddedSignature.read(bytes.subarray(mypos, bytes.length));\n break;\n case enums.signatureSubpacket.issuerFingerprint:\n // Issuer Fingerprint\n this.issuerKeyVersion = bytes[mypos++];\n this.issuerFingerprint = bytes.subarray(mypos, bytes.length);\n if (this.issuerKeyVersion === 5) {\n this.issuerKeyID.read(this.issuerFingerprint);\n } else {\n this.issuerKeyID.read(this.issuerFingerprint.subarray(-8));\n }\n break;\n case enums.signatureSubpacket.preferredAEADAlgorithms:\n // Preferred AEAD Algorithms\n this.preferredAEADAlgorithms = [...bytes.subarray(mypos, bytes.length)];\n break;\n default: {\n const err = new Error(`Unknown signature subpacket type ${type}`);\n if (critical) {\n throw err;\n } else {\n util.printDebug(err);\n }\n }\n }\n }\n\n readSubPackets(bytes, trusted = true, config) {\n // Two-octet scalar octet count for following subpacket data.\n const subpacketLength = util.readNumber(bytes.subarray(0, 2));\n\n let i = 2;\n\n // subpacket data set (zero or more subpackets)\n while (i < 2 + subpacketLength) {\n const len = readSimpleLength(bytes.subarray(i, bytes.length));\n i += len.offset;\n\n this.readSubPacket(bytes.subarray(i, i + len.len), trusted, config);\n\n i += len.len;\n }\n\n return i;\n }\n\n // Produces data to produce signature on\n toSign(type, data) {\n const t = enums.signature;\n\n switch (type) {\n case t.binary:\n if (data.text !== null) {\n return util.encodeUTF8(data.getText(true));\n }\n return data.getBytes(true);\n\n case t.text: {\n const bytes = data.getBytes(true);\n // normalize EOL to \\r\\n\n return util.canonicalizeEOL(bytes);\n }\n case t.standalone:\n return new Uint8Array(0);\n\n case t.certGeneric:\n case t.certPersona:\n case t.certCasual:\n case t.certPositive:\n case t.certRevocation: {\n let packet;\n let tag;\n\n if (data.userID) {\n tag = 0xB4;\n packet = data.userID;\n } else if (data.userAttribute) {\n tag = 0xD1;\n packet = data.userAttribute;\n } else {\n throw new Error('Either a userID or userAttribute packet needs to be ' +\n 'supplied for certification.');\n }\n\n const bytes = packet.write();\n\n return util.concat([this.toSign(t.key, data),\n new Uint8Array([tag]),\n util.writeNumber(bytes.length, 4),\n bytes]);\n }\n case t.subkeyBinding:\n case t.subkeyRevocation:\n case t.keyBinding:\n return util.concat([this.toSign(t.key, data), this.toSign(t.key, {\n key: data.bind\n })]);\n\n case t.key:\n if (data.key === undefined) {\n throw new Error('Key packet is required for this signature.');\n }\n return data.key.writeForHash(this.version);\n\n case t.keyRevocation:\n return this.toSign(t.key, data);\n case t.timestamp:\n return new Uint8Array(0);\n case t.thirdParty:\n throw new Error('Not implemented');\n default:\n throw new Error('Unknown signature type.');\n }\n }\n\n calculateTrailer(data, detached) {\n let length = 0;\n return stream.transform(stream.clone(this.signatureData), value => {\n length += value.length;\n }, () => {\n const arr = [];\n if (this.version === 5 && (this.signatureType === enums.signature.binary || this.signatureType === enums.signature.text)) {\n if (detached) {\n arr.push(new Uint8Array(6));\n } else {\n arr.push(data.writeHeader());\n }\n }\n arr.push(new Uint8Array([this.version, 0xFF]));\n if (this.version === 5) {\n arr.push(new Uint8Array(4));\n }\n arr.push(util.writeNumber(length, 4));\n // For v5, this should really be writeNumber(length, 8) rather than the\n // hardcoded 4 zero bytes above\n return util.concat(arr);\n });\n }\n\n toHash(signatureType, data, detached = false) {\n const bytes = this.toSign(signatureType, data);\n\n return util.concat([bytes, this.signatureData, this.calculateTrailer(data, detached)]);\n }\n\n async hash(signatureType, data, toHash, detached = false) {\n if (!toHash) toHash = this.toHash(signatureType, data, detached);\n return crypto.hash.digest(this.hashAlgorithm, toHash);\n }\n\n /**\n * verifies the signature packet. Note: not all signature types are implemented\n * @param {PublicSubkeyPacket|PublicKeyPacket|\n * SecretSubkeyPacket|SecretKeyPacket} key - the public key to verify the signature\n * @param {module:enums.signature} signatureType - Expected signature type\n * @param {Uint8Array|Object} data - Data which on the signature applies\n * @param {Date} [date] - Use the given date instead of the current time to check for signature validity and expiration\n * @param {Boolean} [detached] - Whether to verify a detached signature\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if signature validation failed\n * @async\n */\n async verify(key, signatureType, data, date = new Date(), detached = false, config = defaultConfig) {\n if (!this.issuerKeyID.equals(key.getKeyID())) {\n throw new Error('Signature was not issued by the given public key');\n }\n if (this.publicKeyAlgorithm !== key.algorithm) {\n throw new Error('Public key algorithm used to sign signature does not match issuer key algorithm.');\n }\n\n const isMessageSignature = signatureType === enums.signature.binary || signatureType === enums.signature.text;\n // Cryptographic validity is cached after one successful verification.\n // However, for message signatures, we always re-verify, since the passed `data` can change\n const skipVerify = this[verified] && !isMessageSignature;\n if (!skipVerify) {\n let toHash;\n let hash;\n if (this.hashed) {\n hash = await this.hashed;\n } else {\n toHash = this.toHash(signatureType, data, detached);\n hash = await this.hash(signatureType, data, toHash);\n }\n hash = await stream.readToEnd(hash);\n if (this.signedHashValue[0] !== hash[0] ||\n this.signedHashValue[1] !== hash[1]) {\n throw new Error('Signed digest did not match');\n }\n\n this.params = await this.params;\n\n this[verified] = await crypto.signature.verify(\n this.publicKeyAlgorithm, this.hashAlgorithm, this.params, key.publicParams,\n toHash, hash\n );\n\n if (!this[verified]) {\n throw new Error('Signature verification failed');\n }\n }\n\n const normDate = util.normalizeDate(date);\n if (normDate && this.created > normDate) {\n throw new Error('Signature creation time is in the future');\n }\n if (normDate && normDate >= this.getExpirationTime()) {\n throw new Error('Signature is expired');\n }\n if (config.rejectHashAlgorithms.has(this.hashAlgorithm)) {\n throw new Error('Insecure hash algorithm: ' + enums.read(enums.hash, this.hashAlgorithm).toUpperCase());\n }\n if (config.rejectMessageHashAlgorithms.has(this.hashAlgorithm) &&\n [enums.signature.binary, enums.signature.text].includes(this.signatureType)) {\n throw new Error('Insecure message hash algorithm: ' + enums.read(enums.hash, this.hashAlgorithm).toUpperCase());\n }\n this.rawNotations.forEach(({ name, critical }) => {\n if (critical && (config.knownNotations.indexOf(name) < 0)) {\n throw new Error(`Unknown critical notation: ${name}`);\n }\n });\n if (this.revocationKeyClass !== null) {\n throw new Error('This key is intended to be revoked with an authorized key, which OpenPGP.js does not support.');\n }\n }\n\n /**\n * Verifies signature expiration date\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @returns {Boolean} True if expired.\n */\n isExpired(date = new Date()) {\n const normDate = util.normalizeDate(date);\n if (normDate !== null) {\n return !(this.created <= normDate && normDate < this.getExpirationTime());\n }\n return false;\n }\n\n /**\n * Returns the expiration time of the signature or Infinity if signature does not expire\n * @returns {Date | Infinity} Expiration time.\n */\n getExpirationTime() {\n return this.signatureNeverExpires ? Infinity : new Date(this.created.getTime() + this.signatureExpirationTime * 1000);\n }\n}\n\nexport default SignaturePacket;\n\n/**\n * Creates a Uint8Array representation of a sub signature packet\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.1|RFC4880 5.2.3.1}\n * @see {@link https://tools.ietf.org/html/rfc4880#section-5.2.3.2|RFC4880 5.2.3.2}\n * @param {Integer} type - Subpacket signature type.\n * @param {Boolean} critical - Whether the subpacket should be critical.\n * @param {String} data - Data to be included\n * @returns {Uint8Array} The signature subpacket.\n * @private\n */\nfunction writeSubPacket(type, critical, data) {\n const arr = [];\n arr.push(writeSimpleLength(data.length + 1));\n arr.push(new Uint8Array([(critical ? 0x80 : 0) | type]));\n arr.push(data);\n return util.concat(arr);\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport SignaturePacket from './signature';\nimport KeyID from '../type/keyid';\nimport enums from '../enums';\nimport util from '../util';\nimport { UnsupportedError } from './packet';\n\nconst VERSION = 3;\n\n/**\n * Implementation of the One-Pass Signature Packets (Tag 4)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.4|RFC4880 5.4}:\n * The One-Pass Signature packet precedes the signed data and contains\n * enough information to allow the receiver to begin calculating any\n * hashes needed to verify the signature. It allows the Signature\n * packet to be placed at the end of the message, so that the signer\n * can compute the entire signed message in one pass.\n */\nclass OnePassSignaturePacket {\n static get tag() {\n return enums.packet.onePassSignature;\n }\n\n constructor() {\n /** A one-octet version number. The current version is 3. */\n this.version = null;\n /**\n * A one-octet signature type.\n * Signature types are described in\n * {@link https://tools.ietf.org/html/rfc4880#section-5.2.1|RFC4880 Section 5.2.1}.\n * @type {enums.signature}\n\n */\n this.signatureType = null;\n /**\n * A one-octet number describing the hash algorithm used.\n * @see {@link https://tools.ietf.org/html/rfc4880#section-9.4|RFC4880 9.4}\n * @type {enums.hash}\n */\n this.hashAlgorithm = null;\n /**\n * A one-octet number describing the public-key algorithm used.\n * @see {@link https://tools.ietf.org/html/rfc4880#section-9.1|RFC4880 9.1}\n * @type {enums.publicKey}\n */\n this.publicKeyAlgorithm = null;\n /** An eight-octet number holding the Key ID of the signing key. */\n this.issuerKeyID = null;\n /**\n * A one-octet number holding a flag showing whether the signature is nested.\n * A zero value indicates that the next packet is another One-Pass Signature packet\n * that describes another signature to be applied to the same message data.\n */\n this.flags = null;\n }\n\n /**\n * parsing function for a one-pass signature packet (tag 4).\n * @param {Uint8Array} bytes - Payload of a tag 4 packet\n * @returns {OnePassSignaturePacket} Object representation.\n */\n read(bytes) {\n let mypos = 0;\n // A one-octet version number. The current version is 3.\n this.version = bytes[mypos++];\n if (this.version !== VERSION) {\n throw new UnsupportedError(`Version ${this.version} of the one-pass signature packet is unsupported.`);\n }\n\n // A one-octet signature type. Signature types are described in\n // Section 5.2.1.\n this.signatureType = bytes[mypos++];\n\n // A one-octet number describing the hash algorithm used.\n this.hashAlgorithm = bytes[mypos++];\n\n // A one-octet number describing the public-key algorithm used.\n this.publicKeyAlgorithm = bytes[mypos++];\n\n // An eight-octet number holding the Key ID of the signing key.\n this.issuerKeyID = new KeyID();\n this.issuerKeyID.read(bytes.subarray(mypos, mypos + 8));\n mypos += 8;\n\n // A one-octet number holding a flag showing whether the signature\n // is nested. A zero value indicates that the next packet is\n // another One-Pass Signature packet that describes another\n // signature to be applied to the same message data.\n this.flags = bytes[mypos++];\n return this;\n }\n\n /**\n * creates a string representation of a one-pass signature packet\n * @returns {Uint8Array} A Uint8Array representation of a one-pass signature packet.\n */\n write() {\n const start = new Uint8Array([VERSION, this.signatureType, this.hashAlgorithm, this.publicKeyAlgorithm]);\n\n const end = new Uint8Array([this.flags]);\n\n return util.concatUint8Array([start, this.issuerKeyID.write(), end]);\n }\n\n calculateTrailer(...args) {\n return stream.fromAsync(async () => SignaturePacket.prototype.calculateTrailer.apply(await this.correspondingSig, args));\n }\n\n async verify() {\n const correspondingSig = await this.correspondingSig;\n if (!correspondingSig || correspondingSig.constructor.tag !== enums.packet.signature) {\n throw new Error('Corresponding signature packet missing');\n }\n if (\n correspondingSig.signatureType !== this.signatureType ||\n correspondingSig.hashAlgorithm !== this.hashAlgorithm ||\n correspondingSig.publicKeyAlgorithm !== this.publicKeyAlgorithm ||\n !correspondingSig.issuerKeyID.equals(this.issuerKeyID)\n ) {\n throw new Error('Corresponding signature packet does not match one-pass signature packet');\n }\n correspondingSig.hashed = this.hashed;\n return correspondingSig.verify.apply(correspondingSig, arguments);\n }\n}\n\nOnePassSignaturePacket.prototype.hash = SignaturePacket.prototype.hash;\nOnePassSignaturePacket.prototype.toHash = SignaturePacket.prototype.toHash;\nOnePassSignaturePacket.prototype.toSign = SignaturePacket.prototype.toSign;\n\nexport default OnePassSignaturePacket;\n","import * as stream from '@openpgp/web-stream-tools';\nimport {\n readPackets, supportsStreaming,\n writeTag, writeHeader,\n writePartialLength, writeSimpleLength,\n UnparseablePacket,\n UnsupportedError\n} from './packet';\nimport util from '../util';\nimport enums from '../enums';\nimport defaultConfig from '../config';\n\n/**\n * Instantiate a new packet given its tag\n * @function newPacketFromTag\n * @param {module:enums.packet} tag - Property value from {@link module:enums.packet}\n * @param {Object} allowedPackets - mapping where keys are allowed packet tags, pointing to their Packet class\n * @returns {Object} New packet object with type based on tag\n * @throws {Error|UnsupportedError} for disallowed or unknown packets\n */\nexport function newPacketFromTag(tag, allowedPackets) {\n if (!allowedPackets[tag]) {\n // distinguish between disallowed packets and unknown ones\n let packetType;\n try {\n packetType = enums.read(enums.packet, tag);\n } catch (e) {\n throw new UnsupportedError(`Unknown packet type with tag: ${tag}`);\n }\n throw new Error(`Packet not allowed in this context: ${packetType}`);\n }\n return new allowedPackets[tag]();\n}\n\n/**\n * This class represents a list of openpgp packets.\n * Take care when iterating over it - the packets themselves\n * are stored as numerical indices.\n * @extends Array\n */\nclass PacketList extends Array {\n /**\n * Parses the given binary data and returns a list of packets.\n * Equivalent to calling `read` on an empty PacketList instance.\n * @param {Uint8Array | ReadableStream} bytes - binary data to parse\n * @param {Object} allowedPackets - mapping where keys are allowed packet tags, pointing to their Packet class\n * @param {Object} [config] - full configuration, defaults to openpgp.config\n * @returns {PacketList} parsed list of packets\n * @throws on parsing errors\n * @async\n */\n static async fromBinary(bytes, allowedPackets, config = defaultConfig) {\n const packets = new PacketList();\n await packets.read(bytes, allowedPackets, config);\n return packets;\n }\n\n /**\n * Reads a stream of binary data and interprets it as a list of packets.\n * @param {Uint8Array | ReadableStream} bytes - binary data to parse\n * @param {Object} allowedPackets - mapping where keys are allowed packet tags, pointing to their Packet class\n * @param {Object} [config] - full configuration, defaults to openpgp.config\n * @throws on parsing errors\n * @async\n */\n async read(bytes, allowedPackets, config = defaultConfig) {\n if (config.additionalAllowedPackets.length) {\n allowedPackets = { ...allowedPackets, ...util.constructAllowedPackets(config.additionalAllowedPackets) };\n }\n this.stream = stream.transformPair(bytes, async (readable, writable) => {\n const writer = stream.getWriter(writable);\n try {\n while (true) {\n await writer.ready;\n const done = await readPackets(readable, async parsed => {\n try {\n if (parsed.tag === enums.packet.marker || parsed.tag === enums.packet.trust) {\n // According to the spec, these packet types should be ignored and not cause parsing errors, even if not esplicitly allowed:\n // - Marker packets MUST be ignored when received: https://github.com/openpgpjs/openpgpjs/issues/1145\n // - Trust packets SHOULD be ignored outside of keyrings (unsupported): https://datatracker.ietf.org/doc/html/rfc4880#section-5.10\n return;\n }\n const packet = newPacketFromTag(parsed.tag, allowedPackets);\n packet.packets = new PacketList();\n packet.fromStream = util.isStream(parsed.packet);\n await packet.read(parsed.packet, config);\n await writer.write(packet);\n } catch (e) {\n const throwUnsupportedError = !config.ignoreUnsupportedPackets && e instanceof UnsupportedError;\n const throwMalformedError = !config.ignoreMalformedPackets && !(e instanceof UnsupportedError);\n if (throwUnsupportedError || throwMalformedError || supportsStreaming(parsed.tag)) {\n // The packets that support streaming are the ones that contain message data.\n // Those are also the ones we want to be more strict about and throw on parse errors\n // (since we likely cannot process the message without these packets anyway).\n await writer.abort(e);\n } else {\n const unparsedPacket = new UnparseablePacket(parsed.tag, parsed.packet);\n await writer.write(unparsedPacket);\n }\n util.printDebugError(e);\n }\n });\n if (done) {\n await writer.ready;\n await writer.close();\n return;\n }\n }\n } catch (e) {\n await writer.abort(e);\n }\n });\n\n // Wait until first few packets have been read\n const reader = stream.getReader(this.stream);\n while (true) {\n const { done, value } = await reader.read();\n if (!done) {\n this.push(value);\n } else {\n this.stream = null;\n }\n if (done || supportsStreaming(value.constructor.tag)) {\n break;\n }\n }\n reader.releaseLock();\n }\n\n /**\n * Creates a binary representation of openpgp objects contained within the\n * class instance.\n * @returns {Uint8Array} A Uint8Array containing valid openpgp packets.\n */\n write() {\n const arr = [];\n\n for (let i = 0; i < this.length; i++) {\n const tag = this[i] instanceof UnparseablePacket ? this[i].tag : this[i].constructor.tag;\n const packetbytes = this[i].write();\n if (util.isStream(packetbytes) && supportsStreaming(this[i].constructor.tag)) {\n let buffer = [];\n let bufferLength = 0;\n const minLength = 512;\n arr.push(writeTag(tag));\n arr.push(stream.transform(packetbytes, value => {\n buffer.push(value);\n bufferLength += value.length;\n if (bufferLength >= minLength) {\n const powerOf2 = Math.min(Math.log(bufferLength) / Math.LN2 | 0, 30);\n const chunkSize = 2 ** powerOf2;\n const bufferConcat = util.concat([writePartialLength(powerOf2)].concat(buffer));\n buffer = [bufferConcat.subarray(1 + chunkSize)];\n bufferLength = buffer[0].length;\n return bufferConcat.subarray(0, 1 + chunkSize);\n }\n }, () => util.concat([writeSimpleLength(bufferLength)].concat(buffer))));\n } else {\n if (util.isStream(packetbytes)) {\n let length = 0;\n arr.push(stream.transform(stream.clone(packetbytes), value => {\n length += value.length;\n }, () => writeHeader(tag, length)));\n } else {\n arr.push(writeHeader(tag, packetbytes.length));\n }\n arr.push(packetbytes);\n }\n }\n\n return util.concat(arr);\n }\n\n /**\n * Creates a new PacketList with all packets matching the given tag(s)\n * @param {...module:enums.packet} tags - packet tags to look for\n * @returns {PacketList}\n */\n filterByTag(...tags) {\n const filtered = new PacketList();\n\n const handle = tag => packetType => tag === packetType;\n\n for (let i = 0; i < this.length; i++) {\n if (tags.some(handle(this[i].constructor.tag))) {\n filtered.push(this[i]);\n }\n }\n\n return filtered;\n }\n\n /**\n * Traverses packet list and returns first packet with matching tag\n * @param {module:enums.packet} tag - The packet tag\n * @returns {Packet|undefined}\n */\n findPacket(tag) {\n return this.find(packet => packet.constructor.tag === tag);\n }\n\n /**\n * Find indices of packets with the given tag(s)\n * @param {...module:enums.packet} tags - packet tags to look for\n * @returns {Integer[]} packet indices\n */\n indexOfTag(...tags) {\n const tagIndex = [];\n const that = this;\n\n const handle = tag => packetType => tag === packetType;\n\n for (let i = 0; i < this.length; i++) {\n if (tags.some(handle(that[i].constructor.tag))) {\n tagIndex.push(i);\n }\n }\n return tagIndex;\n }\n}\n\nexport default PacketList;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { Deflate } from '@openpgp/pako/lib/deflate';\nimport { Inflate } from '@openpgp/pako/lib/inflate';\nimport { Z_SYNC_FLUSH, Z_FINISH } from '@openpgp/pako/lib/zlib/constants';\nimport { decode as BunzipDecode } from '@openpgp/seek-bzip';\nimport * as stream from '@openpgp/web-stream-tools';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\n\nimport LiteralDataPacket from './literal_data';\nimport OnePassSignaturePacket from './one_pass_signature';\nimport SignaturePacket from './signature';\nimport PacketList from './packetlist';\n\n// A Compressed Data packet can contain the following packet types\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([\n LiteralDataPacket,\n OnePassSignaturePacket,\n SignaturePacket\n]);\n\n/**\n * Implementation of the Compressed Data Packet (Tag 8)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.6|RFC4880 5.6}:\n * The Compressed Data packet contains compressed data. Typically,\n * this packet is found as the contents of an encrypted packet, or following\n * a Signature or One-Pass Signature packet, and contains a literal data packet.\n */\nclass CompressedDataPacket {\n static get tag() {\n return enums.packet.compressedData;\n }\n\n /**\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n constructor(config = defaultConfig) {\n /**\n * List of packets\n * @type {PacketList}\n */\n this.packets = null;\n /**\n * Compression algorithm\n * @type {enums.compression}\n */\n this.algorithm = config.preferredCompressionAlgorithm;\n\n /**\n * Compressed packet data\n * @type {Uint8Array | ReadableStream}\n */\n this.compressed = null;\n\n /**\n * zip/zlib compression level, between 1 and 9\n */\n this.deflateLevel = config.deflateLevel;\n }\n\n /**\n * Parsing function for the packet.\n * @param {Uint8Array | ReadableStream} bytes - Payload of a tag 8 packet\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n async read(bytes, config = defaultConfig) {\n await stream.parse(bytes, async reader => {\n\n // One octet that gives the algorithm used to compress the packet.\n this.algorithm = await reader.readByte();\n\n // Compressed data, which makes up the remainder of the packet.\n this.compressed = reader.remainder();\n\n await this.decompress(config);\n });\n }\n\n\n /**\n * Return the compressed packet.\n * @returns {Uint8Array | ReadableStream} Binary compressed packet.\n */\n write() {\n if (this.compressed === null) {\n this.compress();\n }\n\n return util.concat([new Uint8Array([this.algorithm]), this.compressed]);\n }\n\n\n /**\n * Decompression method for decompressing the compressed data\n * read by read_packet\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n async decompress(config = defaultConfig) {\n const compressionName = enums.read(enums.compression, this.algorithm);\n const decompressionFn = decompress_fns[compressionName];\n if (!decompressionFn) {\n throw new Error(`${compressionName} decompression not supported`);\n }\n\n this.packets = await PacketList.fromBinary(decompressionFn(this.compressed), allowedPackets, config);\n }\n\n /**\n * Compress the packet data (member decompressedData)\n */\n compress() {\n const compressionName = enums.read(enums.compression, this.algorithm);\n const compressionFn = compress_fns[compressionName];\n if (!compressionFn) {\n throw new Error(`${compressionName} compression not supported`);\n }\n\n this.compressed = compressionFn(this.packets.write(), this.deflateLevel);\n }\n}\n\nexport default CompressedDataPacket;\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\nconst nodeZlib = util.getNodeZlib();\n\nfunction uncompressed(data) {\n return data;\n}\n\nfunction node_zlib(func, create, options = {}) {\n return function (data) {\n if (!util.isStream(data) || stream.isArrayStream(data)) {\n return stream.fromAsync(() => stream.readToEnd(data).then(data => {\n return new Promise((resolve, reject) => {\n func(data, options, (err, result) => {\n if (err) return reject(err);\n resolve(result);\n });\n });\n }));\n }\n return stream.nodeToWeb(stream.webToNode(data).pipe(create(options)));\n };\n}\n\nfunction pako_zlib(constructor, options = {}) {\n return function(data) {\n const obj = new constructor(options);\n return stream.transform(data, value => {\n if (value.length) {\n obj.push(value, Z_SYNC_FLUSH);\n return obj.result;\n }\n }, () => {\n if (constructor === Deflate) {\n obj.push([], Z_FINISH);\n return obj.result;\n }\n });\n };\n}\n\nfunction bzip2(func) {\n return function(data) {\n return stream.fromAsync(async () => func(await stream.readToEnd(data)));\n };\n}\n\nconst compress_fns = nodeZlib ? {\n zip: /*#__PURE__*/ (compressed, level) => node_zlib(nodeZlib.deflateRaw, nodeZlib.createDeflateRaw, { level })(compressed),\n zlib: /*#__PURE__*/ (compressed, level) => node_zlib(nodeZlib.deflate, nodeZlib.createDeflate, { level })(compressed)\n} : {\n zip: /*#__PURE__*/ (compressed, level) => pako_zlib(Deflate, { raw: true, level })(compressed),\n zlib: /*#__PURE__*/ (compressed, level) => pako_zlib(Deflate, { level })(compressed)\n};\n\nconst decompress_fns = nodeZlib ? {\n uncompressed: uncompressed,\n zip: /*#__PURE__*/ node_zlib(nodeZlib.inflateRaw, nodeZlib.createInflateRaw),\n zlib: /*#__PURE__*/ node_zlib(nodeZlib.inflate, nodeZlib.createInflate),\n bzip2: /*#__PURE__*/ bzip2(BunzipDecode)\n} : {\n uncompressed: uncompressed,\n zip: /*#__PURE__*/ pako_zlib(Inflate, { raw: true }),\n zlib: /*#__PURE__*/ pako_zlib(Inflate),\n bzip2: /*#__PURE__*/ bzip2(BunzipDecode)\n};\n\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\n\nimport LiteralDataPacket from './literal_data';\nimport CompressedDataPacket from './compressed_data';\nimport OnePassSignaturePacket from './one_pass_signature';\nimport SignaturePacket from './signature';\nimport PacketList from './packetlist';\nimport { UnsupportedError } from './packet';\n\n// A SEIP packet can contain the following packet types\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([\n LiteralDataPacket,\n CompressedDataPacket,\n OnePassSignaturePacket,\n SignaturePacket\n]);\n\nconst VERSION = 1; // A one-octet version number of the data packet.\n\n/**\n * Implementation of the Sym. Encrypted Integrity Protected Data Packet (Tag 18)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.13|RFC4880 5.13}:\n * The Symmetrically Encrypted Integrity Protected Data packet is\n * a variant of the Symmetrically Encrypted Data packet. It is a new feature\n * created for OpenPGP that addresses the problem of detecting a modification to\n * encrypted data. It is used in combination with a Modification Detection Code\n * packet.\n */\nclass SymEncryptedIntegrityProtectedDataPacket {\n static get tag() {\n return enums.packet.symEncryptedIntegrityProtectedData;\n }\n\n constructor() {\n this.version = VERSION;\n this.encrypted = null;\n this.packets = null;\n }\n\n async read(bytes) {\n await stream.parse(bytes, async reader => {\n const version = await reader.readByte();\n // - A one-octet version number. The only currently defined value is 1.\n if (version !== VERSION) {\n throw new UnsupportedError(`Version ${version} of the SEIP packet is unsupported.`);\n }\n\n // - Encrypted data, the output of the selected symmetric-key cipher\n // operating in Cipher Feedback mode with shift amount equal to the\n // block size of the cipher (CFB-n where n is the block size).\n this.encrypted = reader.remainder();\n });\n }\n\n write() {\n return util.concat([new Uint8Array([VERSION]), this.encrypted]);\n }\n\n /**\n * Encrypt the payload in the packet.\n * @param {enums.symmetric} sessionKeyAlgorithm - The symmetric encryption algorithm to use\n * @param {Uint8Array} key - The key of cipher blocksize length to be used\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise}\n * @throws {Error} on encryption failure\n * @async\n */\n async encrypt(sessionKeyAlgorithm, key, config = defaultConfig) {\n const { blockSize } = crypto.getCipher(sessionKeyAlgorithm);\n\n let bytes = this.packets.write();\n if (stream.isArrayStream(bytes)) bytes = await stream.readToEnd(bytes);\n const prefix = await crypto.getPrefixRandom(sessionKeyAlgorithm);\n const mdc = new Uint8Array([0xD3, 0x14]); // modification detection code packet\n\n const tohash = util.concat([prefix, bytes, mdc]);\n const hash = await crypto.hash.sha1(stream.passiveClone(tohash));\n const plaintext = util.concat([tohash, hash]);\n\n this.encrypted = await crypto.mode.cfb.encrypt(sessionKeyAlgorithm, key, plaintext, new Uint8Array(blockSize), config);\n return true;\n }\n\n /**\n * Decrypts the encrypted data contained in the packet.\n * @param {enums.symmetric} sessionKeyAlgorithm - The selected symmetric encryption algorithm to be used\n * @param {Uint8Array} key - The key of cipher blocksize length to be used\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise}\n * @throws {Error} on decryption failure\n * @async\n */\n async decrypt(sessionKeyAlgorithm, key, config = defaultConfig) {\n const { blockSize } = crypto.getCipher(sessionKeyAlgorithm);\n let encrypted = stream.clone(this.encrypted);\n if (stream.isArrayStream(encrypted)) encrypted = await stream.readToEnd(encrypted);\n const decrypted = await crypto.mode.cfb.decrypt(sessionKeyAlgorithm, key, encrypted, new Uint8Array(blockSize));\n\n // there must be a modification detection code packet as the\n // last packet and everything gets hashed except the hash itself\n const realHash = stream.slice(stream.passiveClone(decrypted), -20);\n const tohash = stream.slice(decrypted, 0, -20);\n const verifyHash = Promise.all([\n stream.readToEnd(await crypto.hash.sha1(stream.passiveClone(tohash))),\n stream.readToEnd(realHash)\n ]).then(([hash, mdc]) => {\n if (!util.equalsUint8Array(hash, mdc)) {\n throw new Error('Modification detected.');\n }\n return new Uint8Array();\n });\n const bytes = stream.slice(tohash, blockSize + 2); // Remove random prefix\n let packetbytes = stream.slice(bytes, 0, -2); // Remove MDC packet\n packetbytes = stream.concat([packetbytes, stream.fromAsync(() => verifyHash)]);\n if (!util.isStream(encrypted) || !config.allowUnauthenticatedStream) {\n packetbytes = await stream.readToEnd(packetbytes);\n }\n this.packets = await PacketList.fromBinary(packetbytes, allowedPackets, config);\n return true;\n }\n}\n\nexport default SymEncryptedIntegrityProtectedDataPacket;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\nimport { UnsupportedError } from './packet';\n\nimport LiteralDataPacket from './literal_data';\nimport CompressedDataPacket from './compressed_data';\nimport OnePassSignaturePacket from './one_pass_signature';\nimport SignaturePacket from './signature';\nimport PacketList from './packetlist';\n\n// An AEAD-encrypted Data packet can contain the following packet types\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([\n LiteralDataPacket,\n CompressedDataPacket,\n OnePassSignaturePacket,\n SignaturePacket\n]);\n\nconst VERSION = 1; // A one-octet version number of the data packet.\n\n/**\n * Implementation of the Symmetrically Encrypted Authenticated Encryption with\n * Additional Data (AEAD) Protected Data Packet\n *\n * {@link https://tools.ietf.org/html/draft-ford-openpgp-format-00#section-2.1}:\n * AEAD Protected Data Packet\n */\nclass AEADEncryptedDataPacket {\n static get tag() {\n return enums.packet.aeadEncryptedData;\n }\n\n constructor() {\n this.version = VERSION;\n /** @type {enums.symmetric} */\n this.cipherAlgorithm = null;\n /** @type {enums.aead} */\n this.aeadAlgorithm = enums.aead.eax;\n this.chunkSizeByte = null;\n this.iv = null;\n this.encrypted = null;\n this.packets = null;\n }\n\n /**\n * Parse an encrypted payload of bytes in the order: version, IV, ciphertext (see specification)\n * @param {Uint8Array | ReadableStream} bytes\n * @throws {Error} on parsing failure\n */\n async read(bytes) {\n await stream.parse(bytes, async reader => {\n const version = await reader.readByte();\n if (version !== VERSION) { // The only currently defined value is 1.\n throw new UnsupportedError(`Version ${version} of the AEAD-encrypted data packet is not supported.`);\n }\n this.cipherAlgorithm = await reader.readByte();\n this.aeadAlgorithm = await reader.readByte();\n this.chunkSizeByte = await reader.readByte();\n\n const mode = crypto.getAEADMode(this.aeadAlgorithm);\n this.iv = await reader.readBytes(mode.ivLength);\n this.encrypted = reader.remainder();\n });\n }\n\n /**\n * Write the encrypted payload of bytes in the order: version, IV, ciphertext (see specification)\n * @returns {Uint8Array | ReadableStream} The encrypted payload.\n */\n write() {\n return util.concat([new Uint8Array([this.version, this.cipherAlgorithm, this.aeadAlgorithm, this.chunkSizeByte]), this.iv, this.encrypted]);\n }\n\n /**\n * Decrypt the encrypted payload.\n * @param {enums.symmetric} sessionKeyAlgorithm - The session key's cipher algorithm\n * @param {Uint8Array} key - The session key used to encrypt the payload\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if decryption was not successful\n * @async\n */\n async decrypt(sessionKeyAlgorithm, key, config = defaultConfig) {\n this.packets = await PacketList.fromBinary(\n await this.crypt('decrypt', key, stream.clone(this.encrypted)),\n allowedPackets,\n config\n );\n }\n\n /**\n * Encrypt the packet payload.\n * @param {enums.symmetric} sessionKeyAlgorithm - The session key's cipher algorithm\n * @param {Uint8Array} key - The session key used to encrypt the payload\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if encryption was not successful\n * @async\n */\n async encrypt(sessionKeyAlgorithm, key, config = defaultConfig) {\n this.cipherAlgorithm = sessionKeyAlgorithm;\n\n const { ivLength } = crypto.getAEADMode(this.aeadAlgorithm);\n this.iv = crypto.random.getRandomBytes(ivLength); // generate new random IV\n this.chunkSizeByte = config.aeadChunkSizeByte;\n const data = this.packets.write();\n this.encrypted = await this.crypt('encrypt', key, data);\n }\n\n /**\n * En/decrypt the payload.\n * @param {encrypt|decrypt} fn - Whether to encrypt or decrypt\n * @param {Uint8Array} key - The session key used to en/decrypt the payload\n * @param {Uint8Array | ReadableStream} data - The data to en/decrypt\n * @returns {Promise>}\n * @async\n */\n async crypt(fn, key, data) {\n const mode = crypto.getAEADMode(this.aeadAlgorithm);\n const modeInstance = await mode(this.cipherAlgorithm, key);\n const tagLengthIfDecrypting = fn === 'decrypt' ? mode.tagLength : 0;\n const tagLengthIfEncrypting = fn === 'encrypt' ? mode.tagLength : 0;\n const chunkSize = 2 ** (this.chunkSizeByte + 6) + tagLengthIfDecrypting; // ((uint64_t)1 << (c + 6))\n const adataBuffer = new ArrayBuffer(21);\n const adataArray = new Uint8Array(adataBuffer, 0, 13);\n const adataTagArray = new Uint8Array(adataBuffer);\n const adataView = new DataView(adataBuffer);\n const chunkIndexArray = new Uint8Array(adataBuffer, 5, 8);\n adataArray.set([0xC0 | AEADEncryptedDataPacket.tag, this.version, this.cipherAlgorithm, this.aeadAlgorithm, this.chunkSizeByte], 0);\n let chunkIndex = 0;\n let latestPromise = Promise.resolve();\n let cryptedBytes = 0;\n let queuedBytes = 0;\n const iv = this.iv;\n return stream.transformPair(data, async (readable, writable) => {\n if (util.isStream(readable) !== 'array') {\n const buffer = new stream.TransformStream({}, {\n highWaterMark: util.getHardwareConcurrency() * 2 ** (this.chunkSizeByte + 6),\n size: array => array.length\n });\n stream.pipe(buffer.readable, writable);\n writable = buffer.writable;\n }\n const reader = stream.getReader(readable);\n const writer = stream.getWriter(writable);\n try {\n while (true) {\n let chunk = await reader.readBytes(chunkSize + tagLengthIfDecrypting) || new Uint8Array();\n const finalChunk = chunk.subarray(chunk.length - tagLengthIfDecrypting);\n chunk = chunk.subarray(0, chunk.length - tagLengthIfDecrypting);\n let cryptedPromise;\n let done;\n if (!chunkIndex || chunk.length) {\n reader.unshift(finalChunk);\n cryptedPromise = modeInstance[fn](chunk, mode.getNonce(iv, chunkIndexArray), adataArray);\n queuedBytes += chunk.length - tagLengthIfDecrypting + tagLengthIfEncrypting;\n } else {\n // After the last chunk, we either encrypt a final, empty\n // data chunk to get the final authentication tag or\n // validate that final authentication tag.\n adataView.setInt32(13 + 4, cryptedBytes); // Should be setInt64(13, ...)\n cryptedPromise = modeInstance[fn](finalChunk, mode.getNonce(iv, chunkIndexArray), adataTagArray);\n queuedBytes += tagLengthIfEncrypting;\n done = true;\n }\n cryptedBytes += chunk.length - tagLengthIfDecrypting;\n // eslint-disable-next-line no-loop-func\n latestPromise = latestPromise.then(() => cryptedPromise).then(async crypted => {\n await writer.ready;\n await writer.write(crypted);\n queuedBytes -= crypted.length;\n }).catch(err => writer.abort(err));\n if (done || queuedBytes > writer.desiredSize) {\n await latestPromise; // Respect backpressure\n }\n if (!done) {\n adataView.setInt32(5 + 4, ++chunkIndex); // Should be setInt64(5, ...)\n } else {\n await writer.close();\n break;\n }\n }\n } catch (e) {\n await writer.abort(e);\n }\n });\n }\n}\n\nexport default AEADEncryptedDataPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport KeyID from '../type/keyid';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport { UnsupportedError } from './packet';\n\nconst VERSION = 3;\n\n/**\n * Public-Key Encrypted Session Key Packets (Tag 1)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.1|RFC4880 5.1}:\n * A Public-Key Encrypted Session Key packet holds the session key\n * used to encrypt a message. Zero or more Public-Key Encrypted Session Key\n * packets and/or Symmetric-Key Encrypted Session Key packets may precede a\n * Symmetrically Encrypted Data Packet, which holds an encrypted message. The\n * message is encrypted with the session key, and the session key is itself\n * encrypted and stored in the Encrypted Session Key packet(s). The\n * Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted\n * Session Key packet for each OpenPGP key to which the message is encrypted.\n * The recipient of the message finds a session key that is encrypted to their\n * public key, decrypts the session key, and then uses the session key to\n * decrypt the message.\n */\nclass PublicKeyEncryptedSessionKeyPacket {\n static get tag() {\n return enums.packet.publicKeyEncryptedSessionKey;\n }\n\n constructor() {\n this.version = 3;\n\n this.publicKeyID = new KeyID();\n this.publicKeyAlgorithm = null;\n\n this.sessionKey = null;\n /**\n * Algorithm to encrypt the message with\n * @type {enums.symmetric}\n */\n this.sessionKeyAlgorithm = null;\n\n /** @type {Object} */\n this.encrypted = {};\n }\n\n /**\n * Parsing function for a publickey encrypted session key packet (tag 1).\n *\n * @param {Uint8Array} bytes - Payload of a tag 1 packet\n */\n read(bytes) {\n let i = 0;\n this.version = bytes[i++];\n if (this.version !== VERSION) {\n throw new UnsupportedError(`Version ${this.version} of the PKESK packet is unsupported.`);\n }\n i += this.publicKeyID.read(bytes.subarray(i));\n this.publicKeyAlgorithm = bytes[i++];\n this.encrypted = crypto.parseEncSessionKeyParams(this.publicKeyAlgorithm, bytes.subarray(i), this.version);\n if (this.publicKeyAlgorithm === enums.publicKey.x25519) {\n this.sessionKeyAlgorithm = enums.write(enums.symmetric, this.encrypted.C.algorithm);\n }\n }\n\n /**\n * Create a binary representation of a tag 1 packet\n *\n * @returns {Uint8Array} The Uint8Array representation.\n */\n write() {\n const arr = [\n new Uint8Array([this.version]),\n this.publicKeyID.write(),\n new Uint8Array([this.publicKeyAlgorithm]),\n crypto.serializeParams(this.publicKeyAlgorithm, this.encrypted)\n ];\n\n return util.concatUint8Array(arr);\n }\n\n /**\n * Encrypt session key packet\n * @param {PublicKeyPacket} key - Public key\n * @throws {Error} if encryption failed\n * @async\n */\n async encrypt(key) {\n const algo = enums.write(enums.publicKey, this.publicKeyAlgorithm);\n const encoded = encodeSessionKey(this.version, algo, this.sessionKeyAlgorithm, this.sessionKey);\n this.encrypted = await crypto.publicKeyEncrypt(\n algo, this.sessionKeyAlgorithm, key.publicParams, encoded, key.getFingerprintBytes());\n }\n\n /**\n * Decrypts the session key (only for public key encrypted session key packets (tag 1)\n * @param {SecretKeyPacket} key - decrypted private key\n * @param {Object} [randomSessionKey] - Bogus session key to use in case of sensitive decryption error, or if the decrypted session key is of a different type/size.\n * This is needed for constant-time processing. Expected object of the form: { sessionKey: Uint8Array, sessionKeyAlgorithm: enums.symmetric }\n * @throws {Error} if decryption failed, unless `randomSessionKey` is given\n * @async\n */\n async decrypt(key, randomSessionKey) {\n // check that session key algo matches the secret key algo\n if (this.publicKeyAlgorithm !== key.algorithm) {\n throw new Error('Decryption error');\n }\n\n const randomPayload = randomSessionKey ?\n encodeSessionKey(this.version, this.publicKeyAlgorithm, randomSessionKey.sessionKeyAlgorithm, randomSessionKey.sessionKey) :\n null;\n const decryptedData = await crypto.publicKeyDecrypt(this.publicKeyAlgorithm, key.publicParams, key.privateParams, this.encrypted, key.getFingerprintBytes(), randomPayload);\n\n const { sessionKey, sessionKeyAlgorithm } = decodeSessionKey(this.version, this.publicKeyAlgorithm, decryptedData, randomSessionKey);\n\n // v3 Montgomery curves have cleartext cipher algo\n if (this.publicKeyAlgorithm !== enums.publicKey.x25519) {\n this.sessionKeyAlgorithm = sessionKeyAlgorithm;\n }\n this.sessionKey = sessionKey;\n }\n}\n\nexport default PublicKeyEncryptedSessionKeyPacket;\n\n\nfunction encodeSessionKey(version, keyAlgo, cipherAlgo, sessionKeyData) {\n switch (keyAlgo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.elgamal:\n case enums.publicKey.ecdh: {\n // add checksum\n return util.concatUint8Array([\n new Uint8Array([cipherAlgo]),\n sessionKeyData,\n util.writeChecksum(sessionKeyData.subarray(sessionKeyData.length % 8))\n ]);\n }\n case enums.publicKey.x25519:\n return sessionKeyData;\n default:\n throw new Error('Unsupported public key algorithm');\n }\n}\n\n\nfunction decodeSessionKey(version, keyAlgo, decryptedData, randomSessionKey) {\n switch (keyAlgo) {\n case enums.publicKey.rsaEncrypt:\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.elgamal:\n case enums.publicKey.ecdh: {\n // verify checksum in constant time\n const result = decryptedData.subarray(0, decryptedData.length - 2);\n const checksum = decryptedData.subarray(decryptedData.length - 2);\n const computedChecksum = util.writeChecksum(result.subarray(result.length % 8));\n const isValidChecksum = computedChecksum[0] === checksum[0] & computedChecksum[1] === checksum[1];\n const decryptedSessionKey = { sessionKeyAlgorithm: result[0], sessionKey: result.subarray(1) };\n if (randomSessionKey) {\n // We must not leak info about the validity of the decrypted checksum or cipher algo.\n // The decrypted session key must be of the same algo and size as the random session key, otherwise we discard it and use the random data.\n const isValidPayload = isValidChecksum &\n decryptedSessionKey.sessionKeyAlgorithm === randomSessionKey.sessionKeyAlgorithm &\n decryptedSessionKey.sessionKey.length === randomSessionKey.sessionKey.length;\n return {\n sessionKey: util.selectUint8Array(isValidPayload, decryptedSessionKey.sessionKey, randomSessionKey.sessionKey),\n sessionKeyAlgorithm: util.selectUint8(\n isValidPayload,\n decryptedSessionKey.sessionKeyAlgorithm,\n randomSessionKey.sessionKeyAlgorithm\n )\n };\n } else {\n const isValidPayload = isValidChecksum && enums.read(enums.symmetric, decryptedSessionKey.sessionKeyAlgorithm);\n if (isValidPayload) {\n return decryptedSessionKey;\n } else {\n throw new Error('Decryption error');\n }\n }\n }\n case enums.publicKey.x25519:\n return {\n sessionKey: decryptedData\n };\n default:\n throw new Error('Unsupported public key algorithm');\n }\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n/**\n * Implementation of the String-to-key specifier\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-3.7|RFC4880 3.7}:\n * String-to-key (S2K) specifiers are used to convert passphrase strings\n * into symmetric-key encryption/decryption keys. They are used in two\n * places, currently: to encrypt the secret part of private keys in the\n * private keyring, and to convert passphrases to encryption keys for\n * symmetrically encrypted messages.\n * @module type/s2k\n * @private\n */\n\nimport defaultConfig from '../config';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport { UnsupportedError } from '../packet/packet';\nimport util from '../util';\n\nclass S2K {\n /**\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n constructor(config = defaultConfig) {\n /**\n * Hash function identifier, or 0 for gnu-dummy keys\n * @type {module:enums.hash | 0}\n */\n this.algorithm = enums.hash.sha256;\n /**\n * enums.s2k identifier or 'gnu-dummy'\n * @type {String}\n */\n this.type = 'iterated';\n /** @type {Integer} */\n this.c = config.s2kIterationCountByte;\n /** Eight bytes of salt in a binary string.\n * @type {Uint8Array}\n */\n this.salt = null;\n }\n\n getCount() {\n // Exponent bias, defined in RFC4880\n const expbias = 6;\n\n return (16 + (this.c & 15)) << ((this.c >> 4) + expbias);\n }\n\n /**\n * Parsing function for a string-to-key specifier ({@link https://tools.ietf.org/html/rfc4880#section-3.7|RFC 4880 3.7}).\n * @param {Uint8Array} bytes - Payload of string-to-key specifier\n * @returns {Integer} Actual length of the object.\n */\n read(bytes) {\n let i = 0;\n try {\n this.type = enums.read(enums.s2k, bytes[i++]);\n } catch (err) {\n throw new UnsupportedError('Unknown S2K type.');\n }\n this.algorithm = bytes[i++];\n\n switch (this.type) {\n case 'simple':\n break;\n\n case 'salted':\n this.salt = bytes.subarray(i, i + 8);\n i += 8;\n break;\n\n case 'iterated':\n this.salt = bytes.subarray(i, i + 8);\n i += 8;\n\n // Octet 10: count, a one-octet, coded value\n this.c = bytes[i++];\n break;\n\n case 'gnu':\n if (util.uint8ArrayToString(bytes.subarray(i, i + 3)) === 'GNU') {\n i += 3; // GNU\n const gnuExtType = 1000 + bytes[i++];\n if (gnuExtType === 1001) {\n this.type = 'gnu-dummy';\n // GnuPG extension mode 1001 -- don't write secret key at all\n } else {\n throw new UnsupportedError('Unknown s2k gnu protection mode.');\n }\n } else {\n throw new UnsupportedError('Unknown s2k type.');\n }\n break;\n\n default:\n throw new UnsupportedError('Unknown s2k type.'); // unreachable\n }\n\n return i;\n }\n\n /**\n * Serializes s2k information\n * @returns {Uint8Array} Binary representation of s2k.\n */\n write() {\n if (this.type === 'gnu-dummy') {\n return new Uint8Array([101, 0, ...util.stringToUint8Array('GNU'), 1]);\n }\n const arr = [new Uint8Array([enums.write(enums.s2k, this.type), this.algorithm])];\n\n switch (this.type) {\n case 'simple':\n break;\n case 'salted':\n arr.push(this.salt);\n break;\n case 'iterated':\n arr.push(this.salt);\n arr.push(new Uint8Array([this.c]));\n break;\n case 'gnu':\n throw new Error('GNU s2k type not supported.');\n default:\n throw new Error('Unknown s2k type.');\n }\n\n return util.concatUint8Array(arr);\n }\n\n /**\n * Produces a key using the specified passphrase and the defined\n * hashAlgorithm\n * @param {String} passphrase - Passphrase containing user input\n * @returns {Promise} Produced key with a length corresponding to.\n * hashAlgorithm hash length\n * @async\n */\n async produceKey(passphrase, numBytes) {\n passphrase = util.encodeUTF8(passphrase);\n\n const arr = [];\n let rlength = 0;\n\n let prefixlen = 0;\n while (rlength < numBytes) {\n let toHash;\n switch (this.type) {\n case 'simple':\n toHash = util.concatUint8Array([new Uint8Array(prefixlen), passphrase]);\n break;\n case 'salted':\n toHash = util.concatUint8Array([new Uint8Array(prefixlen), this.salt, passphrase]);\n break;\n case 'iterated': {\n const data = util.concatUint8Array([this.salt, passphrase]);\n let datalen = data.length;\n const count = Math.max(this.getCount(), datalen);\n toHash = new Uint8Array(prefixlen + count);\n toHash.set(data, prefixlen);\n for (let pos = prefixlen + datalen; pos < count; pos += datalen, datalen *= 2) {\n toHash.copyWithin(pos, prefixlen, pos);\n }\n break;\n }\n case 'gnu':\n throw new Error('GNU s2k type not supported.');\n default:\n throw new Error('Unknown s2k type.');\n }\n const result = await crypto.hash.digest(this.algorithm, toHash);\n arr.push(result);\n rlength += result.length;\n prefixlen++;\n }\n\n return util.concatUint8Array(arr).subarray(0, numBytes);\n }\n}\n\nexport default S2K;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport S2K from '../type/s2k';\nimport defaultConfig from '../config';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport { UnsupportedError } from './packet';\n\n/**\n * Symmetric-Key Encrypted Session Key Packets (Tag 3)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.3|RFC4880 5.3}:\n * The Symmetric-Key Encrypted Session Key packet holds the\n * symmetric-key encryption of a session key used to encrypt a message.\n * Zero or more Public-Key Encrypted Session Key packets and/or\n * Symmetric-Key Encrypted Session Key packets may precede a\n * Symmetrically Encrypted Data packet that holds an encrypted message.\n * The message is encrypted with a session key, and the session key is\n * itself encrypted and stored in the Encrypted Session Key packet or\n * the Symmetric-Key Encrypted Session Key packet.\n */\nclass SymEncryptedSessionKeyPacket {\n static get tag() {\n return enums.packet.symEncryptedSessionKey;\n }\n\n /**\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n constructor(config = defaultConfig) {\n this.version = config.aeadProtect ? 5 : 4;\n this.sessionKey = null;\n /**\n * Algorithm to encrypt the session key with\n * @type {enums.symmetric}\n */\n this.sessionKeyEncryptionAlgorithm = null;\n /**\n * Algorithm to encrypt the message with\n * @type {enums.symmetric}\n */\n this.sessionKeyAlgorithm = enums.symmetric.aes256;\n /**\n * AEAD mode to encrypt the session key with (if AEAD protection is enabled)\n * @type {enums.aead}\n */\n this.aeadAlgorithm = enums.write(enums.aead, config.preferredAEADAlgorithm);\n this.encrypted = null;\n this.s2k = null;\n this.iv = null;\n }\n\n /**\n * Parsing function for a symmetric encrypted session key packet (tag 3).\n *\n * @param {Uint8Array} bytes - Payload of a tag 3 packet\n */\n read(bytes) {\n let offset = 0;\n\n // A one-octet version number. The only currently defined version is 4.\n this.version = bytes[offset++];\n if (this.version !== 4 && this.version !== 5) {\n throw new UnsupportedError(`Version ${this.version} of the SKESK packet is unsupported.`);\n }\n\n // A one-octet number describing the symmetric algorithm used.\n const algo = bytes[offset++];\n\n if (this.version === 5) {\n // A one-octet AEAD algorithm.\n this.aeadAlgorithm = bytes[offset++];\n }\n\n // A string-to-key (S2K) specifier, length as defined above.\n this.s2k = new S2K();\n offset += this.s2k.read(bytes.subarray(offset, bytes.length));\n\n if (this.version === 5) {\n const mode = crypto.getAEADMode(this.aeadAlgorithm);\n\n // A starting initialization vector of size specified by the AEAD\n // algorithm.\n this.iv = bytes.subarray(offset, offset += mode.ivLength);\n }\n\n // The encrypted session key itself, which is decrypted with the\n // string-to-key object. This is optional in version 4.\n if (this.version === 5 || offset < bytes.length) {\n this.encrypted = bytes.subarray(offset, bytes.length);\n this.sessionKeyEncryptionAlgorithm = algo;\n } else {\n this.sessionKeyAlgorithm = algo;\n }\n }\n\n /**\n * Create a binary representation of a tag 3 packet\n *\n * @returns {Uint8Array} The Uint8Array representation.\n */\n write() {\n const algo = this.encrypted === null ?\n this.sessionKeyAlgorithm :\n this.sessionKeyEncryptionAlgorithm;\n\n let bytes;\n\n if (this.version === 5) {\n bytes = util.concatUint8Array([new Uint8Array([this.version, algo, this.aeadAlgorithm]), this.s2k.write(), this.iv, this.encrypted]);\n } else {\n bytes = util.concatUint8Array([new Uint8Array([this.version, algo]), this.s2k.write()]);\n\n if (this.encrypted !== null) {\n bytes = util.concatUint8Array([bytes, this.encrypted]);\n }\n }\n\n return bytes;\n }\n\n /**\n * Decrypts the session key with the given passphrase\n * @param {String} passphrase - The passphrase in string form\n * @throws {Error} if decryption was not successful\n * @async\n */\n async decrypt(passphrase) {\n const algo = this.sessionKeyEncryptionAlgorithm !== null ?\n this.sessionKeyEncryptionAlgorithm :\n this.sessionKeyAlgorithm;\n\n const { blockSize, keySize } = crypto.getCipher(algo);\n const key = await this.s2k.produceKey(passphrase, keySize);\n\n if (this.version === 5) {\n const mode = crypto.getAEADMode(this.aeadAlgorithm);\n const adata = new Uint8Array([0xC0 | SymEncryptedSessionKeyPacket.tag, this.version, this.sessionKeyEncryptionAlgorithm, this.aeadAlgorithm]);\n const modeInstance = await mode(algo, key);\n this.sessionKey = await modeInstance.decrypt(this.encrypted, this.iv, adata);\n } else if (this.encrypted !== null) {\n const decrypted = await crypto.mode.cfb.decrypt(algo, key, this.encrypted, new Uint8Array(blockSize));\n\n this.sessionKeyAlgorithm = enums.write(enums.symmetric, decrypted[0]);\n this.sessionKey = decrypted.subarray(1, decrypted.length);\n } else {\n this.sessionKey = key;\n }\n }\n\n /**\n * Encrypts the session key with the given passphrase\n * @param {String} passphrase - The passphrase in string form\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if encryption was not successful\n * @async\n */\n async encrypt(passphrase, config = defaultConfig) {\n const algo = this.sessionKeyEncryptionAlgorithm !== null ?\n this.sessionKeyEncryptionAlgorithm :\n this.sessionKeyAlgorithm;\n\n this.sessionKeyEncryptionAlgorithm = algo;\n\n this.s2k = new S2K(config);\n this.s2k.salt = crypto.random.getRandomBytes(8);\n\n const { blockSize, keySize } = crypto.getCipher(algo);\n const encryptionKey = await this.s2k.produceKey(passphrase, keySize);\n\n if (this.sessionKey === null) {\n this.sessionKey = crypto.generateSessionKey(this.sessionKeyAlgorithm);\n }\n\n if (this.version === 5) {\n const mode = crypto.getAEADMode(this.aeadAlgorithm);\n this.iv = crypto.random.getRandomBytes(mode.ivLength); // generate new random IV\n const associatedData = new Uint8Array([0xC0 | SymEncryptedSessionKeyPacket.tag, this.version, this.sessionKeyEncryptionAlgorithm, this.aeadAlgorithm]);\n const modeInstance = await mode(algo, encryptionKey);\n this.encrypted = await modeInstance.encrypt(this.sessionKey, this.iv, associatedData);\n } else {\n const toEncrypt = util.concatUint8Array([\n new Uint8Array([this.sessionKeyAlgorithm]),\n this.sessionKey\n ]);\n this.encrypted = await crypto.mode.cfb.encrypt(algo, encryptionKey, toEncrypt, new Uint8Array(blockSize), config);\n }\n }\n}\n\nexport default SymEncryptedSessionKeyPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport KeyID from '../type/keyid';\nimport defaultConfig from '../config';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport { UnsupportedError } from './packet';\n\n/**\n * Implementation of the Key Material Packet (Tag 5,6,7,14)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.5|RFC4480 5.5}:\n * A key material packet contains all the information about a public or\n * private key. There are four variants of this packet type, and two\n * major versions.\n *\n * A Public-Key packet starts a series of packets that forms an OpenPGP\n * key (sometimes called an OpenPGP certificate).\n */\nclass PublicKeyPacket {\n static get tag() {\n return enums.packet.publicKey;\n }\n\n /**\n * @param {Date} [date] - Creation date\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n constructor(date = new Date(), config = defaultConfig) {\n /**\n * Packet version\n * @type {Integer}\n */\n this.version = config.v5Keys ? 5 : 4;\n /**\n * Key creation date.\n * @type {Date}\n */\n this.created = util.normalizeDate(date);\n /**\n * Public key algorithm.\n * @type {enums.publicKey}\n */\n this.algorithm = null;\n /**\n * Algorithm specific public params\n * @type {Object}\n */\n this.publicParams = null;\n /**\n * Time until expiration in days (V3 only)\n * @type {Integer}\n */\n this.expirationTimeV3 = 0;\n /**\n * Fingerprint bytes\n * @type {Uint8Array}\n */\n this.fingerprint = null;\n /**\n * KeyID\n * @type {module:type/keyid~KeyID}\n */\n this.keyID = null;\n }\n\n /**\n * Create a PublicKeyPacket from a SecretKeyPacket\n * @param {SecretKeyPacket} secretKeyPacket - key packet to convert\n * @returns {PublicKeyPacket} public key packet\n * @static\n */\n static fromSecretKeyPacket(secretKeyPacket) {\n const keyPacket = new PublicKeyPacket();\n const { version, created, algorithm, publicParams, keyID, fingerprint } = secretKeyPacket;\n keyPacket.version = version;\n keyPacket.created = created;\n keyPacket.algorithm = algorithm;\n keyPacket.publicParams = publicParams;\n keyPacket.keyID = keyID;\n keyPacket.fingerprint = fingerprint;\n return keyPacket;\n }\n\n /**\n * Internal Parser for public keys as specified in {@link https://tools.ietf.org/html/rfc4880#section-5.5.2|RFC 4880 section 5.5.2 Public-Key Packet Formats}\n * @param {Uint8Array} bytes - Input array to read the packet from\n * @returns {Object} This object with attributes set by the parser\n * @async\n */\n async read(bytes) {\n let pos = 0;\n // A one-octet version number (3, 4 or 5).\n this.version = bytes[pos++];\n\n if (this.version === 4 || this.version === 5) {\n // - A four-octet number denoting the time that the key was created.\n this.created = util.readDate(bytes.subarray(pos, pos + 4));\n pos += 4;\n\n // - A one-octet number denoting the public-key algorithm of this key.\n this.algorithm = bytes[pos++];\n\n if (this.version === 5) {\n // - A four-octet scalar octet count for the following key material.\n pos += 4;\n }\n\n // - A series of values comprising the key material.\n const { read, publicParams } = crypto.parsePublicKeyParams(this.algorithm, bytes.subarray(pos));\n this.publicParams = publicParams;\n pos += read;\n\n // we set the fingerprint and keyID already to make it possible to put together the key packets directly in the Key constructor\n await this.computeFingerprintAndKeyID();\n return pos;\n }\n throw new UnsupportedError(`Version ${this.version} of the key packet is unsupported.`);\n }\n\n /**\n * Creates an OpenPGP public key packet for the given key.\n * @returns {Uint8Array} Bytes encoding the public key OpenPGP packet.\n */\n write() {\n const arr = [];\n // Version\n arr.push(new Uint8Array([this.version]));\n arr.push(util.writeDate(this.created));\n // A one-octet number denoting the public-key algorithm of this key\n arr.push(new Uint8Array([this.algorithm]));\n\n const params = crypto.serializeParams(this.algorithm, this.publicParams);\n if (this.version === 5) {\n // A four-octet scalar octet count for the following key material\n arr.push(util.writeNumber(params.length, 4));\n }\n // Algorithm-specific params\n arr.push(params);\n return util.concatUint8Array(arr);\n }\n\n /**\n * Write packet in order to be hashed; either for a signature or a fingerprint\n * @param {Integer} version - target version of signature or key\n */\n writeForHash(version) {\n const bytes = this.writePublicKey();\n\n if (version === 5) {\n return util.concatUint8Array([new Uint8Array([0x9A]), util.writeNumber(bytes.length, 4), bytes]);\n }\n return util.concatUint8Array([new Uint8Array([0x99]), util.writeNumber(bytes.length, 2), bytes]);\n }\n\n /**\n * Check whether secret-key data is available in decrypted form. Returns null for public keys.\n * @returns {Boolean|null}\n */\n isDecrypted() {\n return null;\n }\n\n /**\n * Returns the creation time of the key\n * @returns {Date}\n */\n getCreationTime() {\n return this.created;\n }\n\n /**\n * Return the key ID of the key\n * @returns {module:type/keyid~KeyID} The 8-byte key ID\n */\n getKeyID() {\n return this.keyID;\n }\n\n /**\n * Computes and set the key ID and fingerprint of the key\n * @async\n */\n async computeFingerprintAndKeyID() {\n await this.computeFingerprint();\n this.keyID = new KeyID();\n\n if (this.version === 5) {\n this.keyID.read(this.fingerprint.subarray(0, 8));\n } else if (this.version === 4) {\n this.keyID.read(this.fingerprint.subarray(12, 20));\n } else {\n throw new Error('Unsupported key version');\n }\n }\n\n /**\n * Computes and set the fingerprint of the key\n */\n async computeFingerprint() {\n const toHash = this.writeForHash(this.version);\n\n if (this.version === 5) {\n this.fingerprint = await crypto.hash.sha256(toHash);\n } else if (this.version === 4) {\n this.fingerprint = await crypto.hash.sha1(toHash);\n } else {\n throw new Error('Unsupported key version');\n }\n }\n\n /**\n * Returns the fingerprint of the key, as an array of bytes\n * @returns {Uint8Array} A Uint8Array containing the fingerprint\n */\n getFingerprintBytes() {\n return this.fingerprint;\n }\n\n /**\n * Calculates and returns the fingerprint of the key, as a string\n * @returns {String} A string containing the fingerprint in lowercase hex\n */\n getFingerprint() {\n return util.uint8ArrayToHex(this.getFingerprintBytes());\n }\n\n /**\n * Calculates whether two keys have the same fingerprint without actually calculating the fingerprint\n * @returns {Boolean} Whether the two keys have the same version and public key data.\n */\n hasSameFingerprintAs(other) {\n return this.version === other.version && util.equalsUint8Array(this.writePublicKey(), other.writePublicKey());\n }\n\n /**\n * Returns algorithm information\n * @returns {Object} An object of the form {algorithm: String, bits:int, curve:String}.\n */\n getAlgorithmInfo() {\n const result = {};\n result.algorithm = enums.read(enums.publicKey, this.algorithm);\n // RSA, DSA or ElGamal public modulo\n const modulo = this.publicParams.n || this.publicParams.p;\n if (modulo) {\n result.bits = util.uint8ArrayBitLength(modulo);\n } else if (this.publicParams.oid) {\n result.curve = this.publicParams.oid.getName();\n }\n return result;\n }\n}\n\n/**\n * Alias of read()\n * @see PublicKeyPacket#read\n */\nPublicKeyPacket.prototype.readPublicKey = PublicKeyPacket.prototype.read;\n\n/**\n * Alias of write()\n * @see PublicKeyPacket#write\n */\nPublicKeyPacket.prototype.writePublicKey = PublicKeyPacket.prototype.write;\n\nexport default PublicKeyPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\n\nimport LiteralDataPacket from './literal_data';\nimport CompressedDataPacket from './compressed_data';\nimport OnePassSignaturePacket from './one_pass_signature';\nimport SignaturePacket from './signature';\nimport PacketList from './packetlist';\n\n// A SE packet can contain the following packet types\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([\n LiteralDataPacket,\n CompressedDataPacket,\n OnePassSignaturePacket,\n SignaturePacket\n]);\n\n/**\n * Implementation of the Symmetrically Encrypted Data Packet (Tag 9)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.7|RFC4880 5.7}:\n * The Symmetrically Encrypted Data packet contains data encrypted with a\n * symmetric-key algorithm. When it has been decrypted, it contains other\n * packets (usually a literal data packet or compressed data packet, but in\n * theory other Symmetrically Encrypted Data packets or sequences of packets\n * that form whole OpenPGP messages).\n */\nclass SymmetricallyEncryptedDataPacket {\n static get tag() {\n return enums.packet.symmetricallyEncryptedData;\n }\n\n constructor() {\n /**\n * Encrypted secret-key data\n */\n this.encrypted = null;\n /**\n * Decrypted packets contained within.\n * @type {PacketList}\n */\n this.packets = null;\n }\n\n read(bytes) {\n this.encrypted = bytes;\n }\n\n write() {\n return this.encrypted;\n }\n\n /**\n * Decrypt the symmetrically-encrypted packet data\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} sessionKeyAlgorithm - Symmetric key algorithm to use\n * @param {Uint8Array} key - The key of cipher blocksize length to be used\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n\n * @throws {Error} if decryption was not successful\n * @async\n */\n async decrypt(sessionKeyAlgorithm, key, config = defaultConfig) {\n // If MDC errors are not being ignored, all missing MDC packets in symmetrically encrypted data should throw an error\n if (!config.allowUnauthenticatedMessages) {\n throw new Error('Message is not authenticated.');\n }\n\n const { blockSize } = crypto.getCipher(sessionKeyAlgorithm);\n const encrypted = await stream.readToEnd(stream.clone(this.encrypted));\n const decrypted = await crypto.mode.cfb.decrypt(sessionKeyAlgorithm, key,\n encrypted.subarray(blockSize + 2),\n encrypted.subarray(2, blockSize + 2)\n );\n\n this.packets = await PacketList.fromBinary(decrypted, allowedPackets, config);\n }\n\n /**\n * Encrypt the symmetrically-encrypted packet data\n * See {@link https://tools.ietf.org/html/rfc4880#section-9.2|RFC 4880 9.2} for algorithms.\n * @param {module:enums.symmetric} sessionKeyAlgorithm - Symmetric key algorithm to use\n * @param {Uint8Array} key - The key of cipher blocksize length to be used\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if encryption was not successful\n * @async\n */\n async encrypt(sessionKeyAlgorithm, key, config = defaultConfig) {\n const data = this.packets.write();\n const { blockSize } = crypto.getCipher(sessionKeyAlgorithm);\n\n const prefix = await crypto.getPrefixRandom(sessionKeyAlgorithm);\n const FRE = await crypto.mode.cfb.encrypt(sessionKeyAlgorithm, key, prefix, new Uint8Array(blockSize), config);\n const ciphertext = await crypto.mode.cfb.encrypt(sessionKeyAlgorithm, key, data, FRE.subarray(2), config);\n this.encrypted = util.concat([FRE, ciphertext]);\n }\n}\n\nexport default SymmetricallyEncryptedDataPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport enums from '../enums';\n\n/**\n * Implementation of the strange \"Marker packet\" (Tag 10)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.8|RFC4880 5.8}:\n * An experimental version of PGP used this packet as the Literal\n * packet, but no released version of PGP generated Literal packets with this\n * tag. With PGP 5.x, this packet has been reassigned and is reserved for use as\n * the Marker packet.\n *\n * The body of this packet consists of:\n * The three octets 0x50, 0x47, 0x50 (which spell \"PGP\" in UTF-8).\n *\n * Such a packet MUST be ignored when received. It may be placed at the\n * beginning of a message that uses features not available in PGP\n * version 2.6 in order to cause that version to report that newer\n * software is necessary to process the message.\n */\nclass MarkerPacket {\n static get tag() {\n return enums.packet.marker;\n }\n\n /**\n * Parsing function for a marker data packet (tag 10).\n * @param {Uint8Array} bytes - Payload of a tag 10 packet\n * @returns {Boolean} whether the packet payload contains \"PGP\"\n */\n read(bytes) {\n if (bytes[0] === 0x50 && // P\n bytes[1] === 0x47 && // G\n bytes[2] === 0x50) { // P\n return true;\n }\n return false;\n }\n\n write() {\n return new Uint8Array([0x50, 0x47, 0x50]);\n }\n}\n\nexport default MarkerPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport PublicKeyPacket from './public_key';\nimport enums from '../enums';\n\n/**\n * A Public-Subkey packet (tag 14) has exactly the same format as a\n * Public-Key packet, but denotes a subkey. One or more subkeys may be\n * associated with a top-level key. By convention, the top-level key\n * provides signature services, and the subkeys provide encryption\n * services.\n * @extends PublicKeyPacket\n */\nclass PublicSubkeyPacket extends PublicKeyPacket {\n static get tag() {\n return enums.packet.publicSubkey;\n }\n\n /**\n * @param {Date} [date] - Creation date\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n // eslint-disable-next-line no-useless-constructor\n constructor(date, config) {\n super(date, config);\n }\n\n /**\n * Create a PublicSubkeyPacket from a SecretSubkeyPacket\n * @param {SecretSubkeyPacket} secretSubkeyPacket - subkey packet to convert\n * @returns {SecretSubkeyPacket} public key packet\n * @static\n */\n static fromSecretSubkeyPacket(secretSubkeyPacket) {\n const keyPacket = new PublicSubkeyPacket();\n const { version, created, algorithm, publicParams, keyID, fingerprint } = secretSubkeyPacket;\n keyPacket.version = version;\n keyPacket.created = created;\n keyPacket.algorithm = algorithm;\n keyPacket.publicParams = publicParams;\n keyPacket.keyID = keyID;\n keyPacket.fingerprint = fingerprint;\n return keyPacket;\n }\n}\n\nexport default PublicSubkeyPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { readSimpleLength, writeSimpleLength } from './packet';\nimport enums from '../enums';\nimport util from '../util';\n\n/**\n * Implementation of the User Attribute Packet (Tag 17)\n *\n * The User Attribute packet is a variation of the User ID packet. It\n * is capable of storing more types of data than the User ID packet,\n * which is limited to text. Like the User ID packet, a User Attribute\n * packet may be certified by the key owner (\"self-signed\") or any other\n * key owner who cares to certify it. Except as noted, a User Attribute\n * packet may be used anywhere that a User ID packet may be used.\n *\n * While User Attribute packets are not a required part of the OpenPGP\n * standard, implementations SHOULD provide at least enough\n * compatibility to properly handle a certification signature on the\n * User Attribute packet. A simple way to do this is by treating the\n * User Attribute packet as a User ID packet with opaque contents, but\n * an implementation may use any method desired.\n */\nclass UserAttributePacket {\n static get tag() {\n return enums.packet.userAttribute;\n }\n\n constructor() {\n this.attributes = [];\n }\n\n /**\n * parsing function for a user attribute packet (tag 17).\n * @param {Uint8Array} input - Payload of a tag 17 packet\n */\n read(bytes) {\n let i = 0;\n while (i < bytes.length) {\n const len = readSimpleLength(bytes.subarray(i, bytes.length));\n i += len.offset;\n\n this.attributes.push(util.uint8ArrayToString(bytes.subarray(i, i + len.len)));\n i += len.len;\n }\n }\n\n /**\n * Creates a binary representation of the user attribute packet\n * @returns {Uint8Array} String representation.\n */\n write() {\n const arr = [];\n for (let i = 0; i < this.attributes.length; i++) {\n arr.push(writeSimpleLength(this.attributes[i].length));\n arr.push(util.stringToUint8Array(this.attributes[i]));\n }\n return util.concatUint8Array(arr);\n }\n\n /**\n * Compare for equality\n * @param {UserAttributePacket} usrAttr\n * @returns {Boolean} True if equal.\n */\n equals(usrAttr) {\n if (!usrAttr || !(usrAttr instanceof UserAttributePacket)) {\n return false;\n }\n return this.attributes.every(function(attr, index) {\n return attr === usrAttr.attributes[index];\n });\n }\n}\n\nexport default UserAttributePacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport PublicKeyPacket from './public_key';\nimport S2K from '../type/s2k';\nimport crypto from '../crypto';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\nimport { UnsupportedError } from './packet';\n\n/**\n * A Secret-Key packet contains all the information that is found in a\n * Public-Key packet, including the public-key material, but also\n * includes the secret-key material after all the public-key fields.\n * @extends PublicKeyPacket\n */\nclass SecretKeyPacket extends PublicKeyPacket {\n static get tag() {\n return enums.packet.secretKey;\n }\n\n /**\n * @param {Date} [date] - Creation date\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n constructor(date = new Date(), config = defaultConfig) {\n super(date, config);\n /**\n * Secret-key data\n */\n this.keyMaterial = null;\n /**\n * Indicates whether secret-key data is encrypted. `this.isEncrypted === false` means data is available in decrypted form.\n */\n this.isEncrypted = null;\n /**\n * S2K usage\n * @type {enums.symmetric}\n */\n this.s2kUsage = 0;\n /**\n * S2K object\n * @type {type/s2k}\n */\n this.s2k = null;\n /**\n * Symmetric algorithm to encrypt the key with\n * @type {enums.symmetric}\n */\n this.symmetric = null;\n /**\n * AEAD algorithm to encrypt the key with (if AEAD protection is enabled)\n * @type {enums.aead}\n */\n this.aead = null;\n /**\n * Decrypted private parameters, referenced by name\n * @type {Object}\n */\n this.privateParams = null;\n }\n\n // 5.5.3. Secret-Key Packet Formats\n\n /**\n * Internal parser for private keys as specified in\n * {@link https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-04#section-5.5.3|RFC4880bis-04 section 5.5.3}\n * @param {Uint8Array} bytes - Input string to read the packet from\n * @async\n */\n async read(bytes) {\n // - A Public-Key or Public-Subkey packet, as described above.\n let i = await this.readPublicKey(bytes);\n const startOfSecretKeyData = i;\n\n // - One octet indicating string-to-key usage conventions. Zero\n // indicates that the secret-key data is not encrypted. 255 or 254\n // indicates that a string-to-key specifier is being given. Any\n // other value is a symmetric-key encryption algorithm identifier.\n this.s2kUsage = bytes[i++];\n\n // - Only for a version 5 packet, a one-octet scalar octet count of\n // the next 4 optional fields.\n if (this.version === 5) {\n i++;\n }\n\n try {\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // one-octet symmetric encryption algorithm.\n if (this.s2kUsage === 255 || this.s2kUsage === 254 || this.s2kUsage === 253) {\n this.symmetric = bytes[i++];\n\n // - [Optional] If string-to-key usage octet was 253, a one-octet\n // AEAD algorithm.\n if (this.s2kUsage === 253) {\n this.aead = bytes[i++];\n }\n\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // string-to-key specifier. The length of the string-to-key\n // specifier is implied by its type, as described above.\n this.s2k = new S2K();\n i += this.s2k.read(bytes.subarray(i, bytes.length));\n\n if (this.s2k.type === 'gnu-dummy') {\n return;\n }\n } else if (this.s2kUsage) {\n this.symmetric = this.s2kUsage;\n }\n\n // - [Optional] If secret data is encrypted (string-to-key usage octet\n // not zero), an Initial Vector (IV) of the same length as the\n // cipher's block size.\n if (this.s2kUsage) {\n this.iv = bytes.subarray(\n i,\n i + crypto.getCipher(this.symmetric).blockSize\n );\n\n i += this.iv.length;\n }\n } catch (e) {\n // if the s2k is unsupported, we still want to support encrypting and verifying with the given key\n if (!this.s2kUsage) throw e; // always throw for decrypted keys\n this.unparseableKeyMaterial = bytes.subarray(startOfSecretKeyData);\n this.isEncrypted = true;\n }\n\n // - Only for a version 5 packet, a four-octet scalar octet count for\n // the following key material.\n if (this.version === 5) {\n i += 4;\n }\n\n // - Plain or encrypted multiprecision integers comprising the secret\n // key data. These algorithm-specific fields are as described\n // below.\n this.keyMaterial = bytes.subarray(i);\n this.isEncrypted = !!this.s2kUsage;\n\n if (!this.isEncrypted) {\n const cleartext = this.keyMaterial.subarray(0, -2);\n if (!util.equalsUint8Array(util.writeChecksum(cleartext), this.keyMaterial.subarray(-2))) {\n throw new Error('Key checksum mismatch');\n }\n try {\n const { privateParams } = crypto.parsePrivateKeyParams(this.algorithm, cleartext, this.publicParams);\n this.privateParams = privateParams;\n } catch (err) {\n if (err instanceof UnsupportedError) throw err;\n // avoid throwing potentially sensitive errors\n throw new Error('Error reading MPIs');\n }\n }\n }\n\n /**\n * Creates an OpenPGP key packet for the given key.\n * @returns {Uint8Array} A string of bytes containing the secret key OpenPGP packet.\n */\n write() {\n const serializedPublicKey = this.writePublicKey();\n if (this.unparseableKeyMaterial) {\n return util.concatUint8Array([\n serializedPublicKey,\n this.unparseableKeyMaterial\n ]);\n }\n\n const arr = [serializedPublicKey];\n arr.push(new Uint8Array([this.s2kUsage]));\n\n const optionalFieldsArr = [];\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // one- octet symmetric encryption algorithm.\n if (this.s2kUsage === 255 || this.s2kUsage === 254 || this.s2kUsage === 253) {\n optionalFieldsArr.push(this.symmetric);\n\n // - [Optional] If string-to-key usage octet was 253, a one-octet\n // AEAD algorithm.\n if (this.s2kUsage === 253) {\n optionalFieldsArr.push(this.aead);\n }\n\n // - [Optional] If string-to-key usage octet was 255, 254, or 253, a\n // string-to-key specifier. The length of the string-to-key\n // specifier is implied by its type, as described above.\n optionalFieldsArr.push(...this.s2k.write());\n }\n\n // - [Optional] If secret data is encrypted (string-to-key usage octet\n // not zero), an Initial Vector (IV) of the same length as the\n // cipher's block size.\n if (this.s2kUsage && this.s2k.type !== 'gnu-dummy') {\n optionalFieldsArr.push(...this.iv);\n }\n\n if (this.version === 5) {\n arr.push(new Uint8Array([optionalFieldsArr.length]));\n }\n arr.push(new Uint8Array(optionalFieldsArr));\n\n if (!this.isDummy()) {\n if (!this.s2kUsage) {\n this.keyMaterial = crypto.serializeParams(this.algorithm, this.privateParams);\n }\n\n if (this.version === 5) {\n arr.push(util.writeNumber(this.keyMaterial.length, 4));\n }\n arr.push(this.keyMaterial);\n\n if (!this.s2kUsage) {\n arr.push(util.writeChecksum(this.keyMaterial));\n }\n }\n\n return util.concatUint8Array(arr);\n }\n\n /**\n * Check whether secret-key data is available in decrypted form.\n * Returns false for gnu-dummy keys and null for public keys.\n * @returns {Boolean|null}\n */\n isDecrypted() {\n return this.isEncrypted === false;\n }\n\n /**\n * Check whether the key includes secret key material.\n * Some secret keys do not include it, and can thus only be used\n * for public-key operations (encryption and verification).\n * Such keys are:\n * - GNU-dummy keys, where the secret material has been stripped away\n * - encrypted keys with unsupported S2K or cipher\n */\n isMissingSecretKeyMaterial() {\n return this.unparseableKeyMaterial !== undefined || this.isDummy();\n }\n\n /**\n * Check whether this is a gnu-dummy key\n * @returns {Boolean}\n */\n isDummy() {\n return !!(this.s2k && this.s2k.type === 'gnu-dummy');\n }\n\n /**\n * Remove private key material, converting the key to a dummy one.\n * The resulting key cannot be used for signing/decrypting but can still verify signatures.\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n makeDummy(config = defaultConfig) {\n if (this.isDummy()) {\n return;\n }\n if (this.isDecrypted()) {\n this.clearPrivateParams();\n }\n delete this.unparseableKeyMaterial;\n this.isEncrypted = null;\n this.keyMaterial = null;\n this.s2k = new S2K(config);\n this.s2k.algorithm = 0;\n this.s2k.c = 0;\n this.s2k.type = 'gnu-dummy';\n this.s2kUsage = 254;\n this.symmetric = enums.symmetric.aes256;\n }\n\n /**\n * Encrypt the payload. By default, we use aes256 and iterated, salted string\n * to key specifier. If the key is in a decrypted state (isEncrypted === false)\n * and the passphrase is empty or undefined, the key will be set as not encrypted.\n * This can be used to remove passphrase protection after calling decrypt().\n * @param {String} passphrase\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if encryption was not successful\n * @async\n */\n async encrypt(passphrase, config = defaultConfig) {\n if (this.isDummy()) {\n return;\n }\n\n if (!this.isDecrypted()) {\n throw new Error('Key packet is already encrypted');\n }\n\n if (!passphrase) {\n throw new Error('A non-empty passphrase is required for key encryption.');\n }\n\n this.s2k = new S2K(config);\n this.s2k.salt = crypto.random.getRandomBytes(8);\n const cleartext = crypto.serializeParams(this.algorithm, this.privateParams);\n this.symmetric = enums.symmetric.aes256;\n const key = await produceEncryptionKey(this.s2k, passphrase, this.symmetric);\n\n const { blockSize } = crypto.getCipher(this.symmetric);\n this.iv = crypto.random.getRandomBytes(blockSize);\n\n if (config.aeadProtect) {\n this.s2kUsage = 253;\n this.aead = enums.aead.eax;\n const mode = crypto.getAEADMode(this.aead);\n const modeInstance = await mode(this.symmetric, key);\n this.keyMaterial = await modeInstance.encrypt(cleartext, this.iv.subarray(0, mode.ivLength), new Uint8Array());\n } else {\n this.s2kUsage = 254;\n this.keyMaterial = await crypto.mode.cfb.encrypt(this.symmetric, key, util.concatUint8Array([\n cleartext,\n await crypto.hash.sha1(cleartext, config)\n ]), this.iv, config);\n }\n }\n\n /**\n * Decrypts the private key params which are needed to use the key.\n * Successful decryption does not imply key integrity, call validate() to confirm that.\n * {@link SecretKeyPacket.isDecrypted} should be false, as\n * otherwise calls to this function will throw an error.\n * @param {String} passphrase - The passphrase for this private key as string\n * @throws {Error} if the key is already decrypted, or if decryption was not successful\n * @async\n */\n async decrypt(passphrase) {\n if (this.isDummy()) {\n return false;\n }\n\n if (this.unparseableKeyMaterial) {\n throw new Error('Key packet cannot be decrypted: unsupported S2K or cipher algo');\n }\n\n if (this.isDecrypted()) {\n throw new Error('Key packet is already decrypted.');\n }\n\n let key;\n if (this.s2kUsage === 254 || this.s2kUsage === 253) {\n key = await produceEncryptionKey(this.s2k, passphrase, this.symmetric);\n } else if (this.s2kUsage === 255) {\n throw new Error('Encrypted private key is authenticated using an insecure two-byte hash');\n } else {\n throw new Error('Private key is encrypted using an insecure S2K function: unsalted MD5');\n }\n\n let cleartext;\n if (this.s2kUsage === 253) {\n const mode = crypto.getAEADMode(this.aead);\n const modeInstance = await mode(this.symmetric, key);\n try {\n cleartext = await modeInstance.decrypt(this.keyMaterial, this.iv.subarray(0, mode.ivLength), new Uint8Array());\n } catch (err) {\n if (err.message === 'Authentication tag mismatch') {\n throw new Error('Incorrect key passphrase: ' + err.message);\n }\n throw err;\n }\n } else {\n const cleartextWithHash = await crypto.mode.cfb.decrypt(this.symmetric, key, this.keyMaterial, this.iv);\n\n cleartext = cleartextWithHash.subarray(0, -20);\n const hash = await crypto.hash.sha1(cleartext);\n\n if (!util.equalsUint8Array(hash, cleartextWithHash.subarray(-20))) {\n throw new Error('Incorrect key passphrase');\n }\n }\n\n try {\n const { privateParams } = crypto.parsePrivateKeyParams(this.algorithm, cleartext, this.publicParams);\n this.privateParams = privateParams;\n } catch (err) {\n throw new Error('Error reading MPIs');\n }\n this.isEncrypted = false;\n this.keyMaterial = null;\n this.s2kUsage = 0;\n }\n\n /**\n * Checks that the key parameters are consistent\n * @throws {Error} if validation was not successful\n * @async\n */\n async validate() {\n if (this.isDummy()) {\n return;\n }\n\n if (!this.isDecrypted()) {\n throw new Error('Key is not decrypted');\n }\n\n let validParams;\n try {\n // this can throw if some parameters are undefined\n validParams = await crypto.validateParams(this.algorithm, this.publicParams, this.privateParams);\n } catch (_) {\n validParams = false;\n }\n if (!validParams) {\n throw new Error('Key is invalid');\n }\n }\n\n async generate(bits, curve) {\n const { privateParams, publicParams } = await crypto.generateParams(this.algorithm, bits, curve);\n this.privateParams = privateParams;\n this.publicParams = publicParams;\n this.isEncrypted = false;\n }\n\n /**\n * Clear private key parameters\n */\n clearPrivateParams() {\n if (this.isMissingSecretKeyMaterial()) {\n return;\n }\n\n Object.keys(this.privateParams).forEach(name => {\n const param = this.privateParams[name];\n param.fill(0);\n delete this.privateParams[name];\n });\n this.privateParams = null;\n this.isEncrypted = true;\n }\n}\n\nasync function produceEncryptionKey(s2k, passphrase, algorithm) {\n const { keySize } = crypto.getCipher(algorithm);\n return s2k.produceKey(passphrase, keySize);\n}\n\nexport default SecretKeyPacket;\n","\n// email-addresses.js - RFC 5322 email address parser\n// v 3.1.0\n//\n// http://tools.ietf.org/html/rfc5322\n//\n// This library does not validate email addresses.\n// emailAddresses attempts to parse addresses using the (fairly liberal)\n// grammar specified in RFC 5322.\n//\n// email-addresses returns {\n// ast: ,\n// addresses: [{\n// node: ,\n// name: ,\n// address: ,\n// local: ,\n// domain: \n// }, ...]\n// }\n//\n// emailAddresses.parseOneAddress and emailAddresses.parseAddressList\n// work as you might expect. Try it out.\n//\n// Many thanks to Dominic Sayers and his documentation on the is_email function,\n// http://code.google.com/p/isemail/ , which helped greatly in writing this parser.\n\n(function (global) {\n\"use strict\";\n\nfunction parse5322(opts) {\n\n // tokenizing functions\n\n function inStr() { return pos < len; }\n function curTok() { return parseString[pos]; }\n function getPos() { return pos; }\n function setPos(i) { pos = i; }\n function nextTok() { pos += 1; }\n function initialize() {\n pos = 0;\n len = parseString.length;\n }\n\n // parser helper functions\n\n function o(name, value) {\n return {\n name: name,\n tokens: value || \"\",\n semantic: value || \"\",\n children: []\n };\n }\n\n function wrap(name, ast) {\n var n;\n if (ast === null) { return null; }\n n = o(name);\n n.tokens = ast.tokens;\n n.semantic = ast.semantic;\n n.children.push(ast);\n return n;\n }\n\n function add(parent, child) {\n if (child !== null) {\n parent.tokens += child.tokens;\n parent.semantic += child.semantic;\n }\n parent.children.push(child);\n return parent;\n }\n\n function compareToken(fxnCompare) {\n var tok;\n if (!inStr()) { return null; }\n tok = curTok();\n if (fxnCompare(tok)) {\n nextTok();\n return o('token', tok);\n }\n return null;\n }\n\n function literal(lit) {\n return function literalFunc() {\n return wrap('literal', compareToken(function (tok) {\n return tok === lit;\n }));\n };\n }\n\n function and() {\n var args = arguments;\n return function andFunc() {\n var i, s, result, start;\n start = getPos();\n s = o('and');\n for (i = 0; i < args.length; i += 1) {\n result = args[i]();\n if (result === null) {\n setPos(start);\n return null;\n }\n add(s, result);\n }\n return s;\n };\n }\n\n function or() {\n var args = arguments;\n return function orFunc() {\n var i, result, start;\n start = getPos();\n for (i = 0; i < args.length; i += 1) {\n result = args[i]();\n if (result !== null) {\n return result;\n }\n setPos(start);\n }\n return null;\n };\n }\n\n function opt(prod) {\n return function optFunc() {\n var result, start;\n start = getPos();\n result = prod();\n if (result !== null) {\n return result;\n }\n else {\n setPos(start);\n return o('opt');\n }\n };\n }\n\n function invis(prod) {\n return function invisFunc() {\n var result = prod();\n if (result !== null) {\n result.semantic = \"\";\n }\n return result;\n };\n }\n\n function colwsp(prod) {\n return function collapseSemanticWhitespace() {\n var result = prod();\n if (result !== null && result.semantic.length > 0) {\n result.semantic = \" \";\n }\n return result;\n };\n }\n\n function star(prod, minimum) {\n return function starFunc() {\n var s, result, count, start, min;\n start = getPos();\n s = o('star');\n count = 0;\n min = minimum === undefined ? 0 : minimum;\n while ((result = prod()) !== null) {\n count = count + 1;\n add(s, result);\n }\n if (count >= min) {\n return s;\n }\n else {\n setPos(start);\n return null;\n }\n };\n }\n\n // One expects names to get normalized like this:\n // \" First Last \" -> \"First Last\"\n // \"First Last\" -> \"First Last\"\n // \"First Last\" -> \"First Last\"\n function collapseWhitespace(s) {\n return s.replace(/([ \\t]|\\r\\n)+/g, ' ').replace(/^\\s*/, '').replace(/\\s*$/, '');\n }\n\n // UTF-8 pseudo-production (RFC 6532)\n // RFC 6532 extends RFC 5322 productions to include UTF-8\n // using the following productions:\n // UTF8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4\n // UTF8-2 = \n // UTF8-3 = \n // UTF8-4 = \n //\n // For reference, the extended RFC 5322 productions are:\n // VCHAR =/ UTF8-non-ascii\n // ctext =/ UTF8-non-ascii\n // atext =/ UTF8-non-ascii\n // qtext =/ UTF8-non-ascii\n // dtext =/ UTF8-non-ascii\n function isUTF8NonAscii(tok) {\n // In JavaScript, we just deal directly with Unicode code points,\n // so we aren't checking individual bytes for UTF-8 encoding.\n // Just check that the character is non-ascii.\n return tok.charCodeAt(0) >= 128;\n }\n\n\n // common productions (RFC 5234)\n // http://tools.ietf.org/html/rfc5234\n // B.1. Core Rules\n\n // CR = %x0D\n // ; carriage return\n function cr() { return wrap('cr', literal('\\r')()); }\n\n // CRLF = CR LF\n // ; Internet standard newline\n function crlf() { return wrap('crlf', and(cr, lf)()); }\n\n // DQUOTE = %x22\n // ; \" (Double Quote)\n function dquote() { return wrap('dquote', literal('\"')()); }\n\n // HTAB = %x09\n // ; horizontal tab\n function htab() { return wrap('htab', literal('\\t')()); }\n\n // LF = %x0A\n // ; linefeed\n function lf() { return wrap('lf', literal('\\n')()); }\n\n // SP = %x20\n function sp() { return wrap('sp', literal(' ')()); }\n\n // VCHAR = %x21-7E\n // ; visible (printing) characters\n function vchar() {\n return wrap('vchar', compareToken(function vcharFunc(tok) {\n var code = tok.charCodeAt(0);\n var accept = (0x21 <= code && code <= 0x7E);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n }));\n }\n\n // WSP = SP / HTAB\n // ; white space\n function wsp() { return wrap('wsp', or(sp, htab)()); }\n\n\n // email productions (RFC 5322)\n // http://tools.ietf.org/html/rfc5322\n // 3.2.1. Quoted characters\n\n // quoted-pair = (\"\\\" (VCHAR / WSP)) / obs-qp\n function quotedPair() {\n var qp = wrap('quoted-pair',\n or(\n and(literal('\\\\'), or(vchar, wsp)),\n obsQP\n )());\n if (qp === null) { return null; }\n // a quoted pair will be two characters, and the \"\\\" character\n // should be semantically \"invisible\" (RFC 5322 3.2.1)\n qp.semantic = qp.semantic[1];\n return qp;\n }\n\n // 3.2.2. Folding White Space and Comments\n\n // FWS = ([*WSP CRLF] 1*WSP) / obs-FWS\n function fws() {\n return wrap('fws', or(\n obsFws,\n and(\n opt(and(\n star(wsp),\n invis(crlf)\n )),\n star(wsp, 1)\n )\n )());\n }\n\n // ctext = %d33-39 / ; Printable US-ASCII\n // %d42-91 / ; characters not including\n // %d93-126 / ; \"(\", \")\", or \"\\\"\n // obs-ctext\n function ctext() {\n return wrap('ctext', or(\n function ctextFunc1() {\n return compareToken(function ctextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 <= code && code <= 39) ||\n (42 <= code && code <= 91) ||\n (93 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsCtext\n )());\n }\n\n // ccontent = ctext / quoted-pair / comment\n function ccontent() {\n return wrap('ccontent', or(ctext, quotedPair, comment)());\n }\n\n // comment = \"(\" *([FWS] ccontent) [FWS] \")\"\n function comment() {\n return wrap('comment', and(\n literal('('),\n star(and(opt(fws), ccontent)),\n opt(fws),\n literal(')')\n )());\n }\n\n // CFWS = (1*([FWS] comment) [FWS]) / FWS\n function cfws() {\n return wrap('cfws', or(\n and(\n star(\n and(opt(fws), comment),\n 1\n ),\n opt(fws)\n ),\n fws\n )());\n }\n\n // 3.2.3. Atom\n\n //atext = ALPHA / DIGIT / ; Printable US-ASCII\n // \"!\" / \"#\" / ; characters not including\n // \"$\" / \"%\" / ; specials. Used for atoms.\n // \"&\" / \"'\" /\n // \"*\" / \"+\" /\n // \"-\" / \"/\" /\n // \"=\" / \"?\" /\n // \"^\" / \"_\" /\n // \"`\" / \"{\" /\n // \"|\" / \"}\" /\n // \"~\"\n function atext() {\n return wrap('atext', compareToken(function atextFunc(tok) {\n var accept =\n ('a' <= tok && tok <= 'z') ||\n ('A' <= tok && tok <= 'Z') ||\n ('0' <= tok && tok <= '9') ||\n (['!', '#', '$', '%', '&', '\\'', '*', '+', '-', '/',\n '=', '?', '^', '_', '`', '{', '|', '}', '~'].indexOf(tok) >= 0);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n }));\n }\n\n // atom = [CFWS] 1*atext [CFWS]\n function atom() {\n return wrap('atom', and(colwsp(opt(cfws)), star(atext, 1), colwsp(opt(cfws)))());\n }\n\n // dot-atom-text = 1*atext *(\".\" 1*atext)\n function dotAtomText() {\n var s, maybeText;\n s = wrap('dot-atom-text', star(atext, 1)());\n if (s === null) { return s; }\n maybeText = star(and(literal('.'), star(atext, 1)))();\n if (maybeText !== null) {\n add(s, maybeText);\n }\n return s;\n }\n\n // dot-atom = [CFWS] dot-atom-text [CFWS]\n function dotAtom() {\n return wrap('dot-atom', and(invis(opt(cfws)), dotAtomText, invis(opt(cfws)))());\n }\n\n // 3.2.4. Quoted Strings\n\n // qtext = %d33 / ; Printable US-ASCII\n // %d35-91 / ; characters not including\n // %d93-126 / ; \"\\\" or the quote character\n // obs-qtext\n function qtext() {\n return wrap('qtext', or(\n function qtextFunc1() {\n return compareToken(function qtextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 === code) ||\n (35 <= code && code <= 91) ||\n (93 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsQtext\n )());\n }\n\n // qcontent = qtext / quoted-pair\n function qcontent() {\n return wrap('qcontent', or(qtext, quotedPair)());\n }\n\n // quoted-string = [CFWS]\n // DQUOTE *([FWS] qcontent) [FWS] DQUOTE\n // [CFWS]\n function quotedString() {\n return wrap('quoted-string', and(\n invis(opt(cfws)),\n invis(dquote), star(and(opt(colwsp(fws)), qcontent)), opt(invis(fws)), invis(dquote),\n invis(opt(cfws))\n )());\n }\n\n // 3.2.5 Miscellaneous Tokens\n\n // word = atom / quoted-string\n function word() {\n return wrap('word', or(atom, quotedString)());\n }\n\n // phrase = 1*word / obs-phrase\n function phrase() {\n return wrap('phrase', or(obsPhrase, star(word, 1))());\n }\n\n // 3.4. Address Specification\n // address = mailbox / group\n function address() {\n return wrap('address', or(mailbox, group)());\n }\n\n // mailbox = name-addr / addr-spec\n function mailbox() {\n return wrap('mailbox', or(nameAddr, addrSpec)());\n }\n\n // name-addr = [display-name] angle-addr\n function nameAddr() {\n return wrap('name-addr', and(opt(displayName), angleAddr)());\n }\n\n // angle-addr = [CFWS] \"<\" addr-spec \">\" [CFWS] /\n // obs-angle-addr\n function angleAddr() {\n return wrap('angle-addr', or(\n and(\n invis(opt(cfws)),\n literal('<'),\n addrSpec,\n literal('>'),\n invis(opt(cfws))\n ),\n obsAngleAddr\n )());\n }\n\n // group = display-name \":\" [group-list] \";\" [CFWS]\n function group() {\n return wrap('group', and(\n displayName,\n literal(':'),\n opt(groupList),\n literal(';'),\n invis(opt(cfws))\n )());\n }\n\n // display-name = phrase\n function displayName() {\n return wrap('display-name', function phraseFixedSemantic() {\n var result = phrase();\n if (result !== null) {\n result.semantic = collapseWhitespace(result.semantic);\n }\n return result;\n }());\n }\n\n // mailbox-list = (mailbox *(\",\" mailbox)) / obs-mbox-list\n function mailboxList() {\n return wrap('mailbox-list', or(\n and(\n mailbox,\n star(and(literal(','), mailbox))\n ),\n obsMboxList\n )());\n }\n\n // address-list = (address *(\",\" address)) / obs-addr-list\n function addressList() {\n return wrap('address-list', or(\n and(\n address,\n star(and(literal(','), address))\n ),\n obsAddrList\n )());\n }\n\n // group-list = mailbox-list / CFWS / obs-group-list\n function groupList() {\n return wrap('group-list', or(\n mailboxList,\n invis(cfws),\n obsGroupList\n )());\n }\n\n // 3.4.1 Addr-Spec Specification\n\n // local-part = dot-atom / quoted-string / obs-local-part\n function localPart() {\n // note: quoted-string, dotAtom are proper subsets of obs-local-part\n // so we really just have to look for obsLocalPart, if we don't care about the exact parse tree\n return wrap('local-part', or(obsLocalPart, dotAtom, quotedString)());\n }\n\n // dtext = %d33-90 / ; Printable US-ASCII\n // %d94-126 / ; characters not including\n // obs-dtext ; \"[\", \"]\", or \"\\\"\n function dtext() {\n return wrap('dtext', or(\n function dtextFunc1() {\n return compareToken(function dtextFunc2(tok) {\n var code = tok.charCodeAt(0);\n var accept =\n (33 <= code && code <= 90) ||\n (94 <= code && code <= 126);\n if (opts.rfc6532) {\n accept = accept || isUTF8NonAscii(tok);\n }\n return accept;\n });\n },\n obsDtext\n )()\n );\n }\n\n // domain-literal = [CFWS] \"[\" *([FWS] dtext) [FWS] \"]\" [CFWS]\n function domainLiteral() {\n return wrap('domain-literal', and(\n invis(opt(cfws)),\n literal('['),\n star(and(opt(fws), dtext)),\n opt(fws),\n literal(']'),\n invis(opt(cfws))\n )());\n }\n\n // domain = dot-atom / domain-literal / obs-domain\n function domain() {\n return wrap('domain', function domainCheckTLD() {\n var result = or(obsDomain, dotAtom, domainLiteral)();\n if (opts.rejectTLD) {\n if (result && result.semantic && result.semantic.indexOf('.') < 0) {\n return null;\n }\n }\n // strip all whitespace from domains\n if (result) {\n result.semantic = result.semantic.replace(/\\s+/g, '');\n }\n return result;\n }());\n }\n\n // addr-spec = local-part \"@\" domain\n function addrSpec() {\n return wrap('addr-spec', and(\n localPart, literal('@'), domain\n )());\n }\n\n // 3.6.2 Originator Fields\n // Below we only parse the field body, not the name of the field\n // like \"From:\", \"Sender:\", or \"Reply-To:\". Other libraries that\n // parse email headers can parse those and defer to these productions\n // for the \"RFC 5322\" part.\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // from = \"From:\" (mailbox-list / address-list) CRLF\n function fromSpec() {\n return wrap('from', or(\n mailboxList,\n addressList\n )());\n }\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // sender = \"Sender:\" (mailbox / address) CRLF\n function senderSpec() {\n return wrap('sender', or(\n mailbox,\n address\n )());\n }\n\n // RFC 6854 2.1. Replacement of RFC 5322, Section 3.6.2. Originator Fields\n // reply-to = \"Reply-To:\" address-list CRLF\n function replyToSpec() {\n return wrap('reply-to', addressList());\n }\n\n // 4.1. Miscellaneous Obsolete Tokens\n\n // obs-NO-WS-CTL = %d1-8 / ; US-ASCII control\n // %d11 / ; characters that do not\n // %d12 / ; include the carriage\n // %d14-31 / ; return, line feed, and\n // %d127 ; white space characters\n function obsNoWsCtl() {\n return opts.strict ? null : wrap('obs-NO-WS-CTL', compareToken(function (tok) {\n var code = tok.charCodeAt(0);\n return ((1 <= code && code <= 8) ||\n (11 === code || 12 === code) ||\n (14 <= code && code <= 31) ||\n (127 === code));\n }));\n }\n\n // obs-ctext = obs-NO-WS-CTL\n function obsCtext() { return opts.strict ? null : wrap('obs-ctext', obsNoWsCtl()); }\n\n // obs-qtext = obs-NO-WS-CTL\n function obsQtext() { return opts.strict ? null : wrap('obs-qtext', obsNoWsCtl()); }\n\n // obs-qp = \"\\\" (%d0 / obs-NO-WS-CTL / LF / CR)\n function obsQP() {\n return opts.strict ? null : wrap('obs-qp', and(\n literal('\\\\'),\n or(literal('\\0'), obsNoWsCtl, lf, cr)\n )());\n }\n\n // obs-phrase = word *(word / \".\" / CFWS)\n function obsPhrase() {\n if (opts.strict ) return null;\n return opts.atInDisplayName ? wrap('obs-phrase', and(\n word,\n star(or(word, literal('.'), literal('@'), colwsp(cfws)))\n )()) :\n wrap('obs-phrase', and(\n word,\n star(or(word, literal('.'), colwsp(cfws)))\n )());\n }\n\n // 4.2. Obsolete Folding White Space\n\n // NOTE: read the errata http://www.rfc-editor.org/errata_search.php?rfc=5322&eid=1908\n // obs-FWS = 1*([CRLF] WSP)\n function obsFws() {\n return opts.strict ? null : wrap('obs-FWS', star(\n and(invis(opt(crlf)), wsp),\n 1\n )());\n }\n\n // 4.4. Obsolete Addressing\n\n // obs-angle-addr = [CFWS] \"<\" obs-route addr-spec \">\" [CFWS]\n function obsAngleAddr() {\n return opts.strict ? null : wrap('obs-angle-addr', and(\n invis(opt(cfws)),\n literal('<'),\n obsRoute,\n addrSpec,\n literal('>'),\n invis(opt(cfws))\n )());\n }\n\n // obs-route = obs-domain-list \":\"\n function obsRoute() {\n return opts.strict ? null : wrap('obs-route', and(\n obsDomainList,\n literal(':')\n )());\n }\n\n // obs-domain-list = *(CFWS / \",\") \"@\" domain\n // *(\",\" [CFWS] [\"@\" domain])\n function obsDomainList() {\n return opts.strict ? null : wrap('obs-domain-list', and(\n star(or(invis(cfws), literal(','))),\n literal('@'),\n domain,\n star(and(\n literal(','),\n invis(opt(cfws)),\n opt(and(literal('@'), domain))\n ))\n )());\n }\n\n // obs-mbox-list = *([CFWS] \",\") mailbox *(\",\" [mailbox / CFWS])\n function obsMboxList() {\n return opts.strict ? null : wrap('obs-mbox-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n )),\n mailbox,\n star(and(\n literal(','),\n opt(and(\n mailbox,\n invis(cfws)\n ))\n ))\n )());\n }\n\n // obs-addr-list = *([CFWS] \",\") address *(\",\" [address / CFWS])\n function obsAddrList() {\n return opts.strict ? null : wrap('obs-addr-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n )),\n address,\n star(and(\n literal(','),\n opt(and(\n address,\n invis(cfws)\n ))\n ))\n )());\n }\n\n // obs-group-list = 1*([CFWS] \",\") [CFWS]\n function obsGroupList() {\n return opts.strict ? null : wrap('obs-group-list', and(\n star(and(\n invis(opt(cfws)),\n literal(',')\n ), 1),\n invis(opt(cfws))\n )());\n }\n\n // obs-local-part = word *(\".\" word)\n function obsLocalPart() {\n return opts.strict ? null : wrap('obs-local-part', and(word, star(and(literal('.'), word)))());\n }\n\n // obs-domain = atom *(\".\" atom)\n function obsDomain() {\n return opts.strict ? null : wrap('obs-domain', and(atom, star(and(literal('.'), atom)))());\n }\n\n // obs-dtext = obs-NO-WS-CTL / quoted-pair\n function obsDtext() {\n return opts.strict ? null : wrap('obs-dtext', or(obsNoWsCtl, quotedPair)());\n }\n\n /////////////////////////////////////////////////////\n\n // ast analysis\n\n function findNode(name, root) {\n var i, stack, node;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name === name) {\n return node;\n }\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n return null;\n }\n\n function findAllNodes(name, root) {\n var i, stack, node, result;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n result = [];\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name === name) {\n result.push(node);\n }\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n return result;\n }\n\n function findAllNodesNoChildren(names, root) {\n var i, stack, node, result, namesLookup;\n if (root === null || root === undefined) { return null; }\n stack = [root];\n result = [];\n namesLookup = {};\n for (i = 0; i < names.length; i += 1) {\n namesLookup[names[i]] = true;\n }\n\n while (stack.length > 0) {\n node = stack.pop();\n if (node.name in namesLookup) {\n result.push(node);\n // don't look at children (hence findAllNodesNoChildren)\n } else {\n for (i = node.children.length - 1; i >= 0; i -= 1) {\n stack.push(node.children[i]);\n }\n }\n }\n return result;\n }\n\n function giveResult(ast) {\n var addresses, groupsAndMailboxes, i, groupOrMailbox, result;\n if (ast === null) {\n return null;\n }\n addresses = [];\n\n // An address is a 'group' (i.e. a list of mailboxes) or a 'mailbox'.\n groupsAndMailboxes = findAllNodesNoChildren(['group', 'mailbox'], ast);\n for (i = 0; i < groupsAndMailboxes.length; i += 1) {\n groupOrMailbox = groupsAndMailboxes[i];\n if (groupOrMailbox.name === 'group') {\n addresses.push(giveResultGroup(groupOrMailbox));\n } else if (groupOrMailbox.name === 'mailbox') {\n addresses.push(giveResultMailbox(groupOrMailbox));\n }\n }\n\n result = {\n ast: ast,\n addresses: addresses,\n };\n if (opts.simple) {\n result = simplifyResult(result);\n }\n if (opts.oneResult) {\n return oneResult(result);\n }\n if (opts.simple) {\n return result && result.addresses;\n } else {\n return result;\n }\n }\n\n function giveResultGroup(group) {\n var i;\n var groupName = findNode('display-name', group);\n var groupResultMailboxes = [];\n var mailboxes = findAllNodesNoChildren(['mailbox'], group);\n for (i = 0; i < mailboxes.length; i += 1) {\n groupResultMailboxes.push(giveResultMailbox(mailboxes[i]));\n }\n return {\n node: group,\n parts: {\n name: groupName,\n },\n type: group.name, // 'group'\n name: grabSemantic(groupName),\n addresses: groupResultMailboxes,\n };\n }\n\n function giveResultMailbox(mailbox) {\n var name = findNode('display-name', mailbox);\n var aspec = findNode('addr-spec', mailbox);\n var cfws = findAllNodes('cfws', mailbox);\n var comments = findAllNodesNoChildren(['comment'], mailbox);\n\n\n var local = findNode('local-part', aspec);\n var domain = findNode('domain', aspec);\n return {\n node: mailbox,\n parts: {\n name: name,\n address: aspec,\n local: local,\n domain: domain,\n comments: cfws\n },\n type: mailbox.name, // 'mailbox'\n name: grabSemantic(name),\n address: grabSemantic(aspec),\n local: grabSemantic(local),\n domain: grabSemantic(domain),\n comments: concatComments(comments),\n groupName: grabSemantic(mailbox.groupName),\n };\n }\n\n function grabSemantic(n) {\n return n !== null && n !== undefined ? n.semantic : null;\n }\n\n function simplifyResult(result) {\n var i;\n if (result && result.addresses) {\n for (i = 0; i < result.addresses.length; i += 1) {\n delete result.addresses[i].node;\n }\n }\n return result;\n }\n\n function concatComments(comments) {\n var result = '';\n if (comments) {\n for (var i = 0; i < comments.length; i += 1) {\n result += grabSemantic(comments[i]);\n }\n }\n return result;\n }\n\n function oneResult(result) {\n if (!result) { return null; }\n if (!opts.partial && result.addresses.length > 1) { return null; }\n return result.addresses && result.addresses[0];\n }\n\n /////////////////////////////////////////////////////\n\n var parseString, pos, len, parsed, startProduction;\n\n opts = handleOpts(opts, {});\n if (opts === null) { return null; }\n\n parseString = opts.input;\n\n startProduction = {\n 'address': address,\n 'address-list': addressList,\n 'angle-addr': angleAddr,\n 'from': fromSpec,\n 'group': group,\n 'mailbox': mailbox,\n 'mailbox-list': mailboxList,\n 'reply-to': replyToSpec,\n 'sender': senderSpec,\n }[opts.startAt] || addressList;\n\n if (!opts.strict) {\n initialize();\n opts.strict = true;\n parsed = startProduction(parseString);\n if (opts.partial || !inStr()) {\n return giveResult(parsed);\n }\n opts.strict = false;\n }\n\n initialize();\n parsed = startProduction(parseString);\n if (!opts.partial && inStr()) { return null; }\n return giveResult(parsed);\n}\n\nfunction parseOneAddressSimple(opts) {\n return parse5322(handleOpts(opts, {\n oneResult: true,\n rfc6532: true,\n simple: true,\n startAt: 'address-list',\n }));\n}\n\nfunction parseAddressListSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'address-list',\n }));\n}\n\nfunction parseFromSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'from',\n }));\n}\n\nfunction parseSenderSimple(opts) {\n return parse5322(handleOpts(opts, {\n oneResult: true,\n rfc6532: true,\n simple: true,\n startAt: 'sender',\n }));\n}\n\nfunction parseReplyToSimple(opts) {\n return parse5322(handleOpts(opts, {\n rfc6532: true,\n simple: true,\n startAt: 'reply-to',\n }));\n}\n\nfunction handleOpts(opts, defs) {\n function isString(str) {\n return Object.prototype.toString.call(str) === '[object String]';\n }\n\n function isObject(o) {\n return o === Object(o);\n }\n\n function isNullUndef(o) {\n return o === null || o === undefined;\n }\n\n var defaults, o;\n\n if (isString(opts)) {\n opts = { input: opts };\n } else if (!isObject(opts)) {\n return null;\n }\n\n if (!isString(opts.input)) { return null; }\n if (!defs) { return null; }\n\n defaults = {\n oneResult: false,\n partial: false,\n rejectTLD: false,\n rfc6532: false,\n simple: false,\n startAt: 'address-list',\n strict: false,\n atInDisplayName: false\n };\n\n for (o in defaults) {\n if (isNullUndef(opts[o])) {\n opts[o] = !isNullUndef(defs[o]) ? defs[o] : defaults[o];\n }\n }\n return opts;\n}\n\nparse5322.parseOneAddress = parseOneAddressSimple;\nparse5322.parseAddressList = parseAddressListSimple;\nparse5322.parseFrom = parseFromSimple;\nparse5322.parseSender = parseSenderSimple;\nparse5322.parseReplyTo = parseReplyToSimple;\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = parse5322;\n} else {\n global.emailAddresses = parse5322;\n}\n\n}(this));\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport emailAddresses from 'email-addresses';\n\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\n\n/**\n * Implementation of the User ID Packet (Tag 13)\n *\n * A User ID packet consists of UTF-8 text that is intended to represent\n * the name and email address of the key holder. By convention, it\n * includes an RFC 2822 [RFC2822] mail name-addr, but there are no\n * restrictions on its content. The packet length in the header\n * specifies the length of the User ID.\n */\nclass UserIDPacket {\n static get tag() {\n return enums.packet.userID;\n }\n\n constructor() {\n /** A string containing the user id. Usually in the form\n * John Doe \n * @type {String}\n */\n this.userID = '';\n\n this.name = '';\n this.email = '';\n this.comment = '';\n }\n\n /**\n * Create UserIDPacket instance from object\n * @param {Object} userID - Object specifying userID name, email and comment\n * @returns {UserIDPacket}\n * @static\n */\n static fromObject(userID) {\n if (util.isString(userID) ||\n (userID.name && !util.isString(userID.name)) ||\n (userID.email && !util.isEmailAddress(userID.email)) ||\n (userID.comment && !util.isString(userID.comment))) {\n throw new Error('Invalid user ID format');\n }\n const packet = new UserIDPacket();\n Object.assign(packet, userID);\n const components = [];\n if (packet.name) components.push(packet.name);\n if (packet.comment) components.push(`(${packet.comment})`);\n if (packet.email) components.push(`<${packet.email}>`);\n packet.userID = components.join(' ');\n return packet;\n }\n\n /**\n * Parsing function for a user id packet (tag 13).\n * @param {Uint8Array} input - Payload of a tag 13 packet\n */\n read(bytes, config = defaultConfig) {\n const userID = util.decodeUTF8(bytes);\n if (userID.length > config.maxUserIDLength) {\n throw new Error('User ID string is too long');\n }\n try {\n const { name, address: email, comments } = emailAddresses.parseOneAddress({ input: userID, atInDisplayName: true });\n this.comment = comments.replace(/^\\(|\\)$/g, '');\n this.name = name;\n this.email = email;\n } catch (e) {}\n this.userID = userID;\n }\n\n /**\n * Creates a binary representation of the user id packet\n * @returns {Uint8Array} Binary representation.\n */\n write() {\n return util.encodeUTF8(this.userID);\n }\n\n equals(otherUserID) {\n return otherUserID && otherUserID.userID === this.userID;\n }\n}\n\nexport default UserIDPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport SecretKeyPacket from './secret_key';\nimport enums from '../enums';\nimport defaultConfig from '../config';\n\n/**\n * A Secret-Subkey packet (tag 7) is the subkey analog of the Secret\n * Key packet and has exactly the same format.\n * @extends SecretKeyPacket\n */\nclass SecretSubkeyPacket extends SecretKeyPacket {\n static get tag() {\n return enums.packet.secretSubkey;\n }\n\n /**\n * @param {Date} [date] - Creation date\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n constructor(date = new Date(), config = defaultConfig) {\n super(date, config);\n }\n}\n\nexport default SecretSubkeyPacket;\n","import enums from '../enums';\nimport { UnsupportedError } from './packet';\n\n/**\n * Implementation of the Trust Packet (Tag 12)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.10|RFC4880 5.10}:\n * The Trust packet is used only within keyrings and is not normally\n * exported. Trust packets contain data that record the user's\n * specifications of which key holders are trustworthy introducers,\n * along with other information that implementing software uses for\n * trust information. The format of Trust packets is defined by a given\n * implementation.\n *\n * Trust packets SHOULD NOT be emitted to output streams that are\n * transferred to other users, and they SHOULD be ignored on any input\n * other than local keyring files.\n */\nclass TrustPacket {\n static get tag() {\n return enums.packet.trust;\n }\n\n /**\n * Parsing function for a trust packet (tag 12).\n * Currently not implemented as we ignore trust packets\n */\n read() {\n throw new UnsupportedError('Trust packets are not supported');\n }\n\n write() {\n throw new UnsupportedError('Trust packets are not supported');\n }\n}\n\nexport default TrustPacket;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { armor, unarmor } from './encoding/armor';\nimport { PacketList, SignaturePacket } from './packet';\nimport enums from './enums';\nimport util from './util';\nimport defaultConfig from './config';\n\n// A Signature can contain the following packets\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\n\n/**\n * Class that represents an OpenPGP signature.\n */\nexport class Signature {\n /**\n * @param {PacketList} packetlist - The signature packets\n */\n constructor(packetlist) {\n this.packets = packetlist || new PacketList();\n }\n\n /**\n * Returns binary encoded signature\n * @returns {ReadableStream} Binary signature.\n */\n write() {\n return this.packets.write();\n }\n\n /**\n * Returns ASCII armored text of signature\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {ReadableStream} ASCII armor.\n */\n armor(config = defaultConfig) {\n return armor(enums.armor.signature, this.write(), undefined, undefined, undefined, config);\n }\n\n /**\n * Returns an array of KeyIDs of all of the issuers who created this signature\n * @returns {Array} The Key IDs of the signing keys\n */\n getSigningKeyIDs() {\n return this.packets.map(packet => packet.issuerKeyID);\n }\n}\n\n/**\n * reads an (optionally armored) OpenPGP signature and returns a signature object\n * @param {Object} options\n * @param {String} [options.armoredSignature] - Armored signature to be parsed\n * @param {Uint8Array} [options.binarySignature] - Binary signature to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} New signature object.\n * @async\n * @static\n */\nexport async function readSignature({ armoredSignature, binarySignature, config, ...rest }) {\n config = { ...defaultConfig, ...config };\n let input = armoredSignature || binarySignature;\n if (!input) {\n throw new Error('readSignature: must pass options object containing `armoredSignature` or `binarySignature`');\n }\n if (armoredSignature && !util.isString(armoredSignature)) {\n throw new Error('readSignature: options.armoredSignature must be a string');\n }\n if (binarySignature && !util.isUint8Array(binarySignature)) {\n throw new Error('readSignature: options.binarySignature must be a Uint8Array');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (armoredSignature) {\n const { type, data } = await unarmor(input, config);\n if (type !== enums.armor.signature) {\n throw new Error('Armored text not of type signature');\n }\n input = data;\n }\n const packetlist = await PacketList.fromBinary(input, allowedPackets, config);\n return new Signature(packetlist);\n}\n","/**\n * @fileoverview Provides helpers methods for key module\n * @module key/helper\n * @private\n */\n\nimport {\n SecretKeyPacket,\n SecretSubkeyPacket,\n SignaturePacket\n} from '../packet';\nimport enums from '../enums';\nimport crypto from '../crypto';\nimport util from '../util';\nimport defaultConfig from '../config';\n\nexport async function generateSecretSubkey(options, config) {\n const secretSubkeyPacket = new SecretSubkeyPacket(options.date, config);\n secretSubkeyPacket.packets = null;\n secretSubkeyPacket.algorithm = enums.write(enums.publicKey, options.algorithm);\n await secretSubkeyPacket.generate(options.rsaBits, options.curve);\n await secretSubkeyPacket.computeFingerprintAndKeyID();\n return secretSubkeyPacket;\n}\n\nexport async function generateSecretKey(options, config) {\n const secretKeyPacket = new SecretKeyPacket(options.date, config);\n secretKeyPacket.packets = null;\n secretKeyPacket.algorithm = enums.write(enums.publicKey, options.algorithm);\n await secretKeyPacket.generate(options.rsaBits, options.curve, options.config);\n await secretKeyPacket.computeFingerprintAndKeyID();\n return secretKeyPacket;\n}\n\n/**\n * Returns the valid and non-expired signature that has the latest creation date, while ignoring signatures created in the future.\n * @param {Array} signatures - List of signatures\n * @param {PublicKeyPacket|PublicSubkeyPacket} publicKey - Public key packet to verify the signature\n * @param {Date} date - Use the given date instead of the current time\n * @param {Object} config - full configuration\n * @returns {Promise} The latest valid signature.\n * @async\n */\nexport async function getLatestValidSignature(signatures, publicKey, signatureType, dataToVerify, date = new Date(), config) {\n let latestValid;\n let exception;\n for (let i = signatures.length - 1; i >= 0; i--) {\n try {\n if (\n (!latestValid || signatures[i].created >= latestValid.created)\n ) {\n await signatures[i].verify(publicKey, signatureType, dataToVerify, date, undefined, config);\n latestValid = signatures[i];\n }\n } catch (e) {\n exception = e;\n }\n }\n if (!latestValid) {\n throw util.wrapError(\n `Could not find valid ${enums.read(enums.signature, signatureType)} signature in key ${publicKey.getKeyID().toHex()}`\n .replace('certGeneric ', 'self-')\n .replace(/([a-z])([A-Z])/g, (_, $1, $2) => $1 + ' ' + $2.toLowerCase()),\n exception);\n }\n return latestValid;\n}\n\nexport function isDataExpired(keyPacket, signature, date = new Date()) {\n const normDate = util.normalizeDate(date);\n if (normDate !== null) {\n const expirationTime = getKeyExpirationTime(keyPacket, signature);\n return !(keyPacket.created <= normDate && normDate < expirationTime);\n }\n return false;\n}\n\n/**\n * Create Binding signature to the key according to the {@link https://tools.ietf.org/html/rfc4880#section-5.2.1}\n * @param {SecretSubkeyPacket} subkey - Subkey key packet\n * @param {SecretKeyPacket} primaryKey - Primary key packet\n * @param {Object} options\n * @param {Object} config - Full configuration\n */\nexport async function createBindingSignature(subkey, primaryKey, options, config) {\n const dataToSign = {};\n dataToSign.key = primaryKey;\n dataToSign.bind = subkey;\n const signatureProperties = { signatureType: enums.signature.subkeyBinding };\n if (options.sign) {\n signatureProperties.keyFlags = [enums.keyFlags.signData];\n signatureProperties.embeddedSignature = await createSignaturePacket(dataToSign, null, subkey, {\n signatureType: enums.signature.keyBinding\n }, options.date, undefined, undefined, undefined, config);\n } else {\n signatureProperties.keyFlags = [enums.keyFlags.encryptCommunication | enums.keyFlags.encryptStorage];\n }\n if (options.keyExpirationTime > 0) {\n signatureProperties.keyExpirationTime = options.keyExpirationTime;\n signatureProperties.keyNeverExpires = false;\n }\n const subkeySignaturePacket = await createSignaturePacket(dataToSign, null, primaryKey, signatureProperties, options.date, undefined, undefined, undefined, config);\n return subkeySignaturePacket;\n}\n\n/**\n * Returns the preferred signature hash algorithm of a key\n * @param {Key} [key] - The key to get preferences from\n * @param {SecretKeyPacket|SecretSubkeyPacket} keyPacket - key packet used for signing\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [userID] - User ID\n * @param {Object} config - full configuration\n * @returns {Promise}\n * @async\n */\nexport async function getPreferredHashAlgo(key, keyPacket, date = new Date(), userID = {}, config) {\n let hashAlgo = config.preferredHashAlgorithm;\n let prefAlgo = hashAlgo;\n if (key) {\n const primaryUser = await key.getPrimaryUser(date, userID, config);\n if (primaryUser.selfCertification.preferredHashAlgorithms) {\n [prefAlgo] = primaryUser.selfCertification.preferredHashAlgorithms;\n hashAlgo = crypto.hash.getHashByteLength(hashAlgo) <= crypto.hash.getHashByteLength(prefAlgo) ?\n prefAlgo : hashAlgo;\n }\n }\n switch (keyPacket.algorithm) {\n case enums.publicKey.ecdsa:\n case enums.publicKey.eddsaLegacy:\n case enums.publicKey.ed25519:\n prefAlgo = crypto.getPreferredCurveHashAlgo(keyPacket.algorithm, keyPacket.publicParams.oid);\n }\n return crypto.hash.getHashByteLength(hashAlgo) <= crypto.hash.getHashByteLength(prefAlgo) ?\n prefAlgo : hashAlgo;\n}\n\n/**\n * Returns the preferred symmetric/aead/compression algorithm for a set of keys\n * @param {'symmetric'|'aead'|'compression'} type - Type of preference to return\n * @param {Array} [keys] - Set of keys\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Array} [userIDs] - User IDs\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} Preferred algorithm\n * @async\n */\nexport async function getPreferredAlgo(type, keys = [], date = new Date(), userIDs = [], config = defaultConfig) {\n const defaultAlgo = { // these are all must-implement in rfc4880bis\n 'symmetric': enums.symmetric.aes128,\n 'aead': enums.aead.eax,\n 'compression': enums.compression.uncompressed\n }[type];\n const preferredSenderAlgo = {\n 'symmetric': config.preferredSymmetricAlgorithm,\n 'aead': config.preferredAEADAlgorithm,\n 'compression': config.preferredCompressionAlgorithm\n }[type];\n const prefPropertyName = {\n 'symmetric': 'preferredSymmetricAlgorithms',\n 'aead': 'preferredAEADAlgorithms',\n 'compression': 'preferredCompressionAlgorithms'\n }[type];\n\n // if preferredSenderAlgo appears in the prefs of all recipients, we pick it\n // otherwise we use the default algo\n // if no keys are available, preferredSenderAlgo is returned\n const senderAlgoSupport = await Promise.all(keys.map(async function(key, i) {\n const primaryUser = await key.getPrimaryUser(date, userIDs[i], config);\n const recipientPrefs = primaryUser.selfCertification[prefPropertyName];\n return !!recipientPrefs && recipientPrefs.indexOf(preferredSenderAlgo) >= 0;\n }));\n return senderAlgoSupport.every(Boolean) ? preferredSenderAlgo : defaultAlgo;\n}\n\n/**\n * Create signature packet\n * @param {Object} dataToSign - Contains packets to be signed\n * @param {PrivateKey} privateKey - key to get preferences from\n * @param {SecretKeyPacket|\n * SecretSubkeyPacket} signingKeyPacket secret key packet for signing\n * @param {Object} [signatureProperties] - Properties to write on the signature packet before signing\n * @param {Date} [date] - Override the creationtime of the signature\n * @param {Object} [userID] - User ID\n * @param {Array} [notations] - Notation Data to add to the signature, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n * @param {Object} [detached] - Whether to create a detached signature packet\n * @param {Object} config - full configuration\n * @returns {Promise} Signature packet.\n */\nexport async function createSignaturePacket(dataToSign, privateKey, signingKeyPacket, signatureProperties, date, userID, notations = [], detached = false, config) {\n if (signingKeyPacket.isDummy()) {\n throw new Error('Cannot sign with a gnu-dummy key.');\n }\n if (!signingKeyPacket.isDecrypted()) {\n throw new Error('Signing key is not decrypted.');\n }\n const signaturePacket = new SignaturePacket();\n Object.assign(signaturePacket, signatureProperties);\n signaturePacket.publicKeyAlgorithm = signingKeyPacket.algorithm;\n signaturePacket.hashAlgorithm = await getPreferredHashAlgo(privateKey, signingKeyPacket, date, userID, config);\n signaturePacket.rawNotations = notations;\n await signaturePacket.sign(signingKeyPacket, dataToSign, date, detached);\n return signaturePacket;\n}\n\n/**\n * Merges signatures from source[attr] to dest[attr]\n * @param {Object} source\n * @param {Object} dest\n * @param {String} attr\n * @param {Date} [date] - date to use for signature expiration check, instead of the current time\n * @param {Function} [checkFn] - signature only merged if true\n */\nexport async function mergeSignatures(source, dest, attr, date = new Date(), checkFn) {\n source = source[attr];\n if (source) {\n if (!dest[attr].length) {\n dest[attr] = source;\n } else {\n await Promise.all(source.map(async function(sourceSig) {\n if (!sourceSig.isExpired(date) && (!checkFn || await checkFn(sourceSig)) &&\n !dest[attr].some(function(destSig) {\n return util.equalsUint8Array(destSig.writeParams(), sourceSig.writeParams());\n })) {\n dest[attr].push(sourceSig);\n }\n }));\n }\n }\n}\n\n/**\n * Checks if a given certificate or binding signature is revoked\n * @param {SecretKeyPacket|\n * PublicKeyPacket} primaryKey The primary key packet\n * @param {Object} dataToVerify - The data to check\n * @param {Array} revocations - The revocation signatures to check\n * @param {SignaturePacket} signature - The certificate or signature to check\n * @param {PublicSubkeyPacket|\n * SecretSubkeyPacket|\n * PublicKeyPacket|\n * SecretKeyPacket} key, optional The key packet to verify the signature, instead of the primary key\n * @param {Date} date - Use the given date instead of the current time\n * @param {Object} config - Full configuration\n * @returns {Promise} True if the signature revokes the data.\n * @async\n */\nexport async function isDataRevoked(primaryKey, signatureType, dataToVerify, revocations, signature, key, date = new Date(), config) {\n key = key || primaryKey;\n const revocationKeyIDs = [];\n await Promise.all(revocations.map(async function(revocationSignature) {\n try {\n if (\n // Note: a third-party revocation signature could legitimately revoke a\n // self-signature if the signature has an authorized revocation key.\n // However, we don't support passing authorized revocation keys, nor\n // verifying such revocation signatures. Instead, we indicate an error\n // when parsing a key with an authorized revocation key, and ignore\n // third-party revocation signatures here. (It could also be revoking a\n // third-party key certification, which should only affect\n // `verifyAllCertifications`.)\n !signature || revocationSignature.issuerKeyID.equals(signature.issuerKeyID)\n ) {\n await revocationSignature.verify(\n key, signatureType, dataToVerify, config.revocationsExpire ? date : null, false, config\n );\n\n // TODO get an identifier of the revoked object instead\n revocationKeyIDs.push(revocationSignature.issuerKeyID);\n }\n } catch (e) {}\n }));\n // TODO further verify that this is the signature that should be revoked\n if (signature) {\n signature.revoked = revocationKeyIDs.some(keyID => keyID.equals(signature.issuerKeyID)) ? true :\n signature.revoked || false;\n return signature.revoked;\n }\n return revocationKeyIDs.length > 0;\n}\n\n/**\n * Returns key expiration time based on the given certification signature.\n * The expiration time of the signature is ignored.\n * @param {PublicSubkeyPacket|PublicKeyPacket} keyPacket - key to check\n * @param {SignaturePacket} signature - signature to process\n * @returns {Date|Infinity} expiration time or infinity if the key does not expire\n */\nexport function getKeyExpirationTime(keyPacket, signature) {\n let expirationTime;\n // check V4 expiration time\n if (signature.keyNeverExpires === false) {\n expirationTime = keyPacket.created.getTime() + signature.keyExpirationTime * 1000;\n }\n return expirationTime ? new Date(expirationTime) : Infinity;\n}\n\n/**\n * Returns whether aead is supported by all keys in the set\n * @param {Array} keys - Set of keys\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Array} [userIDs] - User IDs\n * @param {Object} config - full configuration\n * @returns {Promise}\n * @async\n */\nexport async function isAEADSupported(keys, date = new Date(), userIDs = [], config = defaultConfig) {\n let supported = true;\n // TODO replace when Promise.some or Promise.any are implemented\n await Promise.all(keys.map(async function(key, i) {\n const primaryUser = await key.getPrimaryUser(date, userIDs[i], config);\n if (!primaryUser.selfCertification.features ||\n !(primaryUser.selfCertification.features[0] & enums.features.aead)) {\n supported = false;\n }\n }));\n return supported;\n}\n\nexport function sanitizeKeyOptions(options, subkeyDefaults = {}) {\n options.type = options.type || subkeyDefaults.type;\n options.curve = options.curve || subkeyDefaults.curve;\n options.rsaBits = options.rsaBits || subkeyDefaults.rsaBits;\n options.keyExpirationTime = options.keyExpirationTime !== undefined ? options.keyExpirationTime : subkeyDefaults.keyExpirationTime;\n options.passphrase = util.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n options.date = options.date || subkeyDefaults.date;\n\n options.sign = options.sign || false;\n\n switch (options.type) {\n case 'ecc':\n try {\n options.curve = enums.write(enums.curve, options.curve);\n } catch (e) {\n throw new Error('Unknown curve');\n }\n if (options.curve === enums.curve.ed25519Legacy || options.curve === enums.curve.curve25519Legacy) {\n options.curve = options.sign ? enums.curve.ed25519Legacy : enums.curve.curve25519Legacy;\n }\n if (options.sign) {\n options.algorithm = options.curve === enums.curve.ed25519Legacy ? enums.publicKey.eddsaLegacy : enums.publicKey.ecdsa;\n } else {\n options.algorithm = enums.publicKey.ecdh;\n }\n break;\n case 'rsa':\n options.algorithm = enums.publicKey.rsaEncryptSign;\n break;\n default:\n throw new Error(`Unsupported key type ${options.type}`);\n }\n return options;\n}\n\nexport function isValidSigningKeyPacket(keyPacket, signature) {\n const keyAlgo = keyPacket.algorithm;\n return keyAlgo !== enums.publicKey.rsaEncrypt &&\n keyAlgo !== enums.publicKey.elgamal &&\n keyAlgo !== enums.publicKey.ecdh &&\n keyAlgo !== enums.publicKey.x25519 &&\n (!signature.keyFlags ||\n (signature.keyFlags[0] & enums.keyFlags.signData) !== 0);\n}\n\nexport function isValidEncryptionKeyPacket(keyPacket, signature) {\n const keyAlgo = keyPacket.algorithm;\n return keyAlgo !== enums.publicKey.dsa &&\n keyAlgo !== enums.publicKey.rsaSign &&\n keyAlgo !== enums.publicKey.ecdsa &&\n keyAlgo !== enums.publicKey.eddsaLegacy &&\n keyAlgo !== enums.publicKey.ed25519 &&\n (!signature.keyFlags ||\n (signature.keyFlags[0] & enums.keyFlags.encryptCommunication) !== 0 ||\n (signature.keyFlags[0] & enums.keyFlags.encryptStorage) !== 0);\n}\n\nexport function isValidDecryptionKeyPacket(signature, config) {\n if (config.allowInsecureDecryptionWithSigningKeys) {\n // This is only relevant for RSA keys, all other signing algorithms cannot decrypt\n return true;\n }\n\n return !signature.keyFlags ||\n (signature.keyFlags[0] & enums.keyFlags.encryptCommunication) !== 0 ||\n (signature.keyFlags[0] & enums.keyFlags.encryptStorage) !== 0;\n}\n\n/**\n * Check key against blacklisted algorithms and minimum strength requirements.\n * @param {SecretKeyPacket|PublicKeyPacket|\n * SecretSubkeyPacket|PublicSubkeyPacket} keyPacket\n * @param {Config} config\n * @throws {Error} if the key packet does not meet the requirements\n */\nexport function checkKeyRequirements(keyPacket, config) {\n const keyAlgo = enums.write(enums.publicKey, keyPacket.algorithm);\n const algoInfo = keyPacket.getAlgorithmInfo();\n if (config.rejectPublicKeyAlgorithms.has(keyAlgo)) {\n throw new Error(`${algoInfo.algorithm} keys are considered too weak.`);\n }\n switch (keyAlgo) {\n case enums.publicKey.rsaEncryptSign:\n case enums.publicKey.rsaSign:\n case enums.publicKey.rsaEncrypt:\n if (algoInfo.bits < config.minRSABits) {\n throw new Error(`RSA keys shorter than ${config.minRSABits} bits are considered too weak.`);\n }\n break;\n case enums.publicKey.ecdsa:\n case enums.publicKey.eddsaLegacy:\n case enums.publicKey.ecdh:\n if (config.rejectCurves.has(algoInfo.curve)) {\n throw new Error(`Support for ${algoInfo.algorithm} keys using curve ${algoInfo.curve} is disabled.`);\n }\n break;\n default:\n break;\n }\n}\n","/**\n * @module key/User\n * @private\n */\n\nimport enums from '../enums';\nimport util from '../util';\nimport { PacketList } from '../packet';\nimport { mergeSignatures, isDataRevoked, createSignaturePacket } from './helper';\nimport defaultConfig from '../config';\n\n/**\n * Class that represents an user ID or attribute packet and the relevant signatures.\n * @param {UserIDPacket|UserAttributePacket} userPacket - packet containing the user info\n * @param {Key} mainKey - reference to main Key object containing the primary key and subkeys that the user is associated with\n */\nclass User {\n constructor(userPacket, mainKey) {\n this.userID = userPacket.constructor.tag === enums.packet.userID ? userPacket : null;\n this.userAttribute = userPacket.constructor.tag === enums.packet.userAttribute ? userPacket : null;\n this.selfCertifications = [];\n this.otherCertifications = [];\n this.revocationSignatures = [];\n this.mainKey = mainKey;\n }\n\n /**\n * Transforms structured user data to packetlist\n * @returns {PacketList}\n */\n toPacketList() {\n const packetlist = new PacketList();\n packetlist.push(this.userID || this.userAttribute);\n packetlist.push(...this.revocationSignatures);\n packetlist.push(...this.selfCertifications);\n packetlist.push(...this.otherCertifications);\n return packetlist;\n }\n\n /**\n * Shallow clone\n * @returns {User}\n */\n clone() {\n const user = new User(this.userID || this.userAttribute, this.mainKey);\n user.selfCertifications = [...this.selfCertifications];\n user.otherCertifications = [...this.otherCertifications];\n user.revocationSignatures = [...this.revocationSignatures];\n return user;\n }\n\n /**\n * Generate third-party certifications over this user and its primary key\n * @param {Array} signingKeys - Decrypted private keys for signing\n * @param {Date} [date] - Date to use as creation date of the certificate, instead of the current time\n * @param {Object} config - Full configuration\n * @returns {Promise} New user with new certifications.\n * @async\n */\n async certify(signingKeys, date, config) {\n const primaryKey = this.mainKey.keyPacket;\n const dataToSign = {\n userID: this.userID,\n userAttribute: this.userAttribute,\n key: primaryKey\n };\n const user = new User(dataToSign.userID || dataToSign.userAttribute, this.mainKey);\n user.otherCertifications = await Promise.all(signingKeys.map(async function(privateKey) {\n if (!privateKey.isPrivate()) {\n throw new Error('Need private key for signing');\n }\n if (privateKey.hasSameFingerprintAs(primaryKey)) {\n throw new Error(\"The user's own key can only be used for self-certifications\");\n }\n const signingKey = await privateKey.getSigningKey(undefined, date, undefined, config);\n return createSignaturePacket(dataToSign, privateKey, signingKey.keyPacket, {\n // Most OpenPGP implementations use generic certification (0x10)\n signatureType: enums.signature.certGeneric,\n keyFlags: [enums.keyFlags.certifyKeys | enums.keyFlags.signData]\n }, date, undefined, undefined, undefined, config);\n }));\n await user.update(this, date, config);\n return user;\n }\n\n /**\n * Checks if a given certificate of the user is revoked\n * @param {SignaturePacket} certificate - The certificate to verify\n * @param {PublicSubkeyPacket|\n * SecretSubkeyPacket|\n * PublicKeyPacket|\n * SecretKeyPacket} [keyPacket] The key packet to verify the signature, instead of the primary key\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} config - Full configuration\n * @returns {Promise} True if the certificate is revoked.\n * @async\n */\n async isRevoked(certificate, keyPacket, date = new Date(), config = defaultConfig) {\n const primaryKey = this.mainKey.keyPacket;\n return isDataRevoked(primaryKey, enums.signature.certRevocation, {\n key: primaryKey,\n userID: this.userID,\n userAttribute: this.userAttribute\n }, this.revocationSignatures, certificate, keyPacket, date, config);\n }\n\n /**\n * Verifies the user certificate.\n * @param {SignaturePacket} certificate - A certificate of this user\n * @param {Array} verificationKeys - Array of keys to verify certificate signatures\n * @param {Date} [date] - Use the given date instead of the current time\n * @param {Object} config - Full configuration\n * @returns {Promise} true if the certificate could be verified, or null if the verification keys do not correspond to the certificate\n * @throws if the user certificate is invalid.\n * @async\n */\n async verifyCertificate(certificate, verificationKeys, date = new Date(), config) {\n const that = this;\n const primaryKey = this.mainKey.keyPacket;\n const dataToVerify = {\n userID: this.userID,\n userAttribute: this.userAttribute,\n key: primaryKey\n };\n const { issuerKeyID } = certificate;\n const issuerKeys = verificationKeys.filter(key => key.getKeys(issuerKeyID).length > 0);\n if (issuerKeys.length === 0) {\n return null;\n }\n await Promise.all(issuerKeys.map(async key => {\n const signingKey = await key.getSigningKey(issuerKeyID, certificate.created, undefined, config);\n if (certificate.revoked || await that.isRevoked(certificate, signingKey.keyPacket, date, config)) {\n throw new Error('User certificate is revoked');\n }\n try {\n await certificate.verify(signingKey.keyPacket, enums.signature.certGeneric, dataToVerify, date, undefined, config);\n } catch (e) {\n throw util.wrapError('User certificate is invalid', e);\n }\n }));\n return true;\n }\n\n /**\n * Verifies all user certificates\n * @param {Array} verificationKeys - Array of keys to verify certificate signatures\n * @param {Date} [date] - Use the given date instead of the current time\n * @param {Object} config - Full configuration\n * @returns {Promise>} List of signer's keyID and validity of signature.\n * Signature validity is null if the verification keys do not correspond to the certificate.\n * @async\n */\n async verifyAllCertifications(verificationKeys, date = new Date(), config) {\n const that = this;\n const certifications = this.selfCertifications.concat(this.otherCertifications);\n return Promise.all(certifications.map(async certification => ({\n keyID: certification.issuerKeyID,\n valid: await that.verifyCertificate(certification, verificationKeys, date, config).catch(() => false)\n })));\n }\n\n /**\n * Verify User. Checks for existence of self signatures, revocation signatures\n * and validity of self signature.\n * @param {Date} date - Use the given date instead of the current time\n * @param {Object} config - Full configuration\n * @returns {Promise} Status of user.\n * @throws {Error} if there are no valid self signatures.\n * @async\n */\n async verify(date = new Date(), config) {\n if (!this.selfCertifications.length) {\n throw new Error('No self-certifications found');\n }\n const that = this;\n const primaryKey = this.mainKey.keyPacket;\n const dataToVerify = {\n userID: this.userID,\n userAttribute: this.userAttribute,\n key: primaryKey\n };\n // TODO replace when Promise.some or Promise.any are implemented\n let exception;\n for (let i = this.selfCertifications.length - 1; i >= 0; i--) {\n try {\n const selfCertification = this.selfCertifications[i];\n if (selfCertification.revoked || await that.isRevoked(selfCertification, undefined, date, config)) {\n throw new Error('Self-certification is revoked');\n }\n try {\n await selfCertification.verify(primaryKey, enums.signature.certGeneric, dataToVerify, date, undefined, config);\n } catch (e) {\n throw util.wrapError('Self-certification is invalid', e);\n }\n return true;\n } catch (e) {\n exception = e;\n }\n }\n throw exception;\n }\n\n /**\n * Update user with new components from specified user\n * @param {User} sourceUser - Source user to merge\n * @param {Date} date - Date to verify the validity of signatures\n * @param {Object} config - Full configuration\n * @returns {Promise}\n * @async\n */\n async update(sourceUser, date, config) {\n const primaryKey = this.mainKey.keyPacket;\n const dataToVerify = {\n userID: this.userID,\n userAttribute: this.userAttribute,\n key: primaryKey\n };\n // self signatures\n await mergeSignatures(sourceUser, this, 'selfCertifications', date, async function(srcSelfSig) {\n try {\n await srcSelfSig.verify(primaryKey, enums.signature.certGeneric, dataToVerify, date, false, config);\n return true;\n } catch (e) {\n return false;\n }\n });\n // other signatures\n await mergeSignatures(sourceUser, this, 'otherCertifications', date);\n // revocation signatures\n await mergeSignatures(sourceUser, this, 'revocationSignatures', date, function(srcRevSig) {\n return isDataRevoked(primaryKey, enums.signature.certRevocation, dataToVerify, [srcRevSig], undefined, undefined, date, config);\n });\n }\n\n /**\n * Revokes the user\n * @param {SecretKeyPacket} primaryKey - decrypted private primary key for revocation\n * @param {Object} reasonForRevocation - optional, object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n * @param {String} reasonForRevocation.string optional, string explaining the reason for revocation\n * @param {Date} date - optional, override the creationtime of the revocation signature\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New user with revocation signature.\n * @async\n */\n async revoke(\n primaryKey,\n {\n flag: reasonForRevocationFlag = enums.reasonForRevocation.noReason,\n string: reasonForRevocationString = ''\n } = {},\n date = new Date(),\n config = defaultConfig\n ) {\n const dataToSign = {\n userID: this.userID,\n userAttribute: this.userAttribute,\n key: primaryKey\n };\n const user = new User(dataToSign.userID || dataToSign.userAttribute, this.mainKey);\n user.revocationSignatures.push(await createSignaturePacket(dataToSign, null, primaryKey, {\n signatureType: enums.signature.certRevocation,\n reasonForRevocationFlag: enums.write(enums.reasonForRevocation, reasonForRevocationFlag),\n reasonForRevocationString\n }, date, undefined, undefined, false, config));\n await user.update(this);\n return user;\n }\n}\n\nexport default User;\n","/**\n * @module key/Subkey\n * @private\n */\n\nimport enums from '../enums';\nimport * as helper from './helper';\nimport { PacketList } from '../packet';\nimport defaultConfig from '../config';\n\n/**\n * Class that represents a subkey packet and the relevant signatures.\n * @borrows PublicSubkeyPacket#getKeyID as Subkey#getKeyID\n * @borrows PublicSubkeyPacket#getFingerprint as Subkey#getFingerprint\n * @borrows PublicSubkeyPacket#hasSameFingerprintAs as Subkey#hasSameFingerprintAs\n * @borrows PublicSubkeyPacket#getAlgorithmInfo as Subkey#getAlgorithmInfo\n * @borrows PublicSubkeyPacket#getCreationTime as Subkey#getCreationTime\n * @borrows PublicSubkeyPacket#isDecrypted as Subkey#isDecrypted\n */\nclass Subkey {\n /**\n * @param {SecretSubkeyPacket|PublicSubkeyPacket} subkeyPacket - subkey packet to hold in the Subkey\n * @param {Key} mainKey - reference to main Key object, containing the primary key packet corresponding to the subkey\n */\n constructor(subkeyPacket, mainKey) {\n this.keyPacket = subkeyPacket;\n this.bindingSignatures = [];\n this.revocationSignatures = [];\n this.mainKey = mainKey;\n }\n\n /**\n * Transforms structured subkey data to packetlist\n * @returns {PacketList}\n */\n toPacketList() {\n const packetlist = new PacketList();\n packetlist.push(this.keyPacket);\n packetlist.push(...this.revocationSignatures);\n packetlist.push(...this.bindingSignatures);\n return packetlist;\n }\n\n /**\n * Shallow clone\n * @return {Subkey}\n */\n clone() {\n const subkey = new Subkey(this.keyPacket, this.mainKey);\n subkey.bindingSignatures = [...this.bindingSignatures];\n subkey.revocationSignatures = [...this.revocationSignatures];\n return subkey;\n }\n\n /**\n * Checks if a binding signature of a subkey is revoked\n * @param {SignaturePacket} signature - The binding signature to verify\n * @param {PublicSubkeyPacket|\n * SecretSubkeyPacket|\n * PublicKeyPacket|\n * SecretKeyPacket} key, optional The key to verify the signature\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} True if the binding signature is revoked.\n * @async\n */\n async isRevoked(signature, key, date = new Date(), config = defaultConfig) {\n const primaryKey = this.mainKey.keyPacket;\n return helper.isDataRevoked(\n primaryKey, enums.signature.subkeyRevocation, {\n key: primaryKey,\n bind: this.keyPacket\n }, this.revocationSignatures, signature, key, date, config\n );\n }\n\n /**\n * Verify subkey. Checks for revocation signatures, expiration time\n * and valid binding signature.\n * @param {Date} date - Use the given date instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise}\n * @throws {Error} if the subkey is invalid.\n * @async\n */\n async verify(date = new Date(), config = defaultConfig) {\n const primaryKey = this.mainKey.keyPacket;\n const dataToVerify = { key: primaryKey, bind: this.keyPacket };\n // check subkey binding signatures\n const bindingSignature = await helper.getLatestValidSignature(this.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n // check binding signature is not revoked\n if (bindingSignature.revoked || await this.isRevoked(bindingSignature, null, date, config)) {\n throw new Error('Subkey is revoked');\n }\n // check for expiration time\n if (helper.isDataExpired(this.keyPacket, bindingSignature, date)) {\n throw new Error('Subkey is expired');\n }\n return bindingSignature;\n }\n\n /**\n * Returns the expiration time of the subkey or Infinity if key does not expire.\n * Returns null if the subkey is invalid.\n * @param {Date} date - Use the given date instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise}\n * @async\n */\n async getExpirationTime(date = new Date(), config = defaultConfig) {\n const primaryKey = this.mainKey.keyPacket;\n const dataToVerify = { key: primaryKey, bind: this.keyPacket };\n let bindingSignature;\n try {\n bindingSignature = await helper.getLatestValidSignature(this.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n } catch (e) {\n return null;\n }\n const keyExpiry = helper.getKeyExpirationTime(this.keyPacket, bindingSignature);\n const sigExpiry = bindingSignature.getExpirationTime();\n return keyExpiry < sigExpiry ? keyExpiry : sigExpiry;\n }\n\n /**\n * Update subkey with new components from specified subkey\n * @param {Subkey} subkey - Source subkey to merge\n * @param {Date} [date] - Date to verify validity of signatures\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if update failed\n * @async\n */\n async update(subkey, date = new Date(), config = defaultConfig) {\n const primaryKey = this.mainKey.keyPacket;\n if (!this.hasSameFingerprintAs(subkey)) {\n throw new Error('Subkey update method: fingerprints of subkeys not equal');\n }\n // key packet\n if (this.keyPacket.constructor.tag === enums.packet.publicSubkey &&\n subkey.keyPacket.constructor.tag === enums.packet.secretSubkey) {\n this.keyPacket = subkey.keyPacket;\n }\n // update missing binding signatures\n const that = this;\n const dataToVerify = { key: primaryKey, bind: that.keyPacket };\n await helper.mergeSignatures(subkey, this, 'bindingSignatures', date, async function(srcBindSig) {\n for (let i = 0; i < that.bindingSignatures.length; i++) {\n if (that.bindingSignatures[i].issuerKeyID.equals(srcBindSig.issuerKeyID)) {\n if (srcBindSig.created > that.bindingSignatures[i].created) {\n that.bindingSignatures[i] = srcBindSig;\n }\n return false;\n }\n }\n try {\n await srcBindSig.verify(primaryKey, enums.signature.subkeyBinding, dataToVerify, date, undefined, config);\n return true;\n } catch (e) {\n return false;\n }\n });\n // revocation signatures\n await helper.mergeSignatures(subkey, this, 'revocationSignatures', date, function(srcRevSig) {\n return helper.isDataRevoked(primaryKey, enums.signature.subkeyRevocation, dataToVerify, [srcRevSig], undefined, undefined, date, config);\n });\n }\n\n /**\n * Revokes the subkey\n * @param {SecretKeyPacket} primaryKey - decrypted private primary key for revocation\n * @param {Object} reasonForRevocation - optional, object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n * @param {String} reasonForRevocation.string optional, string explaining the reason for revocation\n * @param {Date} date - optional, override the creationtime of the revocation signature\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New subkey with revocation signature.\n * @async\n */\n async revoke(\n primaryKey,\n {\n flag: reasonForRevocationFlag = enums.reasonForRevocation.noReason,\n string: reasonForRevocationString = ''\n } = {},\n date = new Date(),\n config = defaultConfig\n ) {\n const dataToSign = { key: primaryKey, bind: this.keyPacket };\n const subkey = new Subkey(this.keyPacket, this.mainKey);\n subkey.revocationSignatures.push(await helper.createSignaturePacket(dataToSign, null, primaryKey, {\n signatureType: enums.signature.subkeyRevocation,\n reasonForRevocationFlag: enums.write(enums.reasonForRevocation, reasonForRevocationFlag),\n reasonForRevocationString\n }, date, undefined, undefined, false, config));\n await subkey.update(this);\n return subkey;\n }\n\n hasSameFingerprintAs(other) {\n return this.keyPacket.hasSameFingerprintAs(other.keyPacket || other);\n }\n}\n\n['getKeyID', 'getFingerprint', 'getAlgorithmInfo', 'getCreationTime', 'isDecrypted'].forEach(name => {\n Subkey.prototype[name] =\n function() {\n return this.keyPacket[name]();\n };\n});\n\nexport default Subkey;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { armor, unarmor } from '../encoding/armor';\nimport {\n PacketList,\n SignaturePacket\n} from '../packet';\nimport defaultConfig from '../config';\nimport enums from '../enums';\nimport util from '../util';\nimport User from './user';\nimport Subkey from './subkey';\nimport * as helper from './helper';\nimport { UnparseablePacket } from '../packet/packet';\n\n// A key revocation certificate can contain the following packets\nconst allowedRevocationPackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\nconst mainKeyPacketTags = new Set([enums.packet.publicKey, enums.packet.privateKey]);\nconst keyPacketTags = new Set([\n enums.packet.publicKey, enums.packet.privateKey,\n enums.packet.publicSubkey, enums.packet.privateSubkey\n]);\n\n/**\n * Abstract class that represents an OpenPGP key. Must contain a primary key.\n * Can contain additional subkeys, signatures, user ids, user attributes.\n * @borrows PublicKeyPacket#getKeyID as Key#getKeyID\n * @borrows PublicKeyPacket#getFingerprint as Key#getFingerprint\n * @borrows PublicKeyPacket#hasSameFingerprintAs as Key#hasSameFingerprintAs\n * @borrows PublicKeyPacket#getAlgorithmInfo as Key#getAlgorithmInfo\n * @borrows PublicKeyPacket#getCreationTime as Key#getCreationTime\n */\nclass Key {\n /**\n * Transforms packetlist to structured key data\n * @param {PacketList} packetlist - The packets that form a key\n * @param {Set} disallowedPackets - disallowed packet tags\n */\n packetListToStructure(packetlist, disallowedPackets = new Set()) {\n let user;\n let primaryKeyID;\n let subkey;\n let ignoreUntil;\n\n for (const packet of packetlist) {\n\n if (packet instanceof UnparseablePacket) {\n const isUnparseableKeyPacket = keyPacketTags.has(packet.tag);\n if (isUnparseableKeyPacket && !ignoreUntil) {\n // Since non-key packets apply to the preceding key packet, if a (sub)key is Unparseable we must\n // discard all non-key packets that follow, until another (sub)key packet is found.\n if (mainKeyPacketTags.has(packet.tag)) {\n ignoreUntil = mainKeyPacketTags;\n } else {\n ignoreUntil = keyPacketTags;\n }\n }\n continue;\n }\n\n const tag = packet.constructor.tag;\n if (ignoreUntil) {\n if (!ignoreUntil.has(tag)) continue;\n ignoreUntil = null;\n }\n if (disallowedPackets.has(tag)) {\n throw new Error(`Unexpected packet type: ${tag}`);\n }\n switch (tag) {\n case enums.packet.publicKey:\n case enums.packet.secretKey:\n if (this.keyPacket) {\n throw new Error('Key block contains multiple keys');\n }\n this.keyPacket = packet;\n primaryKeyID = this.getKeyID();\n if (!primaryKeyID) {\n throw new Error('Missing Key ID');\n }\n break;\n case enums.packet.userID:\n case enums.packet.userAttribute:\n user = new User(packet, this);\n this.users.push(user);\n break;\n case enums.packet.publicSubkey:\n case enums.packet.secretSubkey:\n user = null;\n subkey = new Subkey(packet, this);\n this.subkeys.push(subkey);\n break;\n case enums.packet.signature:\n switch (packet.signatureType) {\n case enums.signature.certGeneric:\n case enums.signature.certPersona:\n case enums.signature.certCasual:\n case enums.signature.certPositive:\n if (!user) {\n util.printDebug('Dropping certification signatures without preceding user packet');\n continue;\n }\n if (packet.issuerKeyID.equals(primaryKeyID)) {\n user.selfCertifications.push(packet);\n } else {\n user.otherCertifications.push(packet);\n }\n break;\n case enums.signature.certRevocation:\n if (user) {\n user.revocationSignatures.push(packet);\n } else {\n this.directSignatures.push(packet);\n }\n break;\n case enums.signature.key:\n this.directSignatures.push(packet);\n break;\n case enums.signature.subkeyBinding:\n if (!subkey) {\n util.printDebug('Dropping subkey binding signature without preceding subkey packet');\n continue;\n }\n subkey.bindingSignatures.push(packet);\n break;\n case enums.signature.keyRevocation:\n this.revocationSignatures.push(packet);\n break;\n case enums.signature.subkeyRevocation:\n if (!subkey) {\n util.printDebug('Dropping subkey revocation signature without preceding subkey packet');\n continue;\n }\n subkey.revocationSignatures.push(packet);\n break;\n }\n break;\n }\n }\n }\n\n /**\n * Transforms structured key data to packetlist\n * @returns {PacketList} The packets that form a key.\n */\n toPacketList() {\n const packetlist = new PacketList();\n packetlist.push(this.keyPacket);\n packetlist.push(...this.revocationSignatures);\n packetlist.push(...this.directSignatures);\n this.users.map(user => packetlist.push(...user.toPacketList()));\n this.subkeys.map(subkey => packetlist.push(...subkey.toPacketList()));\n return packetlist;\n }\n\n /**\n * Clones the key object. The copy is shallow, as it references the same packet objects as the original. However, if the top-level API is used, the two key instances are effectively independent.\n * @param {Boolean} [clonePrivateParams=false] Only relevant for private keys: whether the secret key paramenters should be deeply copied. This is needed if e.g. `encrypt()` is to be called either on the clone or the original key.\n * @returns {Promise} Clone of the key.\n */\n clone(clonePrivateParams = false) {\n const key = new this.constructor(this.toPacketList());\n if (clonePrivateParams) {\n key.getKeys().forEach(k => {\n // shallow clone the key packets\n k.keyPacket = Object.create(\n Object.getPrototypeOf(k.keyPacket),\n Object.getOwnPropertyDescriptors(k.keyPacket)\n );\n if (!k.keyPacket.isDecrypted()) return;\n // deep clone the private params, which are cleared during encryption\n const privateParams = {};\n Object.keys(k.keyPacket.privateParams).forEach(name => {\n privateParams[name] = new Uint8Array(k.keyPacket.privateParams[name]);\n });\n k.keyPacket.privateParams = privateParams;\n });\n }\n return key;\n }\n\n /**\n * Returns an array containing all public or private subkeys matching keyID;\n * If no keyID is given, returns all subkeys.\n * @param {type/keyID} [keyID] - key ID to look for\n * @returns {Array} array of subkeys\n */\n getSubkeys(keyID = null) {\n const subkeys = this.subkeys.filter(subkey => (\n !keyID || subkey.getKeyID().equals(keyID, true)\n ));\n return subkeys;\n }\n\n /**\n * Returns an array containing all public or private keys matching keyID.\n * If no keyID is given, returns all keys, starting with the primary key.\n * @param {type/keyid~KeyID} [keyID] - key ID to look for\n * @returns {Array} array of keys\n */\n getKeys(keyID = null) {\n const keys = [];\n if (!keyID || this.getKeyID().equals(keyID, true)) {\n keys.push(this);\n }\n return keys.concat(this.getSubkeys(keyID));\n }\n\n /**\n * Returns key IDs of all keys\n * @returns {Array}\n */\n getKeyIDs() {\n return this.getKeys().map(key => key.getKeyID());\n }\n\n /**\n * Returns userIDs\n * @returns {Array} Array of userIDs.\n */\n getUserIDs() {\n return this.users.map(user => {\n return user.userID ? user.userID.userID : null;\n }).filter(userID => userID !== null);\n }\n\n /**\n * Returns binary encoded key\n * @returns {Uint8Array} Binary key.\n */\n write() {\n return this.toPacketList().write();\n }\n\n /**\n * Returns last created key or key by given keyID that is available for signing and verification\n * @param {module:type/keyid~KeyID} [keyID] - key ID of a specific key to retrieve\n * @param {Date} [date] - use the fiven date date to to check key validity instead of the current date\n * @param {Object} [userID] - filter keys for the given user ID\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} signing key\n * @throws if no valid signing key was found\n * @async\n */\n async getSigningKey(keyID = null, date = new Date(), userID = {}, config = defaultConfig) {\n await this.verifyPrimaryKey(date, userID, config);\n const primaryKey = this.keyPacket;\n const subkeys = this.subkeys.slice().sort((a, b) => b.keyPacket.created - a.keyPacket.created);\n let exception;\n for (const subkey of subkeys) {\n if (!keyID || subkey.getKeyID().equals(keyID)) {\n try {\n await subkey.verify(date, config);\n const dataToVerify = { key: primaryKey, bind: subkey.keyPacket };\n const bindingSignature = await helper.getLatestValidSignature(\n subkey.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config\n );\n if (!helper.isValidSigningKeyPacket(subkey.keyPacket, bindingSignature)) {\n continue;\n }\n if (!bindingSignature.embeddedSignature) {\n throw new Error('Missing embedded signature');\n }\n // verify embedded signature\n await helper.getLatestValidSignature(\n [bindingSignature.embeddedSignature], subkey.keyPacket, enums.signature.keyBinding, dataToVerify, date, config\n );\n helper.checkKeyRequirements(subkey.keyPacket, config);\n return subkey;\n } catch (e) {\n exception = e;\n }\n }\n }\n\n try {\n const primaryUser = await this.getPrimaryUser(date, userID, config);\n if ((!keyID || primaryKey.getKeyID().equals(keyID)) &&\n helper.isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, config)) {\n helper.checkKeyRequirements(primaryKey, config);\n return this;\n }\n } catch (e) {\n exception = e;\n }\n throw util.wrapError('Could not find valid signing key packet in key ' + this.getKeyID().toHex(), exception);\n }\n\n /**\n * Returns last created key or key by given keyID that is available for encryption or decryption\n * @param {module:type/keyid~KeyID} [keyID] - key ID of a specific key to retrieve\n * @param {Date} [date] - use the fiven date date to to check key validity instead of the current date\n * @param {Object} [userID] - filter keys for the given user ID\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} encryption key\n * @throws if no valid encryption key was found\n * @async\n */\n async getEncryptionKey(keyID, date = new Date(), userID = {}, config = defaultConfig) {\n await this.verifyPrimaryKey(date, userID, config);\n const primaryKey = this.keyPacket;\n // V4: by convention subkeys are preferred for encryption service\n const subkeys = this.subkeys.slice().sort((a, b) => b.keyPacket.created - a.keyPacket.created);\n let exception;\n for (const subkey of subkeys) {\n if (!keyID || subkey.getKeyID().equals(keyID)) {\n try {\n await subkey.verify(date, config);\n const dataToVerify = { key: primaryKey, bind: subkey.keyPacket };\n const bindingSignature = await helper.getLatestValidSignature(subkey.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n if (helper.isValidEncryptionKeyPacket(subkey.keyPacket, bindingSignature)) {\n helper.checkKeyRequirements(subkey.keyPacket, config);\n return subkey;\n }\n } catch (e) {\n exception = e;\n }\n }\n }\n\n try {\n // if no valid subkey for encryption, evaluate primary key\n const primaryUser = await this.getPrimaryUser(date, userID, config);\n if ((!keyID || primaryKey.getKeyID().equals(keyID)) &&\n helper.isValidEncryptionKeyPacket(primaryKey, primaryUser.selfCertification)) {\n helper.checkKeyRequirements(primaryKey, config);\n return this;\n }\n } catch (e) {\n exception = e;\n }\n throw util.wrapError('Could not find valid encryption key packet in key ' + this.getKeyID().toHex(), exception);\n }\n\n /**\n * Checks if a signature on a key is revoked\n * @param {SignaturePacket} signature - The signature to verify\n * @param {PublicSubkeyPacket|\n * SecretSubkeyPacket|\n * PublicKeyPacket|\n * SecretKeyPacket} key, optional The key to verify the signature\n * @param {Date} [date] - Use the given date for verification, instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} True if the certificate is revoked.\n * @async\n */\n async isRevoked(signature, key, date = new Date(), config = defaultConfig) {\n return helper.isDataRevoked(\n this.keyPacket, enums.signature.keyRevocation, { key: this.keyPacket }, this.revocationSignatures, signature, key, date, config\n );\n }\n\n /**\n * Verify primary key. Checks for revocation signatures, expiration time\n * and valid self signature. Throws if the primary key is invalid.\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [userID] - User ID\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} If key verification failed\n * @async\n */\n async verifyPrimaryKey(date = new Date(), userID = {}, config = defaultConfig) {\n const primaryKey = this.keyPacket;\n // check for key revocation signatures\n if (await this.isRevoked(null, null, date, config)) {\n throw new Error('Primary key is revoked');\n }\n // check for valid, unrevoked, unexpired self signature\n const { selfCertification } = await this.getPrimaryUser(date, userID, config);\n // check for expiration time in binding signatures\n if (helper.isDataExpired(primaryKey, selfCertification, date)) {\n throw new Error('Primary key is expired');\n }\n // check for expiration time in direct signatures\n const directSignature = await helper.getLatestValidSignature(\n this.directSignatures, primaryKey, enums.signature.key, { key: primaryKey }, date, config\n ).catch(() => {}); // invalid signatures are discarded, to avoid breaking the key\n\n if (directSignature && helper.isDataExpired(primaryKey, directSignature, date)) {\n throw new Error('Primary key is expired');\n }\n }\n\n /**\n * Returns the expiration date of the primary key, considering self-certifications and direct-key signatures.\n * Returns `Infinity` if the key doesn't expire, or `null` if the key is revoked or invalid.\n * @param {Object} [userID] - User ID to consider instead of the primary user\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise}\n * @async\n */\n async getExpirationTime(userID, config = defaultConfig) {\n let primaryKeyExpiry;\n try {\n const { selfCertification } = await this.getPrimaryUser(null, userID, config);\n const selfSigKeyExpiry = helper.getKeyExpirationTime(this.keyPacket, selfCertification);\n const selfSigExpiry = selfCertification.getExpirationTime();\n const directSignature = await helper.getLatestValidSignature(\n this.directSignatures, this.keyPacket, enums.signature.key, { key: this.keyPacket }, null, config\n ).catch(() => {});\n if (directSignature) {\n const directSigKeyExpiry = helper.getKeyExpirationTime(this.keyPacket, directSignature);\n // We do not support the edge case where the direct signature expires, since it would invalidate the corresponding key expiration,\n // causing a discountinous validy period for the key\n primaryKeyExpiry = Math.min(selfSigKeyExpiry, selfSigExpiry, directSigKeyExpiry);\n } else {\n primaryKeyExpiry = selfSigKeyExpiry < selfSigExpiry ? selfSigKeyExpiry : selfSigExpiry;\n }\n } catch (e) {\n primaryKeyExpiry = null;\n }\n\n return util.normalizeDate(primaryKeyExpiry);\n }\n\n\n /**\n * Returns primary user and most significant (latest valid) self signature\n * - if multiple primary users exist, returns the one with the latest self signature\n * - otherwise, returns the user with the latest self signature\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [userID] - User ID to get instead of the primary user, if it exists\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise<{\n * user: User,\n * selfCertification: SignaturePacket\n * }>} The primary user and the self signature\n * @async\n */\n async getPrimaryUser(date = new Date(), userID = {}, config = defaultConfig) {\n const primaryKey = this.keyPacket;\n const users = [];\n let exception;\n for (let i = 0; i < this.users.length; i++) {\n try {\n const user = this.users[i];\n if (!user.userID) {\n continue;\n }\n if (\n (userID.name !== undefined && user.userID.name !== userID.name) ||\n (userID.email !== undefined && user.userID.email !== userID.email) ||\n (userID.comment !== undefined && user.userID.comment !== userID.comment)\n ) {\n throw new Error('Could not find user that matches that user ID');\n }\n const dataToVerify = { userID: user.userID, key: primaryKey };\n const selfCertification = await helper.getLatestValidSignature(user.selfCertifications, primaryKey, enums.signature.certGeneric, dataToVerify, date, config);\n users.push({ index: i, user, selfCertification });\n } catch (e) {\n exception = e;\n }\n }\n if (!users.length) {\n throw exception || new Error('Could not find primary user');\n }\n await Promise.all(users.map(async function (a) {\n return a.selfCertification.revoked || a.user.isRevoked(a.selfCertification, null, date, config);\n }));\n // sort by primary user flag and signature creation time\n const primaryUser = users.sort(function(a, b) {\n const A = a.selfCertification;\n const B = b.selfCertification;\n return B.revoked - A.revoked || A.isPrimaryUserID - B.isPrimaryUserID || A.created - B.created;\n }).pop();\n const { user, selfCertification: cert } = primaryUser;\n if (cert.revoked || await user.isRevoked(cert, null, date, config)) {\n throw new Error('Primary user is revoked');\n }\n return primaryUser;\n }\n\n /**\n * Update key with new components from specified key with same key ID:\n * users, subkeys, certificates are merged into the destination key,\n * duplicates and expired signatures are ignored.\n *\n * If the source key is a private key and the destination key is public,\n * a private key is returned.\n * @param {Key} sourceKey - Source key to merge\n * @param {Date} [date] - Date to verify validity of signatures and keys\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} updated key\n * @async\n */\n async update(sourceKey, date = new Date(), config = defaultConfig) {\n if (!this.hasSameFingerprintAs(sourceKey)) {\n throw new Error('Primary key fingerprints must be equal to update the key');\n }\n if (!this.isPrivate() && sourceKey.isPrivate()) {\n // check for equal subkey packets\n const equal = (this.subkeys.length === sourceKey.subkeys.length) &&\n (this.subkeys.every(destSubkey => {\n return sourceKey.subkeys.some(srcSubkey => {\n return destSubkey.hasSameFingerprintAs(srcSubkey);\n });\n }));\n if (!equal) {\n throw new Error('Cannot update public key with private key if subkeys mismatch');\n }\n\n return sourceKey.update(this, config);\n }\n // from here on, either:\n // - destination key is private, source key is public\n // - the keys are of the same type\n // hence we don't need to convert the destination key type\n const updatedKey = this.clone();\n // revocation signatures\n await helper.mergeSignatures(sourceKey, updatedKey, 'revocationSignatures', date, srcRevSig => {\n return helper.isDataRevoked(updatedKey.keyPacket, enums.signature.keyRevocation, updatedKey, [srcRevSig], null, sourceKey.keyPacket, date, config);\n });\n // direct signatures\n await helper.mergeSignatures(sourceKey, updatedKey, 'directSignatures', date);\n // update users\n await Promise.all(sourceKey.users.map(async srcUser => {\n // multiple users with the same ID/attribute are not explicitly disallowed by the spec\n // hence we support them, just in case\n const usersToUpdate = updatedKey.users.filter(dstUser => (\n (srcUser.userID && srcUser.userID.equals(dstUser.userID)) ||\n (srcUser.userAttribute && srcUser.userAttribute.equals(dstUser.userAttribute))\n ));\n if (usersToUpdate.length > 0) {\n await Promise.all(\n usersToUpdate.map(userToUpdate => userToUpdate.update(srcUser, date, config))\n );\n } else {\n const newUser = srcUser.clone();\n newUser.mainKey = updatedKey;\n updatedKey.users.push(newUser);\n }\n }));\n // update subkeys\n await Promise.all(sourceKey.subkeys.map(async srcSubkey => {\n // multiple subkeys with same fingerprint might be preset\n const subkeysToUpdate = updatedKey.subkeys.filter(dstSubkey => (\n dstSubkey.hasSameFingerprintAs(srcSubkey)\n ));\n if (subkeysToUpdate.length > 0) {\n await Promise.all(\n subkeysToUpdate.map(subkeyToUpdate => subkeyToUpdate.update(srcSubkey, date, config))\n );\n } else {\n const newSubkey = srcSubkey.clone();\n newSubkey.mainKey = updatedKey;\n updatedKey.subkeys.push(newSubkey);\n }\n }));\n\n return updatedKey;\n }\n\n /**\n * Get revocation certificate from a revoked key.\n * (To get a revocation certificate for an unrevoked key, call revoke() first.)\n * @param {Date} date - Use the given date instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} Armored revocation certificate.\n * @async\n */\n async getRevocationCertificate(date = new Date(), config = defaultConfig) {\n const dataToVerify = { key: this.keyPacket };\n const revocationSignature = await helper.getLatestValidSignature(this.revocationSignatures, this.keyPacket, enums.signature.keyRevocation, dataToVerify, date, config);\n const packetlist = new PacketList();\n packetlist.push(revocationSignature);\n return armor(enums.armor.publicKey, packetlist.write(), null, null, 'This is a revocation certificate');\n }\n\n /**\n * Applies a revocation certificate to a key\n * This adds the first signature packet in the armored text to the key,\n * if it is a valid revocation signature.\n * @param {String} revocationCertificate - armored revocation certificate\n * @param {Date} [date] - Date to verify the certificate\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} Revoked key.\n * @async\n */\n async applyRevocationCertificate(revocationCertificate, date = new Date(), config = defaultConfig) {\n const input = await unarmor(revocationCertificate, config);\n const packetlist = await PacketList.fromBinary(input.data, allowedRevocationPackets, config);\n const revocationSignature = packetlist.findPacket(enums.packet.signature);\n if (!revocationSignature || revocationSignature.signatureType !== enums.signature.keyRevocation) {\n throw new Error('Could not find revocation signature packet');\n }\n if (!revocationSignature.issuerKeyID.equals(this.getKeyID())) {\n throw new Error('Revocation signature does not match key');\n }\n try {\n await revocationSignature.verify(this.keyPacket, enums.signature.keyRevocation, { key: this.keyPacket }, date, undefined, config);\n } catch (e) {\n throw util.wrapError('Could not verify revocation signature', e);\n }\n const key = this.clone();\n key.revocationSignatures.push(revocationSignature);\n return key;\n }\n\n /**\n * Signs primary user of key\n * @param {Array} privateKeys - decrypted private keys for signing\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [userID] - User ID to get instead of the primary user, if it exists\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} Key with new certificate signature.\n * @async\n */\n async signPrimaryUser(privateKeys, date, userID, config = defaultConfig) {\n const { index, user } = await this.getPrimaryUser(date, userID, config);\n const userSign = await user.certify(privateKeys, date, config);\n const key = this.clone();\n key.users[index] = userSign;\n return key;\n }\n\n /**\n * Signs all users of key\n * @param {Array} privateKeys - decrypted private keys for signing\n * @param {Date} [date] - Use the given date for signing, instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} Key with new certificate signature.\n * @async\n */\n async signAllUsers(privateKeys, date = new Date(), config = defaultConfig) {\n const key = this.clone();\n key.users = await Promise.all(this.users.map(function(user) {\n return user.certify(privateKeys, date, config);\n }));\n return key;\n }\n\n /**\n * Verifies primary user of key\n * - if no arguments are given, verifies the self certificates;\n * - otherwise, verifies all certificates signed with given keys.\n * @param {Array} [verificationKeys] - array of keys to verify certificate signatures, instead of the primary key\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [userID] - User ID to get instead of the primary user, if it exists\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise>} List of signer's keyID and validity of signature.\n * Signature validity is null if the verification keys do not correspond to the certificate.\n * @async\n */\n async verifyPrimaryUser(verificationKeys, date = new Date(), userID, config = defaultConfig) {\n const primaryKey = this.keyPacket;\n const { user } = await this.getPrimaryUser(date, userID, config);\n const results = verificationKeys ?\n await user.verifyAllCertifications(verificationKeys, date, config) :\n [{ keyID: primaryKey.getKeyID(), valid: await user.verify(date, config).catch(() => false) }];\n return results;\n }\n\n /**\n * Verifies all users of key\n * - if no arguments are given, verifies the self certificates;\n * - otherwise, verifies all certificates signed with given keys.\n * @param {Array} [verificationKeys] - array of keys to verify certificate signatures\n * @param {Date} [date] - Use the given date for verification instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise>} List of userID, signer's keyID and validity of signature.\n * Signature validity is null if the verification keys do not correspond to the certificate.\n * @async\n */\n async verifyAllUsers(verificationKeys, date = new Date(), config = defaultConfig) {\n const primaryKey = this.keyPacket;\n const results = [];\n await Promise.all(this.users.map(async user => {\n const signatures = verificationKeys ?\n await user.verifyAllCertifications(verificationKeys, date, config) :\n [{ keyID: primaryKey.getKeyID(), valid: await user.verify(date, config).catch(() => false) }];\n\n results.push(...signatures.map(\n signature => ({\n userID: user.userID ? user.userID.userID : null,\n userAttribute: user.userAttribute,\n keyID: signature.keyID,\n valid: signature.valid\n }))\n );\n }));\n return results;\n }\n}\n\n['getKeyID', 'getFingerprint', 'getAlgorithmInfo', 'getCreationTime', 'hasSameFingerprintAs'].forEach(name => {\n Key.prototype[name] =\n Subkey.prototype[name];\n});\n\nexport default Key;\n","// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { armor } from '../encoding/armor';\nimport defaultConfig from '../config';\nimport enums from '../enums';\nimport Key from './key';\n\n/**\n * Class that represents an OpenPGP Public Key\n */\nclass PublicKey extends Key {\n /**\n * @param {PacketList} packetlist - The packets that form this key\n */\n constructor(packetlist) {\n super();\n this.keyPacket = null;\n this.revocationSignatures = [];\n this.directSignatures = [];\n this.users = [];\n this.subkeys = [];\n if (packetlist) {\n this.packetListToStructure(packetlist, new Set([enums.packet.secretKey, enums.packet.secretSubkey]));\n if (!this.keyPacket) {\n throw new Error('Invalid key: missing public-key packet');\n }\n }\n }\n\n /**\n * Returns true if this is a private key\n * @returns {false}\n */\n isPrivate() {\n return false;\n }\n\n /**\n * Returns key as public key (shallow copy)\n * @returns {PublicKey} New public Key\n */\n toPublic() {\n return this;\n }\n\n /**\n * Returns ASCII armored text of key\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {ReadableStream} ASCII armor.\n */\n armor(config = defaultConfig) {\n return armor(enums.armor.publicKey, this.toPacketList().write(), undefined, undefined, undefined, config);\n }\n}\n\nexport default PublicKey;\n\n","import PublicKey from './public_key';\nimport { armor } from '../encoding/armor';\nimport {\n PacketList,\n PublicKeyPacket,\n PublicSubkeyPacket\n} from '../packet';\nimport defaultConfig from '../config';\nimport enums from '../enums';\nimport * as helper from './helper';\n\n/**\n * Class that represents an OpenPGP Private key\n */\nclass PrivateKey extends PublicKey {\n /**\n * @param {PacketList} packetlist - The packets that form this key\n */\n constructor(packetlist) {\n super();\n this.packetListToStructure(packetlist, new Set([enums.packet.publicKey, enums.packet.publicSubkey]));\n if (!this.keyPacket) {\n throw new Error('Invalid key: missing private-key packet');\n }\n }\n\n /**\n * Returns true if this is a private key\n * @returns {Boolean}\n */\n isPrivate() {\n return true;\n }\n\n /**\n * Returns key as public key (shallow copy)\n * @returns {PublicKey} New public Key\n */\n toPublic() {\n const packetlist = new PacketList();\n const keyPackets = this.toPacketList();\n for (const keyPacket of keyPackets) {\n switch (keyPacket.constructor.tag) {\n case enums.packet.secretKey: {\n const pubKeyPacket = PublicKeyPacket.fromSecretKeyPacket(keyPacket);\n packetlist.push(pubKeyPacket);\n break;\n }\n case enums.packet.secretSubkey: {\n const pubSubkeyPacket = PublicSubkeyPacket.fromSecretSubkeyPacket(keyPacket);\n packetlist.push(pubSubkeyPacket);\n break;\n }\n default:\n packetlist.push(keyPacket);\n }\n }\n return new PublicKey(packetlist);\n }\n\n /**\n * Returns ASCII armored text of key\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {ReadableStream} ASCII armor.\n */\n armor(config = defaultConfig) {\n return armor(enums.armor.privateKey, this.toPacketList().write(), undefined, undefined, undefined, config);\n }\n\n /**\n * Returns all keys that are available for decryption, matching the keyID when given\n * This is useful to retrieve keys for session key decryption\n * @param {module:type/keyid~KeyID} keyID, optional\n * @param {Date} date, optional\n * @param {String} userID, optional\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise>} Array of decryption keys.\n * @async\n */\n async getDecryptionKeys(keyID, date = new Date(), userID = {}, config = defaultConfig) {\n const primaryKey = this.keyPacket;\n const keys = [];\n for (let i = 0; i < this.subkeys.length; i++) {\n if (!keyID || this.subkeys[i].getKeyID().equals(keyID, true)) {\n try {\n const dataToVerify = { key: primaryKey, bind: this.subkeys[i].keyPacket };\n const bindingSignature = await helper.getLatestValidSignature(this.subkeys[i].bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n if (helper.isValidDecryptionKeyPacket(bindingSignature, config)) {\n keys.push(this.subkeys[i]);\n }\n } catch (e) {}\n }\n }\n\n // evaluate primary key\n const primaryUser = await this.getPrimaryUser(date, userID, config);\n if ((!keyID || primaryKey.getKeyID().equals(keyID, true)) &&\n helper.isValidDecryptionKeyPacket(primaryUser.selfCertification, config)) {\n keys.push(this);\n }\n\n return keys;\n }\n\n /**\n * Returns true if the primary key or any subkey is decrypted.\n * A dummy key is considered encrypted.\n */\n isDecrypted() {\n return this.getKeys().some(({ keyPacket }) => keyPacket.isDecrypted());\n }\n\n /**\n * Check whether the private and public primary key parameters correspond\n * Together with verification of binding signatures, this guarantees key integrity\n * In case of gnu-dummy primary key, it is enough to validate any signing subkeys\n * otherwise all encryption subkeys are validated\n * If only gnu-dummy keys are found, we cannot properly validate so we throw an error\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @throws {Error} if validation was not successful and the key cannot be trusted\n * @async\n */\n async validate(config = defaultConfig) {\n if (!this.isPrivate()) {\n throw new Error('Cannot validate a public key');\n }\n\n let signingKeyPacket;\n if (!this.keyPacket.isDummy()) {\n signingKeyPacket = this.keyPacket;\n } else {\n /**\n * It is enough to validate any signing keys\n * since its binding signatures are also checked\n */\n const signingKey = await this.getSigningKey(null, null, undefined, { ...config, rejectPublicKeyAlgorithms: new Set(), minRSABits: 0 });\n // This could again be a dummy key\n if (signingKey && !signingKey.keyPacket.isDummy()) {\n signingKeyPacket = signingKey.keyPacket;\n }\n }\n\n if (signingKeyPacket) {\n return signingKeyPacket.validate();\n } else {\n const keys = this.getKeys();\n const allDummies = keys.map(key => key.keyPacket.isDummy()).every(Boolean);\n if (allDummies) {\n throw new Error('Cannot validate an all-gnu-dummy key');\n }\n\n return Promise.all(keys.map(async key => key.keyPacket.validate()));\n }\n }\n\n /**\n * Clear private key parameters\n */\n clearPrivateParams() {\n this.getKeys().forEach(({ keyPacket }) => {\n if (keyPacket.isDecrypted()) {\n keyPacket.clearPrivateParams();\n }\n });\n }\n\n /**\n * Revokes the key\n * @param {Object} reasonForRevocation - optional, object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n * @param {String} reasonForRevocation.string optional, string explaining the reason for revocation\n * @param {Date} date - optional, override the creationtime of the revocation signature\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New key with revocation signature.\n * @async\n */\n async revoke(\n {\n flag: reasonForRevocationFlag = enums.reasonForRevocation.noReason,\n string: reasonForRevocationString = ''\n } = {},\n date = new Date(),\n config = defaultConfig\n ) {\n if (!this.isPrivate()) {\n throw new Error('Need private key for revoking');\n }\n const dataToSign = { key: this.keyPacket };\n const key = this.clone();\n key.revocationSignatures.push(await helper.createSignaturePacket(dataToSign, null, this.keyPacket, {\n signatureType: enums.signature.keyRevocation,\n reasonForRevocationFlag: enums.write(enums.reasonForRevocation, reasonForRevocationFlag),\n reasonForRevocationString\n }, date, undefined, undefined, undefined, config));\n return key;\n }\n\n\n /**\n * Generates a new OpenPGP subkey, and returns a clone of the Key object with the new subkey added.\n * Supports RSA and ECC keys. Defaults to the algorithm and bit size/curve of the primary key. DSA primary keys default to RSA subkeys.\n * @param {ecc|rsa} options.type The subkey algorithm: ECC or RSA\n * @param {String} options.curve (optional) Elliptic curve for ECC keys\n * @param {Integer} options.rsaBits (optional) Number of bits for RSA subkeys\n * @param {Number} options.keyExpirationTime (optional) Number of seconds from the key creation time after which the key expires\n * @param {Date} options.date (optional) Override the creation date of the key and the key signatures\n * @param {Boolean} options.sign (optional) Indicates whether the subkey should sign rather than encrypt. Defaults to false\n * @param {Object} options.config (optional) custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise}\n * @async\n */\n async addSubkey(options = {}) {\n const config = { ...defaultConfig, ...options.config };\n if (options.passphrase) {\n throw new Error('Subkey could not be encrypted here, please encrypt whole key');\n }\n if (options.rsaBits < config.minRSABits) {\n throw new Error(`rsaBits should be at least ${config.minRSABits}, got: ${options.rsaBits}`);\n }\n const secretKeyPacket = this.keyPacket;\n if (secretKeyPacket.isDummy()) {\n throw new Error('Cannot add subkey to gnu-dummy primary key');\n }\n if (!secretKeyPacket.isDecrypted()) {\n throw new Error('Key is not decrypted');\n }\n const defaultOptions = secretKeyPacket.getAlgorithmInfo();\n defaultOptions.type = defaultOptions.curve ? 'ecc' : 'rsa'; // DSA keys default to RSA\n defaultOptions.rsaBits = defaultOptions.bits || 4096;\n defaultOptions.curve = defaultOptions.curve || 'curve25519';\n options = helper.sanitizeKeyOptions(options, defaultOptions);\n const keyPacket = await helper.generateSecretSubkey(options);\n helper.checkKeyRequirements(keyPacket, config);\n const bindingSignature = await helper.createBindingSignature(keyPacket, secretKeyPacket, options, config);\n const packetList = this.toPacketList();\n packetList.push(keyPacket, bindingSignature);\n return new PrivateKey(packetList);\n }\n}\n\nexport default PrivateKey;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport {\n PacketList,\n UserIDPacket,\n SignaturePacket,\n PublicKeyPacket,\n PublicSubkeyPacket,\n SecretKeyPacket,\n SecretSubkeyPacket,\n UserAttributePacket\n} from '../packet';\nimport PrivateKey from './private_key';\nimport PublicKey from './public_key';\nimport * as helper from './helper';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\nimport { unarmor } from '../encoding/armor';\n\n// A Key can contain the following packets\nconst allowedKeyPackets = /*#__PURE__*/ util.constructAllowedPackets([\n PublicKeyPacket,\n PublicSubkeyPacket,\n SecretKeyPacket,\n SecretSubkeyPacket,\n UserIDPacket,\n UserAttributePacket,\n SignaturePacket\n]);\n\n/**\n * Creates a PublicKey or PrivateKey depending on the packetlist in input\n * @param {PacketList} - packets to parse\n * @return {Key} parsed key\n * @throws if no key packet was found\n */\nfunction createKey(packetlist) {\n for (const packet of packetlist) {\n switch (packet.constructor.tag) {\n case enums.packet.secretKey:\n return new PrivateKey(packetlist);\n case enums.packet.publicKey:\n return new PublicKey(packetlist);\n }\n }\n throw new Error('No key packet found');\n}\n\n\n/**\n * Generates a new OpenPGP key. Supports RSA and ECC keys.\n * By default, primary and subkeys will be of same type.\n * @param {ecc|rsa} options.type The primary key algorithm type: ECC or RSA\n * @param {String} options.curve Elliptic curve for ECC keys\n * @param {Integer} options.rsaBits Number of bits for RSA keys\n * @param {Array} options.userIDs User IDs as strings or objects: 'Jo Doe ' or { name:'Jo Doe', email:'info@jo.com' }\n * @param {String} options.passphrase Passphrase used to encrypt the resulting private key\n * @param {Number} options.keyExpirationTime (optional) Number of seconds from the key creation time after which the key expires\n * @param {Date} options.date Creation date of the key and the key signatures\n * @param {Object} config - Full configuration\n * @param {Array} options.subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * sign parameter defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @returns {Promise<{{ key: PrivateKey, revocationCertificate: String }}>}\n * @async\n * @static\n * @private\n */\nexport async function generate(options, config) {\n options.sign = true; // primary key is always a signing key\n options = helper.sanitizeKeyOptions(options);\n options.subkeys = options.subkeys.map((subkey, index) => helper.sanitizeKeyOptions(options.subkeys[index], options));\n let promises = [helper.generateSecretKey(options, config)];\n promises = promises.concat(options.subkeys.map(options => helper.generateSecretSubkey(options, config)));\n const packets = await Promise.all(promises);\n\n const key = await wrapKeyObject(packets[0], packets.slice(1), options, config);\n const revocationCertificate = await key.getRevocationCertificate(options.date, config);\n key.revocationSignatures = [];\n return { key, revocationCertificate };\n}\n\n/**\n * Reformats and signs an OpenPGP key with a given User ID. Currently only supports RSA keys.\n * @param {PrivateKey} options.privateKey The private key to reformat\n * @param {Array} options.userIDs User IDs as strings or objects: 'Jo Doe ' or { name:'Jo Doe', email:'info@jo.com' }\n * @param {String} options.passphrase Passphrase used to encrypt the resulting private key\n * @param {Number} options.keyExpirationTime Number of seconds from the key creation time after which the key expires\n * @param {Date} options.date Override the creation date of the key signatures\n * @param {Array} options.subkeys (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * @param {Object} config - Full configuration\n *\n * @returns {Promise<{{ key: PrivateKey, revocationCertificate: String }}>}\n * @async\n * @static\n * @private\n */\nexport async function reformat(options, config) {\n options = sanitize(options);\n const { privateKey } = options;\n\n if (!privateKey.isPrivate()) {\n throw new Error('Cannot reformat a public key');\n }\n\n if (privateKey.keyPacket.isDummy()) {\n throw new Error('Cannot reformat a gnu-dummy primary key');\n }\n\n const isDecrypted = privateKey.getKeys().every(({ keyPacket }) => keyPacket.isDecrypted());\n if (!isDecrypted) {\n throw new Error('Key is not decrypted');\n }\n\n const secretKeyPacket = privateKey.keyPacket;\n\n if (!options.subkeys) {\n options.subkeys = await Promise.all(privateKey.subkeys.map(async subkey => {\n const secretSubkeyPacket = subkey.keyPacket;\n const dataToVerify = { key: secretKeyPacket, bind: secretSubkeyPacket };\n const bindingSignature = await (\n helper.getLatestValidSignature(subkey.bindingSignatures, secretKeyPacket, enums.signature.subkeyBinding, dataToVerify, null, config)\n ).catch(() => ({}));\n return {\n sign: bindingSignature.keyFlags && (bindingSignature.keyFlags[0] & enums.keyFlags.signData)\n };\n }));\n }\n\n const secretSubkeyPackets = privateKey.subkeys.map(subkey => subkey.keyPacket);\n if (options.subkeys.length !== secretSubkeyPackets.length) {\n throw new Error('Number of subkey options does not match number of subkeys');\n }\n\n options.subkeys = options.subkeys.map(subkeyOptions => sanitize(subkeyOptions, options));\n\n const key = await wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options, config);\n const revocationCertificate = await key.getRevocationCertificate(options.date, config);\n key.revocationSignatures = [];\n return { key, revocationCertificate };\n\n function sanitize(options, subkeyDefaults = {}) {\n options.keyExpirationTime = options.keyExpirationTime || subkeyDefaults.keyExpirationTime;\n options.passphrase = util.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n options.date = options.date || subkeyDefaults.date;\n\n return options;\n }\n}\n\n/**\n * Construct PrivateKey object from the given key packets, add certification signatures and set passphrase protection\n * The new key includes a revocation certificate that must be removed before returning the key, otherwise the key is considered revoked.\n * @param {SecretKeyPacket} secretKeyPacket\n * @param {SecretSubkeyPacket} secretSubkeyPackets\n * @param {Object} options\n * @param {Object} config - Full configuration\n * @returns {PrivateKey}\n */\nasync function wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options, config) {\n // set passphrase protection\n if (options.passphrase) {\n await secretKeyPacket.encrypt(options.passphrase, config);\n }\n\n await Promise.all(secretSubkeyPackets.map(async function(secretSubkeyPacket, index) {\n const subkeyPassphrase = options.subkeys[index].passphrase;\n if (subkeyPassphrase) {\n await secretSubkeyPacket.encrypt(subkeyPassphrase, config);\n }\n }));\n\n const packetlist = new PacketList();\n packetlist.push(secretKeyPacket);\n\n await Promise.all(options.userIDs.map(async function(userID, index) {\n function createPreferredAlgos(algos, preferredAlgo) {\n return [preferredAlgo, ...algos.filter(algo => algo !== preferredAlgo)];\n }\n\n const userIDPacket = UserIDPacket.fromObject(userID);\n const dataToSign = {};\n dataToSign.userID = userIDPacket;\n dataToSign.key = secretKeyPacket;\n\n const signatureProperties = {};\n signatureProperties.signatureType = enums.signature.certGeneric;\n signatureProperties.keyFlags = [enums.keyFlags.certifyKeys | enums.keyFlags.signData];\n signatureProperties.preferredSymmetricAlgorithms = createPreferredAlgos([\n // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support)\n enums.symmetric.aes256,\n enums.symmetric.aes128,\n enums.symmetric.aes192\n ], config.preferredSymmetricAlgorithm);\n if (config.aeadProtect) {\n signatureProperties.preferredAEADAlgorithms = createPreferredAlgos([\n enums.aead.eax,\n enums.aead.ocb\n ], config.preferredAEADAlgorithm);\n }\n signatureProperties.preferredHashAlgorithms = createPreferredAlgos([\n // prefer fast asm.js implementations (SHA-256)\n enums.hash.sha256,\n enums.hash.sha512\n ], config.preferredHashAlgorithm);\n signatureProperties.preferredCompressionAlgorithms = createPreferredAlgos([\n enums.compression.zlib,\n enums.compression.zip,\n enums.compression.uncompressed\n ], config.preferredCompressionAlgorithm);\n if (index === 0) {\n signatureProperties.isPrimaryUserID = true;\n }\n // integrity protection always enabled\n signatureProperties.features = [0];\n signatureProperties.features[0] |= enums.features.modificationDetection;\n if (config.aeadProtect) {\n signatureProperties.features[0] |= enums.features.aead;\n }\n if (config.v5Keys) {\n signatureProperties.features[0] |= enums.features.v5Keys;\n }\n if (options.keyExpirationTime > 0) {\n signatureProperties.keyExpirationTime = options.keyExpirationTime;\n signatureProperties.keyNeverExpires = false;\n }\n\n const signaturePacket = await helper.createSignaturePacket(dataToSign, null, secretKeyPacket, signatureProperties, options.date, undefined, undefined, undefined, config);\n\n return { userIDPacket, signaturePacket };\n })).then(list => {\n list.forEach(({ userIDPacket, signaturePacket }) => {\n packetlist.push(userIDPacket);\n packetlist.push(signaturePacket);\n });\n });\n\n await Promise.all(secretSubkeyPackets.map(async function(secretSubkeyPacket, index) {\n const subkeyOptions = options.subkeys[index];\n const subkeySignaturePacket = await helper.createBindingSignature(secretSubkeyPacket, secretKeyPacket, subkeyOptions, config);\n return { secretSubkeyPacket, subkeySignaturePacket };\n })).then(packets => {\n packets.forEach(({ secretSubkeyPacket, subkeySignaturePacket }) => {\n packetlist.push(secretSubkeyPacket);\n packetlist.push(subkeySignaturePacket);\n });\n });\n\n // Add revocation signature packet for creating a revocation certificate.\n // This packet should be removed before returning the key.\n const dataToSign = { key: secretKeyPacket };\n packetlist.push(await helper.createSignaturePacket(dataToSign, null, secretKeyPacket, {\n signatureType: enums.signature.keyRevocation,\n reasonForRevocationFlag: enums.reasonForRevocation.noReason,\n reasonForRevocationString: ''\n }, options.date, undefined, undefined, undefined, config));\n\n if (options.passphrase) {\n secretKeyPacket.clearPrivateParams();\n }\n\n await Promise.all(secretSubkeyPackets.map(async function(secretSubkeyPacket, index) {\n const subkeyPassphrase = options.subkeys[index].passphrase;\n if (subkeyPassphrase) {\n secretSubkeyPacket.clearPrivateParams();\n }\n }));\n\n return new PrivateKey(packetlist);\n}\n\n/**\n * Reads an (optionally armored) OpenPGP key and returns a key object\n * @param {Object} options\n * @param {String} [options.armoredKey] - Armored key to be parsed\n * @param {Uint8Array} [options.binaryKey] - Binary key to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} Key object.\n * @async\n * @static\n */\nexport async function readKey({ armoredKey, binaryKey, config, ...rest }) {\n config = { ...defaultConfig, ...config };\n if (!armoredKey && !binaryKey) {\n throw new Error('readKey: must pass options object containing `armoredKey` or `binaryKey`');\n }\n if (armoredKey && !util.isString(armoredKey)) {\n throw new Error('readKey: options.armoredKey must be a string');\n }\n if (binaryKey && !util.isUint8Array(binaryKey)) {\n throw new Error('readKey: options.binaryKey must be a Uint8Array');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n let input;\n if (armoredKey) {\n const { type, data } = await unarmor(armoredKey, config);\n if (!(type === enums.armor.publicKey || type === enums.armor.privateKey)) {\n throw new Error('Armored text not of type key');\n }\n input = data;\n } else {\n input = binaryKey;\n }\n const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n return createKey(packetlist);\n}\n\n/**\n * Reads an (optionally armored) OpenPGP private key and returns a PrivateKey object\n * @param {Object} options\n * @param {String} [options.armoredKey] - Armored key to be parsed\n * @param {Uint8Array} [options.binaryKey] - Binary key to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} Key object.\n * @async\n * @static\n */\nexport async function readPrivateKey({ armoredKey, binaryKey, config, ...rest }) {\n config = { ...defaultConfig, ...config };\n if (!armoredKey && !binaryKey) {\n throw new Error('readPrivateKey: must pass options object containing `armoredKey` or `binaryKey`');\n }\n if (armoredKey && !util.isString(armoredKey)) {\n throw new Error('readPrivateKey: options.armoredKey must be a string');\n }\n if (binaryKey && !util.isUint8Array(binaryKey)) {\n throw new Error('readPrivateKey: options.binaryKey must be a Uint8Array');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n let input;\n if (armoredKey) {\n const { type, data } = await unarmor(armoredKey, config);\n if (!(type === enums.armor.privateKey)) {\n throw new Error('Armored text not of type private key');\n }\n input = data;\n } else {\n input = binaryKey;\n }\n const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n return new PrivateKey(packetlist);\n}\n\n/**\n * Reads an (optionally armored) OpenPGP key block and returns a list of key objects\n * @param {Object} options\n * @param {String} [options.armoredKeys] - Armored keys to be parsed\n * @param {Uint8Array} [options.binaryKeys] - Binary keys to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise>} Key objects.\n * @async\n * @static\n */\nexport async function readKeys({ armoredKeys, binaryKeys, config, ...rest }) {\n config = { ...defaultConfig, ...config };\n let input = armoredKeys || binaryKeys;\n if (!input) {\n throw new Error('readKeys: must pass options object containing `armoredKeys` or `binaryKeys`');\n }\n if (armoredKeys && !util.isString(armoredKeys)) {\n throw new Error('readKeys: options.armoredKeys must be a string');\n }\n if (binaryKeys && !util.isUint8Array(binaryKeys)) {\n throw new Error('readKeys: options.binaryKeys must be a Uint8Array');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (armoredKeys) {\n const { type, data } = await unarmor(armoredKeys, config);\n if (type !== enums.armor.publicKey && type !== enums.armor.privateKey) {\n throw new Error('Armored text not of type key');\n }\n input = data;\n }\n const keys = [];\n const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n const keyIndex = packetlist.indexOfTag(enums.packet.publicKey, enums.packet.secretKey);\n if (keyIndex.length === 0) {\n throw new Error('No key packet found');\n }\n for (let i = 0; i < keyIndex.length; i++) {\n const oneKeyList = packetlist.slice(keyIndex[i], keyIndex[i + 1]);\n const newKey = createKey(oneKeyList);\n keys.push(newKey);\n }\n return keys;\n}\n\n/**\n * Reads an (optionally armored) OpenPGP private key block and returns a list of PrivateKey objects\n * @param {Object} options\n * @param {String} [options.armoredKeys] - Armored keys to be parsed\n * @param {Uint8Array} [options.binaryKeys] - Binary keys to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise>} Key objects.\n * @async\n * @static\n */\nexport async function readPrivateKeys({ armoredKeys, binaryKeys, config }) {\n config = { ...defaultConfig, ...config };\n let input = armoredKeys || binaryKeys;\n if (!input) {\n throw new Error('readPrivateKeys: must pass options object containing `armoredKeys` or `binaryKeys`');\n }\n if (armoredKeys && !util.isString(armoredKeys)) {\n throw new Error('readPrivateKeys: options.armoredKeys must be a string');\n }\n if (binaryKeys && !util.isUint8Array(binaryKeys)) {\n throw new Error('readPrivateKeys: options.binaryKeys must be a Uint8Array');\n }\n if (armoredKeys) {\n const { type, data } = await unarmor(armoredKeys, config);\n if (type !== enums.armor.privateKey) {\n throw new Error('Armored text not of type private key');\n }\n input = data;\n }\n const keys = [];\n const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n const keyIndex = packetlist.indexOfTag(enums.packet.secretKey);\n if (keyIndex.length === 0) {\n throw new Error('No secret key packet found');\n }\n for (let i = 0; i < keyIndex.length; i++) {\n const oneKeyList = packetlist.slice(keyIndex[i], keyIndex[i + 1]);\n const newKey = new PrivateKey(oneKeyList);\n keys.push(newKey);\n }\n return keys;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport { armor, unarmor } from './encoding/armor';\nimport KeyID from './type/keyid';\nimport defaultConfig from './config';\nimport crypto from './crypto';\nimport enums from './enums';\nimport util from './util';\nimport { Signature } from './signature';\nimport { getPreferredHashAlgo, getPreferredAlgo, isAEADSupported, createSignaturePacket } from './key';\nimport {\n PacketList,\n LiteralDataPacket,\n CompressedDataPacket,\n AEADEncryptedDataPacket,\n SymEncryptedIntegrityProtectedDataPacket,\n SymmetricallyEncryptedDataPacket,\n PublicKeyEncryptedSessionKeyPacket,\n SymEncryptedSessionKeyPacket,\n OnePassSignaturePacket,\n SignaturePacket\n} from './packet';\n\n// A Message can contain the following packets\nconst allowedMessagePackets = /*#__PURE__*/ util.constructAllowedPackets([\n LiteralDataPacket,\n CompressedDataPacket,\n AEADEncryptedDataPacket,\n SymEncryptedIntegrityProtectedDataPacket,\n SymmetricallyEncryptedDataPacket,\n PublicKeyEncryptedSessionKeyPacket,\n SymEncryptedSessionKeyPacket,\n OnePassSignaturePacket,\n SignaturePacket\n]);\n// A SKESK packet can contain the following packets\nconst allowedSymSessionKeyPackets = /*#__PURE__*/ util.constructAllowedPackets([SymEncryptedSessionKeyPacket]);\n// A detached signature can contain the following packets\nconst allowedDetachedSignaturePackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\n\n/**\n * Class that represents an OpenPGP message.\n * Can be an encrypted message, signed message, compressed message or literal message\n * See {@link https://tools.ietf.org/html/rfc4880#section-11.3}\n */\nexport class Message {\n /**\n * @param {PacketList} packetlist - The packets that form this message\n */\n constructor(packetlist) {\n this.packets = packetlist || new PacketList();\n }\n\n /**\n * Returns the key IDs of the keys to which the session key is encrypted\n * @returns {Array} Array of keyID objects.\n */\n getEncryptionKeyIDs() {\n const keyIDs = [];\n const pkESKeyPacketlist = this.packets.filterByTag(enums.packet.publicKeyEncryptedSessionKey);\n pkESKeyPacketlist.forEach(function(packet) {\n keyIDs.push(packet.publicKeyID);\n });\n return keyIDs;\n }\n\n /**\n * Returns the key IDs of the keys that signed the message\n * @returns {Array} Array of keyID objects.\n */\n getSigningKeyIDs() {\n const msg = this.unwrapCompressed();\n // search for one pass signatures\n const onePassSigList = msg.packets.filterByTag(enums.packet.onePassSignature);\n if (onePassSigList.length > 0) {\n return onePassSigList.map(packet => packet.issuerKeyID);\n }\n // if nothing found look for signature packets\n const signatureList = msg.packets.filterByTag(enums.packet.signature);\n return signatureList.map(packet => packet.issuerKeyID);\n }\n\n /**\n * Decrypt the message. Either a private key, a session key, or a password must be specified.\n * @param {Array} [decryptionKeys] - Private keys with decrypted secret data\n * @param {Array} [passwords] - Passwords used to decrypt\n * @param {Array} [sessionKeys] - Session keys in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n * @param {Date} [date] - Use the given date for key verification instead of the current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New message with decrypted content.\n * @async\n */\n async decrypt(decryptionKeys, passwords, sessionKeys, date = new Date(), config = defaultConfig) {\n const sessionKeyObjects = sessionKeys || await this.decryptSessionKeys(decryptionKeys, passwords, date, config);\n\n const symEncryptedPacketlist = this.packets.filterByTag(\n enums.packet.symmetricallyEncryptedData,\n enums.packet.symEncryptedIntegrityProtectedData,\n enums.packet.aeadEncryptedData\n );\n\n if (symEncryptedPacketlist.length === 0) {\n throw new Error('No encrypted data found');\n }\n\n const symEncryptedPacket = symEncryptedPacketlist[0];\n let exception = null;\n const decryptedPromise = Promise.all(sessionKeyObjects.map(async ({ algorithm: algorithmName, data }) => {\n if (!util.isUint8Array(data) || !util.isString(algorithmName)) {\n throw new Error('Invalid session key for decryption.');\n }\n\n try {\n const algo = enums.write(enums.symmetric, algorithmName);\n await symEncryptedPacket.decrypt(algo, data, config);\n } catch (e) {\n util.printDebugError(e);\n exception = e;\n }\n }));\n // We don't await stream.cancel here because it only returns when the other copy is canceled too.\n stream.cancel(symEncryptedPacket.encrypted); // Don't keep copy of encrypted data in memory.\n symEncryptedPacket.encrypted = null;\n await decryptedPromise;\n\n if (!symEncryptedPacket.packets || !symEncryptedPacket.packets.length) {\n throw exception || new Error('Decryption failed.');\n }\n\n const resultMsg = new Message(symEncryptedPacket.packets);\n symEncryptedPacket.packets = new PacketList(); // remove packets after decryption\n\n return resultMsg;\n }\n\n /**\n * Decrypt encrypted session keys either with private keys or passwords.\n * @param {Array} [decryptionKeys] - Private keys with decrypted secret data\n * @param {Array} [passwords] - Passwords used to decrypt\n * @param {Date} [date] - Use the given date for key verification, instead of current time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise>} array of object with potential sessionKey, algorithm pairs\n * @async\n */\n async decryptSessionKeys(decryptionKeys, passwords, date = new Date(), config = defaultConfig) {\n let decryptedSessionKeyPackets = [];\n\n let exception;\n if (passwords) {\n const skeskPackets = this.packets.filterByTag(enums.packet.symEncryptedSessionKey);\n if (skeskPackets.length === 0) {\n throw new Error('No symmetrically encrypted session key packet found.');\n }\n await Promise.all(passwords.map(async function(password, i) {\n let packets;\n if (i) {\n packets = await PacketList.fromBinary(skeskPackets.write(), allowedSymSessionKeyPackets, config);\n } else {\n packets = skeskPackets;\n }\n await Promise.all(packets.map(async function(skeskPacket) {\n try {\n await skeskPacket.decrypt(password);\n decryptedSessionKeyPackets.push(skeskPacket);\n } catch (err) {\n util.printDebugError(err);\n }\n }));\n }));\n } else if (decryptionKeys) {\n const pkeskPackets = this.packets.filterByTag(enums.packet.publicKeyEncryptedSessionKey);\n if (pkeskPackets.length === 0) {\n throw new Error('No public key encrypted session key packet found.');\n }\n await Promise.all(pkeskPackets.map(async function(pkeskPacket) {\n await Promise.all(decryptionKeys.map(async function(decryptionKey) {\n let algos = [\n enums.symmetric.aes256, // Old OpenPGP.js default fallback\n enums.symmetric.aes128, // RFC4880bis fallback\n enums.symmetric.tripledes, // RFC4880 fallback\n enums.symmetric.cast5 // Golang OpenPGP fallback\n ];\n try {\n const primaryUser = await decryptionKey.getPrimaryUser(date, undefined, config); // TODO: Pass userID from somewhere.\n if (primaryUser.selfCertification.preferredSymmetricAlgorithms) {\n algos = algos.concat(primaryUser.selfCertification.preferredSymmetricAlgorithms);\n }\n } catch (e) {}\n\n // do not check key expiration to allow decryption of old messages\n const decryptionKeyPackets = (await decryptionKey.getDecryptionKeys(pkeskPacket.publicKeyID, null, undefined, config)).map(key => key.keyPacket);\n await Promise.all(decryptionKeyPackets.map(async function(decryptionKeyPacket) {\n if (!decryptionKeyPacket || decryptionKeyPacket.isDummy()) {\n return;\n }\n if (!decryptionKeyPacket.isDecrypted()) {\n throw new Error('Decryption key is not decrypted.');\n }\n\n // To hinder CCA attacks against PKCS1, we carry out a constant-time decryption flow if the `constantTimePKCS1Decryption` config option is set.\n const doConstantTimeDecryption = config.constantTimePKCS1Decryption && (\n pkeskPacket.publicKeyAlgorithm === enums.publicKey.rsaEncrypt ||\n pkeskPacket.publicKeyAlgorithm === enums.publicKey.rsaEncryptSign ||\n pkeskPacket.publicKeyAlgorithm === enums.publicKey.rsaSign ||\n pkeskPacket.publicKeyAlgorithm === enums.publicKey.elgamal\n );\n\n if (doConstantTimeDecryption) {\n // The goal is to not reveal whether PKESK decryption (specifically the PKCS1 decoding step) failed, hence, we always proceed to decrypt the message,\n // either with the successfully decrypted session key, or with a randomly generated one.\n // Since the SEIP/AEAD's symmetric algorithm and key size are stored in the encrypted portion of the PKESK, and the execution flow cannot depend on\n // the decrypted payload, we always assume the message to be encrypted with one of the symmetric algorithms specified in `config.constantTimePKCS1DecryptionSupportedSymmetricAlgorithms`:\n // - If the PKESK decryption succeeds, and the session key cipher is in the supported set, then we try to decrypt the data with the decrypted session key as well as with the\n // randomly generated keys of the remaining key types.\n // - If the PKESK decryptions fails, or if it succeeds but support for the cipher is not enabled, then we discard the session key and try to decrypt the data using only the randomly\n // generated session keys.\n // NB: as a result, if the data is encrypted with a non-suported cipher, decryption will always fail.\n\n const serialisedPKESK = pkeskPacket.write(); // make copies to be able to decrypt the PKESK packet multiple times\n await Promise.all(Array.from(config.constantTimePKCS1DecryptionSupportedSymmetricAlgorithms).map(async sessionKeyAlgorithm => {\n const pkeskPacketCopy = new PublicKeyEncryptedSessionKeyPacket();\n pkeskPacketCopy.read(serialisedPKESK);\n const randomSessionKey = {\n sessionKeyAlgorithm,\n sessionKey: crypto.generateSessionKey(sessionKeyAlgorithm)\n };\n try {\n await pkeskPacketCopy.decrypt(decryptionKeyPacket, randomSessionKey);\n decryptedSessionKeyPackets.push(pkeskPacketCopy);\n } catch (err) {\n // `decrypt` can still throw some non-security-sensitive errors\n util.printDebugError(err);\n exception = err;\n }\n }));\n\n } else {\n try {\n await pkeskPacket.decrypt(decryptionKeyPacket);\n if (!algos.includes(enums.write(enums.symmetric, pkeskPacket.sessionKeyAlgorithm))) {\n throw new Error('A non-preferred symmetric algorithm was used.');\n }\n decryptedSessionKeyPackets.push(pkeskPacket);\n } catch (err) {\n util.printDebugError(err);\n exception = err;\n }\n }\n }));\n }));\n stream.cancel(pkeskPacket.encrypted); // Don't keep copy of encrypted data in memory.\n pkeskPacket.encrypted = null;\n }));\n } else {\n throw new Error('No key or password specified.');\n }\n\n if (decryptedSessionKeyPackets.length > 0) {\n // Return only unique session keys\n if (decryptedSessionKeyPackets.length > 1) {\n const seen = new Set();\n decryptedSessionKeyPackets = decryptedSessionKeyPackets.filter(item => {\n const k = item.sessionKeyAlgorithm + util.uint8ArrayToString(item.sessionKey);\n if (seen.has(k)) {\n return false;\n }\n seen.add(k);\n return true;\n });\n }\n\n return decryptedSessionKeyPackets.map(packet => ({\n data: packet.sessionKey,\n algorithm: enums.read(enums.symmetric, packet.sessionKeyAlgorithm)\n }));\n }\n throw exception || new Error('Session key decryption failed.');\n }\n\n /**\n * Get literal data that is the body of the message\n * @returns {(Uint8Array|null)} Literal body of the message as Uint8Array.\n */\n getLiteralData() {\n const msg = this.unwrapCompressed();\n const literal = msg.packets.findPacket(enums.packet.literalData);\n return (literal && literal.getBytes()) || null;\n }\n\n /**\n * Get filename from literal data packet\n * @returns {(String|null)} Filename of literal data packet as string.\n */\n getFilename() {\n const msg = this.unwrapCompressed();\n const literal = msg.packets.findPacket(enums.packet.literalData);\n return (literal && literal.getFilename()) || null;\n }\n\n /**\n * Get literal data as text\n * @returns {(String|null)} Literal body of the message interpreted as text.\n */\n getText() {\n const msg = this.unwrapCompressed();\n const literal = msg.packets.findPacket(enums.packet.literalData);\n if (literal) {\n return literal.getText();\n }\n return null;\n }\n\n /**\n * Generate a new session key object, taking the algorithm preferences of the passed encryption keys into account, if any.\n * @param {Array} [encryptionKeys] - Public key(s) to select algorithm preferences for\n * @param {Date} [date] - Date to select algorithm preferences at\n * @param {Array} [userIDs] - User IDs to select algorithm preferences for\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise<{ data: Uint8Array, algorithm: String, aeadAlgorithm: undefined|String }>} Object with session key data and algorithms.\n * @async\n */\n static async generateSessionKey(encryptionKeys = [], date = new Date(), userIDs = [], config = defaultConfig) {\n const algo = await getPreferredAlgo('symmetric', encryptionKeys, date, userIDs, config);\n const algorithmName = enums.read(enums.symmetric, algo);\n const aeadAlgorithmName = config.aeadProtect && await isAEADSupported(encryptionKeys, date, userIDs, config) ?\n enums.read(enums.aead, await getPreferredAlgo('aead', encryptionKeys, date, userIDs, config)) :\n undefined;\n\n await Promise.all(encryptionKeys.map(key => key.getEncryptionKey()\n .catch(() => null) // ignore key strength requirements\n .then(maybeKey => {\n if (maybeKey && (maybeKey.keyPacket.algorithm === enums.publicKey.x25519) && !util.isAES(algo)) {\n throw new Error('Could not generate a session key compatible with the given `encryptionKeys`: X22519 keys can only be used to encrypt AES session keys; change `config.preferredSymmetricAlgorithm` accordingly.');\n }\n })\n ));\n\n const sessionKeyData = crypto.generateSessionKey(algo);\n return { data: sessionKeyData, algorithm: algorithmName, aeadAlgorithm: aeadAlgorithmName };\n }\n\n /**\n * Encrypt the message either with public keys, passwords, or both at once.\n * @param {Array} [encryptionKeys] - Public key(s) for message encryption\n * @param {Array} [passwords] - Password(s) for message encryption\n * @param {Object} [sessionKey] - Session key in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n * @param {Boolean} [wildcard] - Use a key ID of 0 instead of the public key IDs\n * @param {Array} [encryptionKeyIDs] - Array of key IDs to use for encryption. Each encryptionKeyIDs[i] corresponds to keys[i]\n * @param {Date} [date] - Override the creation date of the literal package\n * @param {Array} [userIDs] - User IDs to encrypt for, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }]\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New message with encrypted content.\n * @async\n */\n async encrypt(encryptionKeys, passwords, sessionKey, wildcard = false, encryptionKeyIDs = [], date = new Date(), userIDs = [], config = defaultConfig) {\n if (sessionKey) {\n if (!util.isUint8Array(sessionKey.data) || !util.isString(sessionKey.algorithm)) {\n throw new Error('Invalid session key for encryption.');\n }\n } else if (encryptionKeys && encryptionKeys.length) {\n sessionKey = await Message.generateSessionKey(encryptionKeys, date, userIDs, config);\n } else if (passwords && passwords.length) {\n sessionKey = await Message.generateSessionKey(undefined, undefined, undefined, config);\n } else {\n throw new Error('No keys, passwords, or session key provided.');\n }\n\n const { data: sessionKeyData, algorithm: algorithmName, aeadAlgorithm: aeadAlgorithmName } = sessionKey;\n\n const msg = await Message.encryptSessionKey(sessionKeyData, algorithmName, aeadAlgorithmName, encryptionKeys, passwords, wildcard, encryptionKeyIDs, date, userIDs, config);\n\n let symEncryptedPacket;\n if (aeadAlgorithmName) {\n symEncryptedPacket = new AEADEncryptedDataPacket();\n symEncryptedPacket.aeadAlgorithm = enums.write(enums.aead, aeadAlgorithmName);\n } else {\n symEncryptedPacket = new SymEncryptedIntegrityProtectedDataPacket();\n }\n symEncryptedPacket.packets = this.packets;\n\n const algorithm = enums.write(enums.symmetric, algorithmName);\n await symEncryptedPacket.encrypt(algorithm, sessionKeyData, config);\n\n msg.packets.push(symEncryptedPacket);\n symEncryptedPacket.packets = new PacketList(); // remove packets after encryption\n return msg;\n }\n\n /**\n * Encrypt a session key either with public keys, passwords, or both at once.\n * @param {Uint8Array} sessionKey - session key for encryption\n * @param {String} algorithmName - session key algorithm\n * @param {String} [aeadAlgorithmName] - AEAD algorithm, e.g. 'eax' or 'ocb'\n * @param {Array} [encryptionKeys] - Public key(s) for message encryption\n * @param {Array} [passwords] - For message encryption\n * @param {Boolean} [wildcard] - Use a key ID of 0 instead of the public key IDs\n * @param {Array} [encryptionKeyIDs] - Array of key IDs to use for encryption. Each encryptionKeyIDs[i] corresponds to encryptionKeys[i]\n * @param {Date} [date] - Override the date\n * @param {Array} [userIDs] - User IDs to encrypt for, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }]\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New message with encrypted content.\n * @async\n */\n static async encryptSessionKey(sessionKey, algorithmName, aeadAlgorithmName, encryptionKeys, passwords, wildcard = false, encryptionKeyIDs = [], date = new Date(), userIDs = [], config = defaultConfig) {\n const packetlist = new PacketList();\n const algorithm = enums.write(enums.symmetric, algorithmName);\n const aeadAlgorithm = aeadAlgorithmName && enums.write(enums.aead, aeadAlgorithmName);\n\n if (encryptionKeys) {\n const results = await Promise.all(encryptionKeys.map(async function(primaryKey, i) {\n const encryptionKey = await primaryKey.getEncryptionKey(encryptionKeyIDs[i], date, userIDs, config);\n const pkESKeyPacket = new PublicKeyEncryptedSessionKeyPacket();\n pkESKeyPacket.publicKeyID = wildcard ? KeyID.wildcard() : encryptionKey.getKeyID();\n pkESKeyPacket.publicKeyAlgorithm = encryptionKey.keyPacket.algorithm;\n pkESKeyPacket.sessionKey = sessionKey;\n pkESKeyPacket.sessionKeyAlgorithm = algorithm;\n await pkESKeyPacket.encrypt(encryptionKey.keyPacket);\n delete pkESKeyPacket.sessionKey; // delete plaintext session key after encryption\n return pkESKeyPacket;\n }));\n packetlist.push(...results);\n }\n if (passwords) {\n const testDecrypt = async function(keyPacket, password) {\n try {\n await keyPacket.decrypt(password);\n return 1;\n } catch (e) {\n return 0;\n }\n };\n\n const sum = (accumulator, currentValue) => accumulator + currentValue;\n\n const encryptPassword = async function(sessionKey, algorithm, aeadAlgorithm, password) {\n const symEncryptedSessionKeyPacket = new SymEncryptedSessionKeyPacket(config);\n symEncryptedSessionKeyPacket.sessionKey = sessionKey;\n symEncryptedSessionKeyPacket.sessionKeyAlgorithm = algorithm;\n if (aeadAlgorithm) {\n symEncryptedSessionKeyPacket.aeadAlgorithm = aeadAlgorithm;\n }\n await symEncryptedSessionKeyPacket.encrypt(password, config);\n\n if (config.passwordCollisionCheck) {\n const results = await Promise.all(passwords.map(pwd => testDecrypt(symEncryptedSessionKeyPacket, pwd)));\n if (results.reduce(sum) !== 1) {\n return encryptPassword(sessionKey, algorithm, password);\n }\n }\n\n delete symEncryptedSessionKeyPacket.sessionKey; // delete plaintext session key after encryption\n return symEncryptedSessionKeyPacket;\n };\n\n const results = await Promise.all(passwords.map(pwd => encryptPassword(sessionKey, algorithm, aeadAlgorithm, pwd)));\n packetlist.push(...results);\n }\n\n return new Message(packetlist);\n }\n\n /**\n * Sign the message (the literal data packet of the message)\n * @param {Array} signingKeys - private keys with decrypted secret key data for signing\n * @param {Signature} [signature] - Any existing detached signature to add to the message\n * @param {Array} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n * @param {Date} [date] - Override the creation time of the signature\n * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New message with signed content.\n * @async\n */\n async sign(signingKeys = [], signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], config = defaultConfig) {\n const packetlist = new PacketList();\n\n const literalDataPacket = this.packets.findPacket(enums.packet.literalData);\n if (!literalDataPacket) {\n throw new Error('No literal data packet to sign.');\n }\n\n let i;\n let existingSigPacketlist;\n // If data packet was created from Uint8Array, use binary, otherwise use text\n const signatureType = literalDataPacket.text === null ?\n enums.signature.binary : enums.signature.text;\n\n if (signature) {\n existingSigPacketlist = signature.packets.filterByTag(enums.packet.signature);\n for (i = existingSigPacketlist.length - 1; i >= 0; i--) {\n const signaturePacket = existingSigPacketlist[i];\n const onePassSig = new OnePassSignaturePacket();\n onePassSig.signatureType = signaturePacket.signatureType;\n onePassSig.hashAlgorithm = signaturePacket.hashAlgorithm;\n onePassSig.publicKeyAlgorithm = signaturePacket.publicKeyAlgorithm;\n onePassSig.issuerKeyID = signaturePacket.issuerKeyID;\n if (!signingKeys.length && i === 0) {\n onePassSig.flags = 1;\n }\n packetlist.push(onePassSig);\n }\n }\n\n await Promise.all(Array.from(signingKeys).reverse().map(async function (primaryKey, i) {\n if (!primaryKey.isPrivate()) {\n throw new Error('Need private key for signing');\n }\n const signingKeyID = signingKeyIDs[signingKeys.length - 1 - i];\n const signingKey = await primaryKey.getSigningKey(signingKeyID, date, userIDs, config);\n const onePassSig = new OnePassSignaturePacket();\n onePassSig.signatureType = signatureType;\n onePassSig.hashAlgorithm = await getPreferredHashAlgo(primaryKey, signingKey.keyPacket, date, userIDs, config);\n onePassSig.publicKeyAlgorithm = signingKey.keyPacket.algorithm;\n onePassSig.issuerKeyID = signingKey.getKeyID();\n if (i === signingKeys.length - 1) {\n onePassSig.flags = 1;\n }\n return onePassSig;\n })).then(onePassSignatureList => {\n onePassSignatureList.forEach(onePassSig => packetlist.push(onePassSig));\n });\n\n packetlist.push(literalDataPacket);\n packetlist.push(...(await createSignaturePackets(literalDataPacket, signingKeys, signature, signingKeyIDs, date, userIDs, notations, false, config)));\n\n return new Message(packetlist);\n }\n\n /**\n * Compresses the message (the literal and -if signed- signature data packets of the message)\n * @param {module:enums.compression} algo - compression algorithm\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Message} New message with compressed content.\n */\n compress(algo, config = defaultConfig) {\n if (algo === enums.compression.uncompressed) {\n return this;\n }\n\n const compressed = new CompressedDataPacket(config);\n compressed.algorithm = algo;\n compressed.packets = this.packets;\n\n const packetList = new PacketList();\n packetList.push(compressed);\n\n return new Message(packetList);\n }\n\n /**\n * Create a detached signature for the message (the literal data packet of the message)\n * @param {Array} signingKeys - private keys with decrypted secret key data for signing\n * @param {Signature} [signature] - Any existing detached signature\n * @param {Array} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n * @param {Date} [date] - Override the creation time of the signature\n * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New detached signature of message content.\n * @async\n */\n async signDetached(signingKeys = [], signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], config = defaultConfig) {\n const literalDataPacket = this.packets.findPacket(enums.packet.literalData);\n if (!literalDataPacket) {\n throw new Error('No literal data packet to sign.');\n }\n return new Signature(await createSignaturePackets(literalDataPacket, signingKeys, signature, signingKeyIDs, date, userIDs, notations, true, config));\n }\n\n /**\n * Verify message signatures\n * @param {Array} verificationKeys - Array of public keys to verify signatures\n * @param {Date} [date] - Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise,\n * verified: Promise\n * }>>} List of signer's keyID and validity of signatures.\n * @async\n */\n async verify(verificationKeys, date = new Date(), config = defaultConfig) {\n const msg = this.unwrapCompressed();\n const literalDataList = msg.packets.filterByTag(enums.packet.literalData);\n if (literalDataList.length !== 1) {\n throw new Error('Can only verify message with one literal data packet.');\n }\n if (stream.isArrayStream(msg.packets.stream)) {\n msg.packets.push(...await stream.readToEnd(msg.packets.stream, _ => _ || []));\n }\n const onePassSigList = msg.packets.filterByTag(enums.packet.onePassSignature).reverse();\n const signatureList = msg.packets.filterByTag(enums.packet.signature);\n if (onePassSigList.length && !signatureList.length && util.isStream(msg.packets.stream) && !stream.isArrayStream(msg.packets.stream)) {\n await Promise.all(onePassSigList.map(async onePassSig => {\n onePassSig.correspondingSig = new Promise((resolve, reject) => {\n onePassSig.correspondingSigResolve = resolve;\n onePassSig.correspondingSigReject = reject;\n });\n onePassSig.signatureData = stream.fromAsync(async () => (await onePassSig.correspondingSig).signatureData);\n onePassSig.hashed = stream.readToEnd(await onePassSig.hash(onePassSig.signatureType, literalDataList[0], undefined, false));\n onePassSig.hashed.catch(() => {});\n }));\n msg.packets.stream = stream.transformPair(msg.packets.stream, async (readable, writable) => {\n const reader = stream.getReader(readable);\n const writer = stream.getWriter(writable);\n try {\n for (let i = 0; i < onePassSigList.length; i++) {\n const { value: signature } = await reader.read();\n onePassSigList[i].correspondingSigResolve(signature);\n }\n await reader.readToEnd();\n await writer.ready;\n await writer.close();\n } catch (e) {\n onePassSigList.forEach(onePassSig => {\n onePassSig.correspondingSigReject(e);\n });\n await writer.abort(e);\n }\n });\n return createVerificationObjects(onePassSigList, literalDataList, verificationKeys, date, false, config);\n }\n return createVerificationObjects(signatureList, literalDataList, verificationKeys, date, false, config);\n }\n\n /**\n * Verify detached message signature\n * @param {Array} verificationKeys - Array of public keys to verify signatures\n * @param {Signature} signature\n * @param {Date} date - Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise,\n * verified: Promise\n * }>>} List of signer's keyID and validity of signature.\n * @async\n */\n verifyDetached(signature, verificationKeys, date = new Date(), config = defaultConfig) {\n const msg = this.unwrapCompressed();\n const literalDataList = msg.packets.filterByTag(enums.packet.literalData);\n if (literalDataList.length !== 1) {\n throw new Error('Can only verify message with one literal data packet.');\n }\n const signatureList = signature.packets.filterByTag(enums.packet.signature); // drop UnparsablePackets\n return createVerificationObjects(signatureList, literalDataList, verificationKeys, date, true, config);\n }\n\n /**\n * Unwrap compressed message\n * @returns {Message} Message Content of compressed message.\n */\n unwrapCompressed() {\n const compressed = this.packets.filterByTag(enums.packet.compressedData);\n if (compressed.length) {\n return new Message(compressed[0].packets);\n }\n return this;\n }\n\n /**\n * Append signature to unencrypted message object\n * @param {String|Uint8Array} detachedSignature - The detached ASCII-armored or Uint8Array PGP signature\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n */\n async appendSignature(detachedSignature, config = defaultConfig) {\n await this.packets.read(\n util.isUint8Array(detachedSignature) ? detachedSignature : (await unarmor(detachedSignature)).data,\n allowedDetachedSignaturePackets,\n config\n );\n }\n\n /**\n * Returns binary encoded message\n * @returns {ReadableStream} Binary message.\n */\n write() {\n return this.packets.write();\n }\n\n /**\n * Returns ASCII armored text of message\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {ReadableStream} ASCII armor.\n */\n armor(config = defaultConfig) {\n return armor(enums.armor.message, this.write(), null, null, null, config);\n }\n}\n\n/**\n * Create signature packets for the message\n * @param {LiteralDataPacket} literalDataPacket - the literal data packet to sign\n * @param {Array} [signingKeys] - private keys with decrypted secret key data for signing\n * @param {Signature} [signature] - Any existing detached signature to append\n * @param {Array} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n * @param {Date} [date] - Override the creationtime of the signature\n * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n * @param {Boolean} [detached] - Whether to create detached signature packets\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} List of signature packets.\n * @async\n * @private\n */\nexport async function createSignaturePackets(literalDataPacket, signingKeys, signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], detached = false, config = defaultConfig) {\n const packetlist = new PacketList();\n\n // If data packet was created from Uint8Array, use binary, otherwise use text\n const signatureType = literalDataPacket.text === null ?\n enums.signature.binary : enums.signature.text;\n\n await Promise.all(signingKeys.map(async (primaryKey, i) => {\n const userID = userIDs[i];\n if (!primaryKey.isPrivate()) {\n throw new Error('Need private key for signing');\n }\n const signingKey = await primaryKey.getSigningKey(signingKeyIDs[i], date, userID, config);\n return createSignaturePacket(literalDataPacket, primaryKey, signingKey.keyPacket, { signatureType }, date, userID, notations, detached, config);\n })).then(signatureList => {\n packetlist.push(...signatureList);\n });\n\n if (signature) {\n const existingSigPacketlist = signature.packets.filterByTag(enums.packet.signature);\n packetlist.push(...existingSigPacketlist);\n }\n return packetlist;\n}\n\n/**\n * Create object containing signer's keyID and validity of signature\n * @param {SignaturePacket} signature - Signature packet\n * @param {Array} literalDataList - Array of literal data packets\n * @param {Array} verificationKeys - Array of public keys to verify signatures\n * @param {Date} [date] - Check signature validity with respect to the given date\n * @param {Boolean} [detached] - Whether to verify detached signature packets\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise<{\n * keyID: module:type/keyid~KeyID,\n * signature: Promise,\n * verified: Promise\n * }>} signer's keyID and validity of signature\n * @async\n * @private\n */\nasync function createVerificationObject(signature, literalDataList, verificationKeys, date = new Date(), detached = false, config = defaultConfig) {\n let primaryKey;\n let unverifiedSigningKey;\n\n for (const key of verificationKeys) {\n const issuerKeys = key.getKeys(signature.issuerKeyID);\n if (issuerKeys.length > 0) {\n primaryKey = key;\n unverifiedSigningKey = issuerKeys[0];\n break;\n }\n }\n\n const isOnePassSignature = signature instanceof OnePassSignaturePacket;\n const signaturePacketPromise = isOnePassSignature ? signature.correspondingSig : signature;\n\n const verifiedSig = {\n keyID: signature.issuerKeyID,\n verified: (async () => {\n if (!unverifiedSigningKey) {\n throw new Error(`Could not find signing key with key ID ${signature.issuerKeyID.toHex()}`);\n }\n\n await signature.verify(unverifiedSigningKey.keyPacket, signature.signatureType, literalDataList[0], date, detached, config);\n const signaturePacket = await signaturePacketPromise;\n if (unverifiedSigningKey.getCreationTime() > signaturePacket.created) {\n throw new Error('Key is newer than the signature');\n }\n // We pass the signature creation time to check whether the key was expired at the time of signing.\n // We check this after signature verification because for streamed one-pass signatures, the creation time is not available before\n try {\n await primaryKey.getSigningKey(unverifiedSigningKey.getKeyID(), signaturePacket.created, undefined, config);\n } catch (e) {\n // If a key was reformatted then the self-signatures of the signing key might be in the future compared to the message signature,\n // making the key invalid at the time of signing.\n // However, if the key is valid at the given `date`, we still allow using it provided the relevant `config` setting is enabled.\n // Note: we do not support the edge case of a key that was reformatted and it has expired.\n if (config.allowInsecureVerificationWithReformattedKeys && e.message.match(/Signature creation time is in the future/)) {\n await primaryKey.getSigningKey(unverifiedSigningKey.getKeyID(), date, undefined, config);\n } else {\n throw e;\n }\n }\n return true;\n })(),\n signature: (async () => {\n const signaturePacket = await signaturePacketPromise;\n const packetlist = new PacketList();\n signaturePacket && packetlist.push(signaturePacket);\n return new Signature(packetlist);\n })()\n };\n\n // Mark potential promise rejections as \"handled\". This is needed because in\n // some cases, we reject them before the user has a reasonable chance to\n // handle them (e.g. `await readToEnd(result.data); await result.verified` and\n // the data stream errors).\n verifiedSig.signature.catch(() => {});\n verifiedSig.verified.catch(() => {});\n\n return verifiedSig;\n}\n\n/**\n * Create list of objects containing signer's keyID and validity of signature\n * @param {Array} signatureList - Array of signature packets\n * @param {Array} literalDataList - Array of literal data packets\n * @param {Array} verificationKeys - Array of public keys to verify signatures\n * @param {Date} date - Verify the signature against the given date,\n * i.e. check signature creation time < date < expiration time\n * @param {Boolean} [detached] - Whether to verify detached signature packets\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise,\n * verified: Promise\n * }>>} list of signer's keyID and validity of signatures (one entry per signature packet in input)\n * @async\n * @private\n */\nexport async function createVerificationObjects(signatureList, literalDataList, verificationKeys, date = new Date(), detached = false, config = defaultConfig) {\n return Promise.all(signatureList.filter(function(signature) {\n return ['text', 'binary'].includes(enums.read(enums.signature, signature.signatureType));\n }).map(async function(signature) {\n return createVerificationObject(signature, literalDataList, verificationKeys, date, detached, config);\n }));\n}\n\n/**\n * Reads an (optionally armored) OpenPGP message and returns a Message object\n * @param {Object} options\n * @param {String | ReadableStream} [options.armoredMessage] - Armored message to be parsed\n * @param {Uint8Array | ReadableStream} [options.binaryMessage] - Binary to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} New message object.\n * @async\n * @static\n */\nexport async function readMessage({ armoredMessage, binaryMessage, config, ...rest }) {\n config = { ...defaultConfig, ...config };\n let input = armoredMessage || binaryMessage;\n if (!input) {\n throw new Error('readMessage: must pass options object containing `armoredMessage` or `binaryMessage`');\n }\n if (armoredMessage && !util.isString(armoredMessage) && !util.isStream(armoredMessage)) {\n throw new Error('readMessage: options.armoredMessage must be a string or stream');\n }\n if (binaryMessage && !util.isUint8Array(binaryMessage) && !util.isStream(binaryMessage)) {\n throw new Error('readMessage: options.binaryMessage must be a Uint8Array or stream');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n const streamType = util.isStream(input);\n if (streamType) {\n await stream.loadStreamsPonyfill();\n input = stream.toStream(input);\n }\n if (armoredMessage) {\n const { type, data } = await unarmor(input, config);\n if (type !== enums.armor.message) {\n throw new Error('Armored text not of type message');\n }\n input = data;\n }\n const packetlist = await PacketList.fromBinary(input, allowedMessagePackets, config);\n const message = new Message(packetlist);\n message.fromStream = streamType;\n return message;\n}\n\n/**\n * Creates new message object from text or binary data.\n * @param {Object} options\n * @param {String | ReadableStream} [options.text] - The text message contents\n * @param {Uint8Array | ReadableStream} [options.binary] - The binary message contents\n * @param {String} [options.filename=\"\"] - Name of the file (if any)\n * @param {Date} [options.date=current date] - Date of the message, or modification date of the file\n * @param {'utf8'|'binary'|'text'|'mime'} [options.format='utf8' if text is passed, 'binary' otherwise] - Data packet type\n * @returns {Promise} New message object.\n * @async\n * @static\n */\nexport async function createMessage({ text, binary, filename, date = new Date(), format = text !== undefined ? 'utf8' : 'binary', ...rest }) {\n let input = text !== undefined ? text : binary;\n if (input === undefined) {\n throw new Error('createMessage: must pass options object containing `text` or `binary`');\n }\n if (text && !util.isString(text) && !util.isStream(text)) {\n throw new Error('createMessage: options.text must be a string or stream');\n }\n if (binary && !util.isUint8Array(binary) && !util.isStream(binary)) {\n throw new Error('createMessage: options.binary must be a Uint8Array or stream');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n const streamType = util.isStream(input);\n if (streamType) {\n await stream.loadStreamsPonyfill();\n input = stream.toStream(input);\n }\n const literalDataPacket = new LiteralDataPacket(date);\n if (text !== undefined) {\n literalDataPacket.setText(input, enums.write(enums.literal, format));\n } else {\n literalDataPacket.setBytes(input, enums.write(enums.literal, format));\n }\n if (filename !== undefined) {\n literalDataPacket.setFilename(filename);\n }\n const literalDataPacketlist = new PacketList();\n literalDataPacketlist.push(literalDataPacket);\n const message = new Message(literalDataPacketlist);\n message.fromStream = streamType;\n return message;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport { armor, unarmor } from './encoding/armor';\nimport enums from './enums';\nimport util from './util';\nimport { PacketList, LiteralDataPacket, SignaturePacket } from './packet';\nimport { Signature } from './signature';\nimport { createVerificationObjects, createSignaturePackets } from './message';\nimport defaultConfig from './config';\n\n// A Cleartext message can contain the following packets\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\n\n/**\n * Class that represents an OpenPGP cleartext signed message.\n * See {@link https://tools.ietf.org/html/rfc4880#section-7}\n */\nexport class CleartextMessage {\n /**\n * @param {String} text - The cleartext of the signed message\n * @param {Signature} signature - The detached signature or an empty signature for unsigned messages\n */\n constructor(text, signature) {\n // remove trailing whitespace and normalize EOL to canonical form \n this.text = util.removeTrailingSpaces(text).replace(/\\r?\\n/g, '\\r\\n');\n if (signature && !(signature instanceof Signature)) {\n throw new Error('Invalid signature input');\n }\n this.signature = signature || new Signature(new PacketList());\n }\n\n /**\n * Returns the key IDs of the keys that signed the cleartext message\n * @returns {Array} Array of keyID objects.\n */\n getSigningKeyIDs() {\n const keyIDs = [];\n const signatureList = this.signature.packets;\n signatureList.forEach(function(packet) {\n keyIDs.push(packet.issuerKeyID);\n });\n return keyIDs;\n }\n\n /**\n * Sign the cleartext message\n * @param {Array} privateKeys - private keys with decrypted secret key data for signing\n * @param {Signature} [signature] - Any existing detached signature\n * @param {Array} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to privateKeys[i]\n * @param {Date} [date] - The creation time of the signature that should be created\n * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise} New cleartext message with signed content.\n * @async\n */\n async sign(privateKeys, signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], config = defaultConfig) {\n const literalDataPacket = new LiteralDataPacket();\n literalDataPacket.setText(this.text);\n const newSignature = new Signature(await createSignaturePackets(literalDataPacket, privateKeys, signature, signingKeyIDs, date, userIDs, notations, true, config));\n return new CleartextMessage(this.text, newSignature);\n }\n\n /**\n * Verify signatures of cleartext signed message\n * @param {Array} keys - Array of keys to verify signatures\n * @param {Date} [date] - Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise,\n * verified: Promise\n * }>>} List of signer's keyID and validity of signature.\n * @async\n */\n verify(keys, date = new Date(), config = defaultConfig) {\n const signatureList = this.signature.packets.filterByTag(enums.packet.signature); // drop UnparsablePackets\n const literalDataPacket = new LiteralDataPacket();\n // we assume that cleartext signature is generated based on UTF8 cleartext\n literalDataPacket.setText(this.text);\n return createVerificationObjects(signatureList, [literalDataPacket], keys, date, true, config);\n }\n\n /**\n * Get cleartext\n * @returns {String} Cleartext of message.\n */\n getText() {\n // normalize end of line to \\n\n return this.text.replace(/\\r\\n/g, '\\n');\n }\n\n /**\n * Returns ASCII armored text of cleartext signed message\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {String | ReadableStream} ASCII armor.\n */\n armor(config = defaultConfig) {\n let hashes = this.signature.packets.map(function(packet) {\n return enums.read(enums.hash, packet.hashAlgorithm).toUpperCase();\n });\n hashes = hashes.filter(function(item, i, ar) { return ar.indexOf(item) === i; });\n const body = {\n hash: hashes.join(),\n text: this.text,\n data: this.signature.packets.write()\n };\n return armor(enums.armor.signed, body, undefined, undefined, undefined, config);\n }\n}\n\n/**\n * Reads an OpenPGP cleartext signed message and returns a CleartextMessage object\n * @param {Object} options\n * @param {String} options.cleartextMessage - Text to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} New cleartext message object.\n * @async\n * @static\n */\nexport async function readCleartextMessage({ cleartextMessage, config, ...rest }) {\n config = { ...defaultConfig, ...config };\n if (!cleartextMessage) {\n throw new Error('readCleartextMessage: must pass options object containing `cleartextMessage`');\n }\n if (!util.isString(cleartextMessage)) {\n throw new Error('readCleartextMessage: options.cleartextMessage must be a string');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n const input = await unarmor(cleartextMessage);\n if (input.type !== enums.armor.signed) {\n throw new Error('No cleartext signed message.');\n }\n const packetlist = await PacketList.fromBinary(input.data, allowedPackets, config);\n verifyHeaders(input.headers, packetlist);\n const signature = new Signature(packetlist);\n return new CleartextMessage(input.text, signature);\n}\n\n/**\n * Compare hash algorithm specified in the armor header with signatures\n * @param {Array} headers - Armor headers\n * @param {PacketList} packetlist - The packetlist with signature packets\n * @private\n */\nfunction verifyHeaders(headers, packetlist) {\n const checkHashAlgos = function(hashAlgos) {\n const check = packet => algo => packet.hashAlgorithm === algo;\n\n for (let i = 0; i < packetlist.length; i++) {\n if (packetlist[i].constructor.tag === enums.packet.signature && !hashAlgos.some(check(packetlist[i]))) {\n return false;\n }\n }\n return true;\n };\n\n let oneHeader = null;\n let hashAlgos = [];\n headers.forEach(function(header) {\n oneHeader = header.match(/^Hash: (.+)$/); // get header value\n if (oneHeader) {\n oneHeader = oneHeader[1].replace(/\\s/g, ''); // remove whitespace\n oneHeader = oneHeader.split(',');\n oneHeader = oneHeader.map(function(hash) {\n hash = hash.toLowerCase();\n try {\n return enums.write(enums.hash, hash);\n } catch (e) {\n throw new Error('Unknown hash algorithm in armor header: ' + hash);\n }\n });\n hashAlgos = hashAlgos.concat(oneHeader);\n } else {\n throw new Error('Only \"Hash\" header allowed in cleartext signed message');\n }\n });\n\n if (!hashAlgos.length && !checkHashAlgos([enums.hash.md5])) {\n throw new Error('If no \"Hash\" header in cleartext signed message, then only MD5 signatures allowed');\n } else if (hashAlgos.length && !checkHashAlgos(hashAlgos)) {\n throw new Error('Hash algorithm mismatch in armor header and signature');\n }\n}\n\n/**\n * Creates a new CleartextMessage object from text\n * @param {Object} options\n * @param {String} options.text\n * @static\n * @async\n */\nexport async function createCleartextMessage({ text, ...rest }) {\n if (!text) {\n throw new Error('createCleartextMessage: must pass options object containing `text`');\n }\n if (!util.isString(text)) {\n throw new Error('createCleartextMessage: options.text must be a string');\n }\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n return new CleartextMessage(text);\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport { Message } from './message';\nimport { CleartextMessage } from './cleartext';\nimport { generate, reformat, getPreferredAlgo } from './key';\nimport defaultConfig from './config';\nimport util from './util';\nimport { checkKeyRequirements } from './key/helper';\n\n\n//////////////////////\n// //\n// Key handling //\n// //\n//////////////////////\n\n\n/**\n * Generates a new OpenPGP key pair. Supports RSA and ECC keys. By default, primary and subkeys will be of same type.\n * The generated primary key will have signing capabilities. By default, one subkey with encryption capabilities is also generated.\n * @param {Object} options\n * @param {Object|Array} options.userIDs - User IDs as objects: `{ name: 'Jo Doe', email: 'info@jo.com' }`\n * @param {'ecc'|'rsa'} [options.type='ecc'] - The primary key algorithm type: ECC (default) or RSA\n * @param {String} [options.passphrase=(not protected)] - The passphrase used to encrypt the generated private key. If omitted or empty, the key won't be encrypted.\n * @param {Number} [options.rsaBits=4096] - Number of bits for RSA keys\n * @param {String} [options.curve='curve25519'] - Elliptic curve for ECC keys:\n * curve25519 (default), p256, p384, p521, secp256k1,\n * brainpoolP256r1, brainpoolP384r1, or brainpoolP512r1\n * @param {Date} [options.date=current date] - Override the creation date of the key and the key signatures\n * @param {Number} [options.keyExpirationTime=0 (never expires)] - Number of seconds from the key creation time after which the key expires\n * @param {Array} [options.subkeys=a single encryption subkey] - Options for each subkey e.g. `[{sign: true, passphrase: '123'}]`\n * default to main key options, except for `sign` parameter that defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - format of the output keys\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} The generated key object in the form:\n * { privateKey:PrivateKey|Uint8Array|String, publicKey:PublicKey|Uint8Array|String, revocationCertificate:String }\n * @async\n * @static\n */\nexport async function generateKey({ userIDs = [], passphrase, type = 'ecc', rsaBits = 4096, curve = 'curve25519', keyExpirationTime = 0, date = new Date(), subkeys = [{}], format = 'armored', config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n userIDs = toArray(userIDs);\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (userIDs.length === 0) {\n throw new Error('UserIDs are required for key generation');\n }\n if (type === 'rsa' && rsaBits < config.minRSABits) {\n throw new Error(`rsaBits should be at least ${config.minRSABits}, got: ${rsaBits}`);\n }\n\n const options = { userIDs, passphrase, type, rsaBits, curve, keyExpirationTime, date, subkeys };\n\n try {\n const { key, revocationCertificate } = await generate(options, config);\n key.getKeys().forEach(({ keyPacket }) => checkKeyRequirements(keyPacket, config));\n\n return {\n privateKey: formatObject(key, format, config),\n publicKey: formatObject(key.toPublic(), format, config),\n revocationCertificate\n };\n } catch (err) {\n throw util.wrapError('Error generating keypair', err);\n }\n}\n\n/**\n * Reformats signature packets for a key and rewraps key object.\n * @param {Object} options\n * @param {PrivateKey} options.privateKey - Private key to reformat\n * @param {Object|Array} options.userIDs - User IDs as objects: `{ name: 'Jo Doe', email: 'info@jo.com' }`\n * @param {String} [options.passphrase=(not protected)] - The passphrase used to encrypt the reformatted private key. If omitted or empty, the key won't be encrypted.\n * @param {Number} [options.keyExpirationTime=0 (never expires)] - Number of seconds from the key creation time after which the key expires\n * @param {Date} [options.date] - Override the creation date of the key signatures. If the key was previously used to sign messages, it is recommended\n * to set the same date as the key creation time to ensure that old message signatures will still be verifiable using the reformatted key.\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - format of the output keys\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} The generated key object in the form:\n * { privateKey:PrivateKey|Uint8Array|String, publicKey:PublicKey|Uint8Array|String, revocationCertificate:String }\n * @async\n * @static\n */\nexport async function reformatKey({ privateKey, userIDs = [], passphrase, keyExpirationTime = 0, date, format = 'armored', config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n userIDs = toArray(userIDs);\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (userIDs.length === 0) {\n throw new Error('UserIDs are required for key reformat');\n }\n const options = { privateKey, userIDs, passphrase, keyExpirationTime, date };\n\n try {\n const { key: reformattedKey, revocationCertificate } = await reformat(options, config);\n\n return {\n privateKey: formatObject(reformattedKey, format, config),\n publicKey: formatObject(reformattedKey.toPublic(), format, config),\n revocationCertificate\n };\n } catch (err) {\n throw util.wrapError('Error reformatting keypair', err);\n }\n}\n\n/**\n * Revokes a key. Requires either a private key or a revocation certificate.\n * If a revocation certificate is passed, the reasonForRevocation parameter will be ignored.\n * @param {Object} options\n * @param {Key} options.key - Public or private key to revoke\n * @param {String} [options.revocationCertificate] - Revocation certificate to revoke the key with\n * @param {Object} [options.reasonForRevocation] - Object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} [options.reasonForRevocation.flag=[noReason]{@link module:enums.reasonForRevocation}] - Flag indicating the reason for revocation\n * @param {String} [options.reasonForRevocation.string=\"\"] - String explaining the reason for revocation\n * @param {Date} [options.date] - Use the given date instead of the current time to verify validity of revocation certificate (if provided), or as creation time of the revocation signature\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - format of the output key(s)\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} The revoked key in the form:\n * { privateKey:PrivateKey|Uint8Array|String, publicKey:PublicKey|Uint8Array|String } if private key is passed, or\n * { privateKey: null, publicKey:PublicKey|Uint8Array|String } otherwise\n * @async\n * @static\n */\nexport async function revokeKey({ key, revocationCertificate, reasonForRevocation, date = new Date(), format = 'armored', config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n try {\n const revokedKey = revocationCertificate ?\n await key.applyRevocationCertificate(revocationCertificate, date, config) :\n await key.revoke(reasonForRevocation, date, config);\n\n return revokedKey.isPrivate() ? {\n privateKey: formatObject(revokedKey, format, config),\n publicKey: formatObject(revokedKey.toPublic(), format, config)\n } : {\n privateKey: null,\n publicKey: formatObject(revokedKey, format, config)\n };\n } catch (err) {\n throw util.wrapError('Error revoking key', err);\n }\n}\n\n/**\n * Unlock a private key with the given passphrase.\n * This method does not change the original key.\n * @param {Object} options\n * @param {PrivateKey} options.privateKey - The private key to decrypt\n * @param {String|Array} options.passphrase - The user's passphrase(s)\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} The unlocked key object.\n * @async\n */\nexport async function decryptKey({ privateKey, passphrase, config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (!privateKey.isPrivate()) {\n throw new Error('Cannot decrypt a public key');\n }\n const clonedPrivateKey = privateKey.clone(true);\n const passphrases = util.isArray(passphrase) ? passphrase : [passphrase];\n\n try {\n await Promise.all(clonedPrivateKey.getKeys().map(key => (\n // try to decrypt each key with any of the given passphrases\n util.anyPromise(passphrases.map(passphrase => key.keyPacket.decrypt(passphrase)))\n )));\n\n await clonedPrivateKey.validate(config);\n return clonedPrivateKey;\n } catch (err) {\n clonedPrivateKey.clearPrivateParams();\n throw util.wrapError('Error decrypting private key', err);\n }\n}\n\n/**\n * Lock a private key with the given passphrase.\n * This method does not change the original key.\n * @param {Object} options\n * @param {PrivateKey} options.privateKey - The private key to encrypt\n * @param {String|Array} options.passphrase - If multiple passphrases, they should be in the same order as the packets each should encrypt\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} The locked key object.\n * @async\n */\nexport async function encryptKey({ privateKey, passphrase, config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (!privateKey.isPrivate()) {\n throw new Error('Cannot encrypt a public key');\n }\n const clonedPrivateKey = privateKey.clone(true);\n\n const keys = clonedPrivateKey.getKeys();\n const passphrases = util.isArray(passphrase) ? passphrase : new Array(keys.length).fill(passphrase);\n if (passphrases.length !== keys.length) {\n throw new Error('Invalid number of passphrases given for key encryption');\n }\n\n try {\n await Promise.all(keys.map(async (key, i) => {\n const { keyPacket } = key;\n await keyPacket.encrypt(passphrases[i], config);\n keyPacket.clearPrivateParams();\n }));\n return clonedPrivateKey;\n } catch (err) {\n clonedPrivateKey.clearPrivateParams();\n throw util.wrapError('Error encrypting private key', err);\n }\n}\n\n\n///////////////////////////////////////////\n// //\n// Message encryption and decryption //\n// //\n///////////////////////////////////////////\n\n\n/**\n * Encrypts a message using public keys, passwords or both at once. At least one of `encryptionKeys`, `passwords` or `sessionKeys`\n * must be specified. If signing keys are specified, those will be used to sign the message.\n * @param {Object} options\n * @param {Message} options.message - Message to be encrypted as created by {@link createMessage}\n * @param {PublicKey|PublicKey[]} [options.encryptionKeys] - Array of keys or single key, used to encrypt the message\n * @param {PrivateKey|PrivateKey[]} [options.signingKeys] - Private keys for signing. If omitted message will not be signed\n * @param {String|String[]} [options.passwords] - Array of passwords or a single password to encrypt the message\n * @param {Object} [options.sessionKey] - Session key in the form: `{ data:Uint8Array, algorithm:String }`\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - Format of the returned message\n * @param {Signature} [options.signature] - A detached signature to add to the encrypted message\n * @param {Boolean} [options.wildcard=false] - Use a key ID of 0 instead of the public key IDs\n * @param {KeyID|KeyID[]} [options.signingKeyIDs=latest-created valid signing (sub)keys] - Array of key IDs to use for signing. Each `signingKeyIDs[i]` corresponds to `signingKeys[i]`\n * @param {KeyID|KeyID[]} [options.encryptionKeyIDs=latest-created valid encryption (sub)keys] - Array of key IDs to use for encryption. Each `encryptionKeyIDs[i]` corresponds to `encryptionKeys[i]`\n * @param {Date} [options.date=current date] - Override the creation date of the message signature\n * @param {Object|Object[]} [options.signingUserIDs=primary user IDs] - Array of user IDs to sign with, one per key in `signingKeys`, e.g. `[{ name: 'Steve Sender', email: 'steve@openpgp.org' }]`\n * @param {Object|Object[]} [options.encryptionUserIDs=primary user IDs] - Array of user IDs to encrypt for, one per key in `encryptionKeys`, e.g. `[{ name: 'Robert Receiver', email: 'robert@openpgp.org' }]`\n * @param {Object|Object[]} [options.signatureNotations=[]] - Array of notations to add to the signatures, e.g. `[{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]`\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise|MaybeStream>} Encrypted message (string if `armor` was true, the default; Uint8Array if `armor` was false).\n * @async\n * @static\n */\nexport async function encrypt({ message, encryptionKeys, signingKeys, passwords, sessionKey, format = 'armored', signature = null, wildcard = false, signingKeyIDs = [], encryptionKeyIDs = [], date = new Date(), signingUserIDs = [], encryptionUserIDs = [], signatureNotations = [], config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n checkMessage(message); checkOutputMessageFormat(format);\n encryptionKeys = toArray(encryptionKeys); signingKeys = toArray(signingKeys); passwords = toArray(passwords);\n signingKeyIDs = toArray(signingKeyIDs); encryptionKeyIDs = toArray(encryptionKeyIDs); signingUserIDs = toArray(signingUserIDs); encryptionUserIDs = toArray(encryptionUserIDs); signatureNotations = toArray(signatureNotations);\n if (rest.detached) {\n throw new Error(\"The `detached` option has been removed from openpgp.encrypt, separately call openpgp.sign instead. Don't forget to remove the `privateKeys` option as well.\");\n }\n if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.encrypt, pass `encryptionKeys` instead');\n if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.encrypt, pass `signingKeys` instead');\n if (rest.armor !== undefined) throw new Error('The `armor` option has been removed from openpgp.encrypt, pass `format` instead.');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (!signingKeys) {\n signingKeys = [];\n }\n const streaming = message.fromStream;\n try {\n if (signingKeys.length || signature) { // sign the message only if signing keys or signature is specified\n message = await message.sign(signingKeys, signature, signingKeyIDs, date, signingUserIDs, signatureNotations, config);\n }\n message = message.compress(\n await getPreferredAlgo('compression', encryptionKeys, date, encryptionUserIDs, config),\n config\n );\n message = await message.encrypt(encryptionKeys, passwords, sessionKey, wildcard, encryptionKeyIDs, date, encryptionUserIDs, config);\n if (format === 'object') return message;\n // serialize data\n const armor = format === 'armored';\n const data = armor ? message.armor(config) : message.write();\n return convertStream(data, streaming, armor ? 'utf8' : 'binary');\n } catch (err) {\n throw util.wrapError('Error encrypting message', err);\n }\n}\n\n/**\n * Decrypts a message with the user's private key, a session key or a password.\n * One of `decryptionKeys`, `sessionkeys` or `passwords` must be specified (passing a combination of these options is not supported).\n * @param {Object} options\n * @param {Message} options.message - The message object with the encrypted data\n * @param {PrivateKey|PrivateKey[]} [options.decryptionKeys] - Private keys with decrypted secret key data or session key\n * @param {String|String[]} [options.passwords] - Passwords to decrypt the message\n * @param {Object|Object[]} [options.sessionKeys] - Session keys in the form: { data:Uint8Array, algorithm:String }\n * @param {PublicKey|PublicKey[]} [options.verificationKeys] - Array of public keys or single key, to verify signatures\n * @param {Boolean} [options.expectSigned=false] - If true, data decryption fails if the message is not signed with the provided publicKeys\n * @param {'utf8'|'binary'} [options.format='utf8'] - Whether to return data as a string(Stream) or Uint8Array(Stream). If 'utf8' (the default), also normalize newlines.\n * @param {Signature} [options.signature] - Detached signature for verification\n * @param {Date} [options.date=current date] - Use the given date for verification instead of the current time\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} Object containing decrypted and verified message in the form:\n *\n * {\n * data: MaybeStream, (if format was 'utf8', the default)\n * data: MaybeStream, (if format was 'binary')\n * filename: String,\n * signatures: [\n * {\n * keyID: module:type/keyid~KeyID,\n * verified: Promise,\n * signature: Promise\n * }, ...\n * ]\n * }\n *\n * where `signatures` contains a separate entry for each signature packet found in the input message.\n * @async\n * @static\n */\nexport async function decrypt({ message, decryptionKeys, passwords, sessionKeys, verificationKeys, expectSigned = false, format = 'utf8', signature = null, date = new Date(), config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n checkMessage(message); verificationKeys = toArray(verificationKeys); decryptionKeys = toArray(decryptionKeys); passwords = toArray(passwords); sessionKeys = toArray(sessionKeys);\n if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.decrypt, pass `decryptionKeys` instead');\n if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.decrypt, pass `verificationKeys` instead');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n try {\n const decrypted = await message.decrypt(decryptionKeys, passwords, sessionKeys, date, config);\n if (!verificationKeys) {\n verificationKeys = [];\n }\n\n const result = {};\n result.signatures = signature ? await decrypted.verifyDetached(signature, verificationKeys, date, config) : await decrypted.verify(verificationKeys, date, config);\n result.data = format === 'binary' ? decrypted.getLiteralData() : decrypted.getText();\n result.filename = decrypted.getFilename();\n linkStreams(result, message);\n if (expectSigned) {\n if (verificationKeys.length === 0) {\n throw new Error('Verification keys are required to verify message signatures');\n }\n if (result.signatures.length === 0) {\n throw new Error('Message is not signed');\n }\n result.data = stream.concat([\n result.data,\n stream.fromAsync(async () => {\n await util.anyPromise(result.signatures.map(sig => sig.verified));\n })\n ]);\n }\n result.data = await convertStream(result.data, message.fromStream, format);\n return result;\n } catch (err) {\n throw util.wrapError('Error decrypting message', err);\n }\n}\n\n\n//////////////////////////////////////////\n// //\n// Message signing and verification //\n// //\n//////////////////////////////////////////\n\n\n/**\n * Signs a message.\n * @param {Object} options\n * @param {CleartextMessage|Message} options.message - (cleartext) message to be signed\n * @param {PrivateKey|PrivateKey[]} options.signingKeys - Array of keys or single key with decrypted secret key data to sign cleartext\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - Format of the returned message\n * @param {Boolean} [options.detached=false] - If the return value should contain a detached signature\n * @param {KeyID|KeyID[]} [options.signingKeyIDs=latest-created valid signing (sub)keys] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n * @param {Date} [options.date=current date] - Override the creation date of the signature\n * @param {Object|Object[]} [options.signingUserIDs=primary user IDs] - Array of user IDs to sign with, one per key in `signingKeys`, e.g. `[{ name: 'Steve Sender', email: 'steve@openpgp.org' }]`\n * @param {Object|Object[]} [options.signatureNotations=[]] - Array of notations to add to the signatures, e.g. `[{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]`\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise>} Signed message (string if `armor` was true, the default; Uint8Array if `armor` was false).\n * @async\n * @static\n */\nexport async function sign({ message, signingKeys, format = 'armored', detached = false, signingKeyIDs = [], date = new Date(), signingUserIDs = [], signatureNotations = [], config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n checkCleartextOrMessage(message); checkOutputMessageFormat(format);\n signingKeys = toArray(signingKeys); signingKeyIDs = toArray(signingKeyIDs); signingUserIDs = toArray(signingUserIDs); signatureNotations = toArray(signatureNotations);\n\n if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.sign, pass `signingKeys` instead');\n if (rest.armor !== undefined) throw new Error('The `armor` option has been removed from openpgp.sign, pass `format` instead.');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (message instanceof CleartextMessage && format === 'binary') throw new Error('Cannot return signed cleartext message in binary format');\n if (message instanceof CleartextMessage && detached) throw new Error('Cannot detach-sign a cleartext message');\n\n if (!signingKeys || signingKeys.length === 0) {\n throw new Error('No signing keys provided');\n }\n\n try {\n let signature;\n if (detached) {\n signature = await message.signDetached(signingKeys, undefined, signingKeyIDs, date, signingUserIDs, signatureNotations, config);\n } else {\n signature = await message.sign(signingKeys, undefined, signingKeyIDs, date, signingUserIDs, signatureNotations, config);\n }\n if (format === 'object') return signature;\n\n const armor = format === 'armored';\n signature = armor ? signature.armor(config) : signature.write();\n if (detached) {\n signature = stream.transformPair(message.packets.write(), async (readable, writable) => {\n await Promise.all([\n stream.pipe(signature, writable),\n stream.readToEnd(readable).catch(() => {})\n ]);\n });\n }\n return convertStream(signature, message.fromStream, armor ? 'utf8' : 'binary');\n } catch (err) {\n throw util.wrapError('Error signing message', err);\n }\n}\n\n/**\n * Verifies signatures of cleartext signed message\n * @param {Object} options\n * @param {CleartextMessage|Message} options.message - (cleartext) message object with signatures\n * @param {PublicKey|PublicKey[]} options.verificationKeys - Array of publicKeys or single key, to verify signatures\n * @param {Boolean} [options.expectSigned=false] - If true, verification throws if the message is not signed with the provided publicKeys\n * @param {'utf8'|'binary'} [options.format='utf8'] - Whether to return data as a string(Stream) or Uint8Array(Stream). If 'utf8' (the default), also normalize newlines.\n * @param {Signature} [options.signature] - Detached signature for verification\n * @param {Date} [options.date=current date] - Use the given date for verification instead of the current time\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} Object containing verified message in the form:\n *\n * {\n * data: MaybeStream, (if `message` was a CleartextMessage)\n * data: MaybeStream, (if `message` was a Message)\n * signatures: [\n * {\n * keyID: module:type/keyid~KeyID,\n * verified: Promise,\n * signature: Promise\n * }, ...\n * ]\n * }\n *\n * where `signatures` contains a separate entry for each signature packet found in the input message.\n * @async\n * @static\n */\nexport async function verify({ message, verificationKeys, expectSigned = false, format = 'utf8', signature = null, date = new Date(), config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n checkCleartextOrMessage(message); verificationKeys = toArray(verificationKeys);\n if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.verify, pass `verificationKeys` instead');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if (message instanceof CleartextMessage && format === 'binary') throw new Error(\"Can't return cleartext message data as binary\");\n if (message instanceof CleartextMessage && signature) throw new Error(\"Can't verify detached cleartext signature\");\n\n try {\n const result = {};\n if (signature) {\n result.signatures = await message.verifyDetached(signature, verificationKeys, date, config);\n } else {\n result.signatures = await message.verify(verificationKeys, date, config);\n }\n result.data = format === 'binary' ? message.getLiteralData() : message.getText();\n if (message.fromStream) linkStreams(result, message);\n if (expectSigned) {\n if (result.signatures.length === 0) {\n throw new Error('Message is not signed');\n }\n result.data = stream.concat([\n result.data,\n stream.fromAsync(async () => {\n await util.anyPromise(result.signatures.map(sig => sig.verified));\n })\n ]);\n }\n result.data = await convertStream(result.data, message.fromStream, format);\n return result;\n } catch (err) {\n throw util.wrapError('Error verifying signed message', err);\n }\n}\n\n\n///////////////////////////////////////////////\n// //\n// Session key encryption and decryption //\n// //\n///////////////////////////////////////////////\n\n/**\n * Generate a new session key object, taking the algorithm preferences of the passed public keys into account, if any.\n * @param {Object} options\n * @param {PublicKey|PublicKey[]} [options.encryptionKeys] - Array of public keys or single key used to select algorithm preferences for. If no keys are given, the algorithm will be [config.preferredSymmetricAlgorithm]{@link module:config.preferredSymmetricAlgorithm}\n * @param {Date} [options.date=current date] - Date to select algorithm preferences at\n * @param {Object|Object[]} [options.encryptionUserIDs=primary user IDs] - User IDs to select algorithm preferences for\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<{ data: Uint8Array, algorithm: String }>} Object with session key data and algorithm.\n * @async\n * @static\n */\nexport async function generateSessionKey({ encryptionKeys, date = new Date(), encryptionUserIDs = [], config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n encryptionKeys = toArray(encryptionKeys); encryptionUserIDs = toArray(encryptionUserIDs);\n if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.generateSessionKey, pass `encryptionKeys` instead');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n try {\n const sessionKeys = await Message.generateSessionKey(encryptionKeys, date, encryptionUserIDs, config);\n return sessionKeys;\n } catch (err) {\n throw util.wrapError('Error generating session key', err);\n }\n}\n\n/**\n * Encrypt a symmetric session key with public keys, passwords, or both at once.\n * At least one of `encryptionKeys` or `passwords` must be specified.\n * @param {Object} options\n * @param {Uint8Array} options.data - The session key to be encrypted e.g. 16 random bytes (for aes128)\n * @param {String} options.algorithm - Algorithm of the symmetric session key e.g. 'aes128' or 'aes256'\n * @param {String} [options.aeadAlgorithm] - AEAD algorithm, e.g. 'eax' or 'ocb'\n * @param {PublicKey|PublicKey[]} [options.encryptionKeys] - Array of public keys or single key, used to encrypt the key\n * @param {String|String[]} [options.passwords] - Passwords for the message\n * @param {'armored'|'binary'} [options.format='armored'] - Format of the returned value\n * @param {Boolean} [options.wildcard=false] - Use a key ID of 0 instead of the public key IDs\n * @param {KeyID|KeyID[]} [options.encryptionKeyIDs=latest-created valid encryption (sub)keys] - Array of key IDs to use for encryption. Each encryptionKeyIDs[i] corresponds to encryptionKeys[i]\n * @param {Date} [options.date=current date] - Override the date\n * @param {Object|Object[]} [options.encryptionUserIDs=primary user IDs] - Array of user IDs to encrypt for, one per key in `encryptionKeys`, e.g. `[{ name: 'Phil Zimmermann', email: 'phil@openpgp.org' }]`\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} Encrypted session keys (string if `armor` was true, the default; Uint8Array if `armor` was false).\n * @async\n * @static\n */\nexport async function encryptSessionKey({ data, algorithm, aeadAlgorithm, encryptionKeys, passwords, format = 'armored', wildcard = false, encryptionKeyIDs = [], date = new Date(), encryptionUserIDs = [], config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n checkBinary(data); checkString(algorithm, 'algorithm'); checkOutputMessageFormat(format);\n encryptionKeys = toArray(encryptionKeys); passwords = toArray(passwords); encryptionKeyIDs = toArray(encryptionKeyIDs); encryptionUserIDs = toArray(encryptionUserIDs);\n if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.encryptSessionKey, pass `encryptionKeys` instead');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n if ((!encryptionKeys || encryptionKeys.length === 0) && (!passwords || passwords.length === 0)) {\n throw new Error('No encryption keys or passwords provided.');\n }\n\n try {\n const message = await Message.encryptSessionKey(data, algorithm, aeadAlgorithm, encryptionKeys, passwords, wildcard, encryptionKeyIDs, date, encryptionUserIDs, config);\n return formatObject(message, format, config);\n } catch (err) {\n throw util.wrapError('Error encrypting session key', err);\n }\n}\n\n/**\n * Decrypt symmetric session keys using private keys or passwords (not both).\n * One of `decryptionKeys` or `passwords` must be specified.\n * @param {Object} options\n * @param {Message} options.message - A message object containing the encrypted session key packets\n * @param {PrivateKey|PrivateKey[]} [options.decryptionKeys] - Private keys with decrypted secret key data\n * @param {String|String[]} [options.passwords] - Passwords to decrypt the session key\n * @param {Date} [options.date] - Date to use for key verification instead of the current time\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise} Array of decrypted session key, algorithm pairs in the form:\n * { data:Uint8Array, algorithm:String }\n * @throws if no session key could be found or decrypted\n * @async\n * @static\n */\nexport async function decryptSessionKeys({ message, decryptionKeys, passwords, date = new Date(), config, ...rest }) {\n config = { ...defaultConfig, ...config }; checkConfig(config);\n checkMessage(message); decryptionKeys = toArray(decryptionKeys); passwords = toArray(passwords);\n if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.decryptSessionKeys, pass `decryptionKeys` instead');\n const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n try {\n const sessionKeys = await message.decryptSessionKeys(decryptionKeys, passwords, date, config);\n return sessionKeys;\n } catch (err) {\n throw util.wrapError('Error decrypting session keys', err);\n }\n}\n\n\n//////////////////////////\n// //\n// Helper functions //\n// //\n//////////////////////////\n\n\n/**\n * Input validation\n * @private\n */\nfunction checkString(data, name) {\n if (!util.isString(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type String');\n }\n}\nfunction checkBinary(data, name) {\n if (!util.isUint8Array(data)) {\n throw new Error('Parameter [' + (name || 'data') + '] must be of type Uint8Array');\n }\n}\nfunction checkMessage(message) {\n if (!(message instanceof Message)) {\n throw new Error('Parameter [message] needs to be of type Message');\n }\n}\nfunction checkCleartextOrMessage(message) {\n if (!(message instanceof CleartextMessage) && !(message instanceof Message)) {\n throw new Error('Parameter [message] needs to be of type Message or CleartextMessage');\n }\n}\nfunction checkOutputMessageFormat(format) {\n if (format !== 'armored' && format !== 'binary' && format !== 'object') {\n throw new Error(`Unsupported format ${format}`);\n }\n}\nconst defaultConfigPropsCount = Object.keys(defaultConfig).length;\nfunction checkConfig(config) {\n const inputConfigProps = Object.keys(config);\n if (inputConfigProps.length !== defaultConfigPropsCount) {\n for (const inputProp of inputConfigProps) {\n if (defaultConfig[inputProp] === undefined) {\n throw new Error(`Unknown config property: ${inputProp}`);\n }\n }\n }\n}\n\n/**\n * Normalize parameter to an array if it is not undefined.\n * @param {Object} param - the parameter to be normalized\n * @returns {Array|undefined} The resulting array or undefined.\n * @private\n */\nfunction toArray(param) {\n if (param && !util.isArray(param)) {\n param = [param];\n }\n return param;\n}\n\n/**\n * Convert data to or from Stream\n * @param {Object} data - the data to convert\n * @param {'web'|'ponyfill'|'node'|false} streaming - Whether to return a ReadableStream, and of what type\n * @param {'utf8'|'binary'} [encoding] - How to return data in Node Readable streams\n * @returns {Promise} The data in the respective format.\n * @async\n * @private\n */\nasync function convertStream(data, streaming, encoding = 'utf8') {\n const streamType = util.isStream(data);\n if (streamType === 'array') {\n return stream.readToEnd(data);\n }\n if (streaming === 'node') {\n data = stream.webToNode(data);\n if (encoding !== 'binary') data.setEncoding(encoding);\n return data;\n }\n if (streaming === 'web' && streamType === 'ponyfill') {\n return stream.toNativeReadable(data);\n }\n return data;\n}\n\n/**\n * Link result.data to the message stream for cancellation.\n * Also, forward errors in the message to result.data.\n * @param {Object} result - the data to convert\n * @param {Message} message - message object\n * @returns {Object}\n * @private\n */\nfunction linkStreams(result, message) {\n result.data = stream.transformPair(message.packets.stream, async (readable, writable) => {\n await stream.pipe(result.data, writable, {\n preventClose: true\n });\n const writer = stream.getWriter(writable);\n try {\n // Forward errors in the message stream to result.data.\n await stream.readToEnd(readable, _ => _);\n await writer.close();\n } catch (e) {\n await writer.abort(e);\n }\n });\n}\n\n/**\n * Convert the object to the given format\n * @param {Key|Message} object\n * @param {'armored'|'binary'|'object'} format\n * @param {Object} config - Full configuration\n * @returns {String|Uint8Array|Object}\n */\nfunction formatObject(object, format, config) {\n switch (format) {\n case 'object':\n return object;\n case 'armored':\n return object.armor(config);\n case 'binary':\n return object.write();\n default:\n throw new Error(`Unsupported format ${format}`);\n }\n}\n","/**\n * web-streams-polyfill v3.0.3\n */\n/// \nconst SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})`;\n\n/// \nfunction noop() {\n return undefined;\n}\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n }\n else if (typeof window !== 'undefined') {\n return window;\n }\n else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\nconst globals = getGlobals();\n\nfunction typeIsObject(x) {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\nconst rethrowAssertionErrorRejection = noop;\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\nfunction newPromise(executor) {\n return new originalPromise(executor);\n}\nfunction promiseResolvedWith(value) {\n return originalPromiseResolve(value);\n}\nfunction promiseRejectedWith(reason) {\n return originalPromiseReject(reason);\n}\nfunction PerformPromiseThen(promise, onFulfilled, onRejected) {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected);\n}\nfunction uponPromise(promise, onFulfilled, onRejected) {\n PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\n}\nfunction uponFulfillment(promise, onFulfilled) {\n uponPromise(promise, onFulfilled);\n}\nfunction uponRejection(promise, onRejected) {\n uponPromise(promise, undefined, onRejected);\n}\nfunction transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\nfunction setPromiseIsHandledToTrue(promise) {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\nconst queueMicrotask = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn) => PerformPromiseThen(resolvedPromise, fn);\n})();\nfunction reflectCall(F, V, args) {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\nfunction promiseCall(F, V, args) {\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n }\n catch (value) {\n return promiseRejectedWith(value);\n }\n}\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nclass SimpleQueue {\n constructor() {\n this._cursor = 0;\n this._size = 0;\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n get length() {\n return this._size;\n }\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element) {\n const oldBack = this._back;\n let newBack = oldBack;\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift() { // must not be called on an empty queue\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n newFront = oldFront._next;\n newCursor = 0;\n }\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined;\n return element;\n }\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback) {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n node = node._next;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek() { // must not be called on an empty queue\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n\nfunction ReadableStreamReaderGenericInitialize(reader, stream) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n }\n else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n }\n else {\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\nfunction ReadableStreamReaderGenericCancel(reader, reason) {\n const stream = reader._ownerReadableStream;\n return ReadableStreamCancel(stream, reason);\n}\nfunction ReadableStreamReaderGenericRelease(reader) {\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n else {\n defaultReaderClosedPromiseResetToRejected(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined;\n}\n// Helper functions for the readers.\nfunction readerLockException(name) {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n// Helper functions for the ReadableStreamDefaultReader.\nfunction defaultReaderClosedPromiseInitialize(reader) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\nfunction defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\nfunction defaultReaderClosedPromiseInitializeAsResolved(reader) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\nfunction defaultReaderClosedPromiseReject(reader, reason) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\nfunction defaultReaderClosedPromiseResetToRejected(reader, reason) {\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\nfunction defaultReaderClosedPromiseResolve(reader) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nconst AbortSteps = SymbolPolyfill('[[AbortSteps]]');\nconst ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\nconst CancelSteps = SymbolPolyfill('[[CancelSteps]]');\nconst PullSteps = SymbolPolyfill('[[PullSteps]]');\n\n/// \n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\n/// \n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nfunction isDictionary(x) {\n return typeof x === 'object' || typeof x === 'function';\n}\nfunction assertDictionary(obj, context) {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n// https://heycam.github.io/webidl/#idl-callback-functions\nfunction assertFunction(x, context) {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n// https://heycam.github.io/webidl/#idl-object\nfunction isObject(x) {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\nfunction assertObject(x, context) {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\nfunction assertRequiredArgument(x, position, context) {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\nfunction assertRequiredField(x, field, context) {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nfunction convertUnrestrictedDouble(value) {\n return Number(value);\n}\nfunction censorNegativeZero(x) {\n return x === 0 ? 0 : x;\n}\nfunction integerPart(x) {\n return censorNegativeZero(MathTrunc(x));\n}\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nfunction convertUnsignedLongLongWithEnforceRange(value, context) {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n let x = Number(value);\n x = censorNegativeZero(x);\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n x = integerPart(x);\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n return x;\n}\n\nfunction assertReadableStream(x, context) {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n\n// Abstract operations for the ReadableStream.\nfunction AcquireReadableStreamDefaultReader(stream) {\n return new ReadableStreamDefaultReader(stream);\n}\n// ReadableStream API exposed for controllers.\nfunction ReadableStreamAddReadRequest(stream, readRequest) {\n stream._reader._readRequests.push(readRequest);\n}\nfunction ReadableStreamFulfillReadRequest(stream, chunk, done) {\n const reader = stream._reader;\n const readRequest = reader._readRequests.shift();\n if (done) {\n readRequest._closeSteps();\n }\n else {\n readRequest._chunkSteps(chunk);\n }\n}\nfunction ReadableStreamGetNumReadRequests(stream) {\n return stream._reader._readRequests.length;\n}\nfunction ReadableStreamHasDefaultReader(stream) {\n const reader = stream._reader;\n if (reader === undefined) {\n return false;\n }\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n return true;\n}\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nclass ReadableStreamDefaultReader {\n constructor(stream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n ReadableStreamReaderGenericInitialize(this, stream);\n this._readRequests = new SimpleQueue();\n }\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed() {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n return this._closedPromise;\n }\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason = undefined) {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read() {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n let resolvePromise;\n let rejectPromise;\n const promise = newPromise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock() {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n if (this._ownerReadableStream === undefined) {\n return;\n }\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n ReadableStreamReaderGenericRelease(this);\n }\n}\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n// Abstract operations for the readers.\nfunction IsReadableStreamDefaultReader(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n return true;\n}\nfunction ReadableStreamDefaultReaderRead(reader, readRequest) {\n const stream = reader._ownerReadableStream;\n stream._disturbed = true;\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n }\n else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n }\n else {\n stream._readableStreamController[PullSteps](readRequest);\n }\n}\n// Helper functions for the ReadableStreamDefaultReader.\nfunction defaultReaderBrandCheckException(name) {\n return new TypeError(`ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n\n/// \nlet AsyncIteratorPrototype;\nif (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [SymbolPolyfill.asyncIterator]() {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\n}\n\n/// \nclass ReadableStreamAsyncIteratorImpl {\n constructor(reader, preventCancel) {\n this._ongoingPromise = undefined;\n this._isFinished = false;\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n next() {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n return(value) {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n _nextSteps() {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n let resolvePromise;\n let rejectPromise;\n const promise = newPromise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n _returnSteps(value) {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\nconst ReadableStreamAsyncIteratorPrototype = {\n next() {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n return(value) {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n};\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n// Abstract operations for the ReadableStream.\nfunction AcquireReadableStreamAsyncIterator(stream, preventCancel) {\n const reader = AcquireReadableStreamDefaultReader(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\nfunction IsReadableStreamAsyncIterator(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n return true;\n}\n// Helper functions for the ReadableStream.\nfunction streamAsyncIteratorBrandCheckException(name) {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n\n/// \n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nfunction IsFiniteNonNegativeNumber(v) {\n if (!IsNonNegativeNumber(v)) {\n return false;\n }\n if (v === Infinity) {\n return false;\n }\n return true;\n}\nfunction IsNonNegativeNumber(v) {\n if (typeof v !== 'number') {\n return false;\n }\n if (NumberIsNaN(v)) {\n return false;\n }\n if (v < 0) {\n return false;\n }\n return true;\n}\n\nfunction DequeueValue(container) {\n const pair = container._queue.shift();\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n return pair.value;\n}\nfunction EnqueueValueWithSize(container, value, size) {\n size = Number(size);\n if (!IsFiniteNonNegativeNumber(size)) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\nfunction PeekQueueValue(container) {\n const pair = container._queue.peek();\n return pair.value;\n}\nfunction ResetQueue(container) {\n container._queue = new SimpleQueue();\n container._queueTotalSize = 0;\n}\n\nfunction CreateArrayFromList(elements) {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice();\n}\nfunction CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n// Not implemented correctly\nfunction TransferArrayBuffer(O) {\n return O;\n}\n// Not implemented correctly\nfunction IsDetachedBuffer(O) {\n return false;\n}\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nclass ReadableStreamBYOBRequest {\n constructor() {\n throw new TypeError('Illegal constructor');\n }\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view() {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n return this._view;\n }\n respond(bytesWritten) {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n if (IsDetachedBuffer(this._view.buffer)) ;\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n respondWithNewView(view) {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n if (view.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (view.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nclass ReadableByteStreamController {\n constructor() {\n throw new TypeError('Illegal constructor');\n }\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest() {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n if (this._byobRequest === null && this._pendingPullIntos.length > 0) {\n const firstDescriptor = this._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n const byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, this, view);\n this._byobRequest = byobRequest;\n }\n return this._byobRequest;\n }\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize() {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close() {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n ReadableByteStreamControllerClose(this);\n }\n enqueue(chunk) {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e = undefined) {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n ReadableByteStreamControllerError(this, e);\n }\n /** @internal */\n [CancelSteps](reason) {\n if (this._pendingPullIntos.length > 0) {\n const firstDescriptor = this._pendingPullIntos.peek();\n firstDescriptor.bytesFilled = 0;\n }\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n /** @internal */\n [PullSteps](readRequest) {\n const stream = this._controlledReadableByteStream;\n if (this._queueTotalSize > 0) {\n const entry = this._queue.shift();\n this._queueTotalSize -= entry.byteLength;\n ReadableByteStreamControllerHandleQueueDrain(this);\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n readRequest._chunkSteps(view);\n return;\n }\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n }\n catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n const pullIntoDescriptor = {\n buffer,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n// Abstract operations for the ReadableByteStreamController.\nfunction IsReadableByteStreamController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n return true;\n}\nfunction IsReadableStreamBYOBRequest(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n return true;\n}\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller) {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n controller._pulling = true;\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(pullPromise, () => {\n controller._pulling = false;\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n }, e => {\n ReadableByteStreamControllerError(controller, e);\n });\n}\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\n let done = false;\n if (stream._state === 'closed') {\n done = true;\n }\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView, done);\n }\n else {\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\n}\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n const maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n const queue = controller._queue;\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n }\n else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n return ready;\n}\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n pullIntoDescriptor.bytesFilled += size;\n}\nfunction ReadableByteStreamControllerHandleQueueDrain(controller) {\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n }\n else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\n if (controller._byobRequest === null) {\n return;\n }\n controller._byobRequest._associatedReadableByteStreamController = undefined;\n controller._byobRequest._view = null;\n controller._byobRequest = null;\n}\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n }\n }\n}\nfunction ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {\n const stream = controller._controlledReadableByteStream;\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = view.constructor.BYTES_PER_ELEMENT;\n }\n const ctor = view.constructor;\n const buffer = TransferArrayBuffer(view.buffer);\n const pullIntoDescriptor = {\n buffer,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n ReadableByteStreamControllerHandleQueueDrain(controller);\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n controller._pendingPullIntos.push(pullIntoDescriptor);\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\nfunction ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\nfunction ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\n if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n // TODO: Figure out whether we should detach the buffer or not here.\n return;\n }\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\nfunction ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n }\n else {\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\nfunction ReadableByteStreamControllerShiftPendingPullInto(controller) {\n const descriptor = controller._pendingPullIntos.shift();\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n return descriptor;\n}\nfunction ReadableByteStreamControllerShouldCallPull(controller) {\n const stream = controller._controlledReadableByteStream;\n if (stream._state !== 'readable') {\n return false;\n }\n if (controller._closeRequested) {\n return false;\n }\n if (!controller._started) {\n return false;\n }\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n if (desiredSize > 0) {\n return true;\n }\n return false;\n}\nfunction ReadableByteStreamControllerClearAlgorithms(controller) {\n controller._pullAlgorithm = undefined;\n controller._cancelAlgorithm = undefined;\n}\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\nfunction ReadableByteStreamControllerClose(controller) {\n const stream = controller._controlledReadableByteStream;\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n return;\n }\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n throw e;\n }\n }\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\nfunction ReadableByteStreamControllerEnqueue(controller, chunk) {\n const stream = controller._controlledReadableByteStream;\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n const transferredBuffer = TransferArrayBuffer(buffer);\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n else {\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n }\n else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n }\n else {\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\nfunction ReadableByteStreamControllerError(controller, e) {\n const stream = controller._controlledReadableByteStream;\n if (stream._state !== 'readable') {\n return;\n }\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\nfunction ReadableByteStreamControllerGetDesiredSize(controller) {\n const state = controller._controlledReadableByteStream._state;\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n return controller._strategyHWM - controller._queueTotalSize;\n}\nfunction ReadableByteStreamControllerRespond(controller, bytesWritten) {\n bytesWritten = Number(bytesWritten);\n if (!IsFiniteNonNegativeNumber(bytesWritten)) {\n throw new RangeError('bytesWritten must be a finite');\n }\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\nfunction ReadableByteStreamControllerRespondWithNewView(controller, view) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.byteLength !== view.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n firstDescriptor.buffer = view.buffer;\n ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\n}\nfunction SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\n controller._controlledReadableByteStream = stream;\n controller._pullAgain = false;\n controller._pulling = false;\n controller._byobRequest = null;\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined;\n ResetQueue(controller);\n controller._closeRequested = false;\n controller._started = false;\n controller._strategyHWM = highWaterMark;\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n controller._pendingPullIntos = new SimpleQueue();\n stream._readableStreamController = controller;\n const startResult = startAlgorithm();\n uponPromise(promiseResolvedWith(startResult), () => {\n controller._started = true;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }, r => {\n ReadableByteStreamControllerError(controller, r);\n });\n}\nfunction SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\n const controller = Object.create(ReadableByteStreamController.prototype);\n let startAlgorithm = () => undefined;\n let pullAlgorithm = () => promiseResolvedWith(undefined);\n let cancelAlgorithm = () => promiseResolvedWith(undefined);\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel(reason);\n }\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\n}\nfunction SetUpReadableStreamBYOBRequest(request, controller, view) {\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n// Helper functions for the ReadableStreamBYOBRequest.\nfunction byobRequestBrandCheckException(name) {\n return new TypeError(`ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n// Helper functions for the ReadableByteStreamController.\nfunction byteStreamControllerBrandCheckException(name) {\n return new TypeError(`ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n\n// Abstract operations for the ReadableStream.\nfunction AcquireReadableStreamBYOBReader(stream) {\n return new ReadableStreamBYOBReader(stream);\n}\n// ReadableStream API exposed for controllers.\nfunction ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {\n stream._reader._readIntoRequests.push(readIntoRequest);\n}\nfunction ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\n const reader = stream._reader;\n const readIntoRequest = reader._readIntoRequests.shift();\n if (done) {\n readIntoRequest._closeSteps(chunk);\n }\n else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\nfunction ReadableStreamGetNumReadIntoRequests(stream) {\n return stream._reader._readIntoRequests.length;\n}\nfunction ReadableStreamHasBYOBReader(stream) {\n const reader = stream._reader;\n if (reader === undefined) {\n return false;\n }\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n return true;\n}\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nclass ReadableStreamBYOBReader {\n constructor(stream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n ReadableStreamReaderGenericInitialize(this, stream);\n this._readIntoRequests = new SimpleQueue();\n }\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed() {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n return this._closedPromise;\n }\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason = undefined) {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(view) {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n let resolvePromise;\n let rejectPromise;\n const promise = newPromise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock() {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n if (this._ownerReadableStream === undefined) {\n return;\n }\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n ReadableStreamReaderGenericRelease(this);\n }\n}\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n// Abstract operations for the readers.\nfunction IsReadableStreamBYOBReader(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n return true;\n}\nfunction ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {\n const stream = reader._ownerReadableStream;\n stream._disturbed = true;\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n }\n else {\n ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);\n }\n}\n// Helper functions for the ReadableStreamBYOBReader.\nfunction byobReaderBrandCheckException(name) {\n return new TypeError(`ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n\nfunction ExtractHighWaterMark(strategy, defaultHWM) {\n const { highWaterMark } = strategy;\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n return highWaterMark;\n}\nfunction ExtractSizeAlgorithm(strategy) {\n const { size } = strategy;\n if (!size) {\n return () => 1;\n }\n return size;\n}\n\nfunction convertQueuingStrategy(init, context) {\n assertDictionary(init, context);\n const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n const size = init === null || init === void 0 ? void 0 : init.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\nfunction convertQueuingStrategySize(fn, context) {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n\nfunction convertUnderlyingSink(original, context) {\n assertDictionary(original, context);\n const abort = original === null || original === void 0 ? void 0 : original.abort;\n const close = original === null || original === void 0 ? void 0 : original.close;\n const start = original === null || original === void 0 ? void 0 : original.start;\n const type = original === null || original === void 0 ? void 0 : original.type;\n const write = original === null || original === void 0 ? void 0 : original.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original, `${context} has member 'write' that`),\n type\n };\n}\nfunction convertUnderlyingSinkAbortCallback(fn, original, context) {\n assertFunction(fn, context);\n return (reason) => promiseCall(fn, original, [reason]);\n}\nfunction convertUnderlyingSinkCloseCallback(fn, original, context) {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\nfunction convertUnderlyingSinkStartCallback(fn, original, context) {\n assertFunction(fn, context);\n return (controller) => reflectCall(fn, original, [controller]);\n}\nfunction convertUnderlyingSinkWriteCallback(fn, original, context) {\n assertFunction(fn, context);\n return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);\n}\n\nfunction assertWritableStream(x, context) {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n constructor(rawUnderlyingSink = {}, rawStrategy = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n }\n else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n InitializeWritableStream(this);\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked() {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException$2('locked');\n }\n return IsWritableStreamLocked(this);\n }\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason = undefined) {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException$2('abort'));\n }\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n return WritableStreamAbort(this, reason);\n }\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException$2('close'));\n }\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n return WritableStreamClose(this);\n }\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter() {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException$2('getWriter');\n }\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n// Abstract operations for the WritableStream.\nfunction AcquireWritableStreamDefaultWriter(stream) {\n return new WritableStreamDefaultWriter(stream);\n}\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {\n const stream = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n const controller = Object.create(WritableStreamDefaultController.prototype);\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\nfunction InitializeWritableStream(stream) {\n stream._state = 'writable';\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n stream._writer = undefined;\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined;\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\nfunction IsWritableStream(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n return true;\n}\nfunction IsWritableStreamLocked(stream) {\n if (stream._writer === undefined) {\n return false;\n }\n return true;\n}\nfunction WritableStreamAbort(stream, reason) {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n const promise = newPromise((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest._promise = promise;\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n return promise;\n}\nfunction WritableStreamClose(stream) {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n const promise = newPromise((resolve, reject) => {\n const closeRequest = {\n _resolve: resolve,\n _reject: reject\n };\n stream._closeRequest = closeRequest;\n });\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n return promise;\n}\n// WritableStream API exposed for controllers.\nfunction WritableStreamAddWriteRequest(stream) {\n const promise = newPromise((resolve, reject) => {\n const writeRequest = {\n _resolve: resolve,\n _reject: reject\n };\n stream._writeRequests.push(writeRequest);\n });\n return promise;\n}\nfunction WritableStreamDealWithRejection(stream, error) {\n const state = stream._state;\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n WritableStreamFinishErroring(stream);\n}\nfunction WritableStreamStartErroring(stream, reason) {\n const controller = stream._writableStreamController;\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\nfunction WritableStreamFinishErroring(stream) {\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(promise, () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n }, (reason) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\nfunction WritableStreamFinishInFlightWrite(stream) {\n stream._inFlightWriteRequest._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\nfunction WritableStreamFinishInFlightWriteWithError(stream, error) {\n stream._inFlightWriteRequest._reject(error);\n stream._inFlightWriteRequest = undefined;\n WritableStreamDealWithRejection(stream, error);\n}\nfunction WritableStreamFinishInFlightClose(stream) {\n stream._inFlightCloseRequest._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n const state = stream._state;\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n stream._state = 'closed';\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n}\nfunction WritableStreamFinishInFlightCloseWithError(stream, error) {\n stream._inFlightCloseRequest._reject(error);\n stream._inFlightCloseRequest = undefined;\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream) {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n return true;\n}\nfunction WritableStreamHasOperationMarkedInFlight(stream) {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n return true;\n}\nfunction WritableStreamMarkCloseRequestInFlight(stream) {\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream) {\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\n if (stream._closeRequest !== undefined) {\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\nfunction WritableStreamUpdateBackpressure(stream, backpressure) {\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n }\n else {\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n stream._backpressure = backpressure;\n}\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nclass WritableStreamDefaultWriter {\n constructor(stream) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n this._ownerWritableStream = stream;\n stream._writer = this;\n const state = stream._state;\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n }\n else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n defaultWriterClosedPromiseInitialize(this);\n }\n else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n }\n else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n }\n else {\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed() {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n return this._closedPromise;\n }\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize() {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready() {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n return this._readyPromise;\n }\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason = undefined) {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close() {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n const stream = this._ownerWritableStream;\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n return WritableStreamDefaultWriterClose(this);\n }\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock() {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n const stream = this._ownerWritableStream;\n if (stream === undefined) {\n return;\n }\n WritableStreamDefaultWriterRelease(this);\n }\n write(chunk = undefined) {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n// Abstract operations for the WritableStreamDefaultWriter.\nfunction IsWritableStreamDefaultWriter(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n return true;\n}\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\nfunction WritableStreamDefaultWriterAbort(writer, reason) {\n const stream = writer._ownerWritableStream;\n return WritableStreamAbort(stream, reason);\n}\nfunction WritableStreamDefaultWriterClose(writer) {\n const stream = writer._ownerWritableStream;\n return WritableStreamClose(stream);\n}\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n return WritableStreamDefaultWriterClose(writer);\n}\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n }\n else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n }\n else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\nfunction WritableStreamDefaultWriterGetDesiredSize(writer) {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\nfunction WritableStreamDefaultWriterRelease(writer) {\n const stream = writer._ownerWritableStream;\n const releasedError = new TypeError(`Writer was released and can no longer be used to monitor the stream's closedness`);\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n stream._writer = undefined;\n writer._ownerWritableStream = undefined;\n}\nfunction WritableStreamDefaultWriterWrite(writer, chunk) {\n const stream = writer._ownerWritableStream;\n const controller = stream._writableStreamController;\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n const promise = WritableStreamAddWriteRequest(stream);\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n return promise;\n}\nconst closeSentinel = {};\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nclass WritableStreamDefaultController {\n constructor() {\n throw new TypeError('Illegal constructor');\n }\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e = undefined) {\n if (!IsWritableStreamDefaultController(this)) {\n throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n WritableStreamDefaultControllerError(this, e);\n }\n /** @internal */\n [AbortSteps](reason) {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n error: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n// Abstract operations implementing interface required by the WritableStream.\nfunction IsWritableStreamDefaultController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n return true;\n}\nfunction SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined;\n controller._queueTotalSize = undefined;\n ResetQueue(controller);\n controller._started = false;\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(startPromise, () => {\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }, r => {\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n });\n}\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n let startAlgorithm = () => undefined;\n let writeAlgorithm = () => promiseResolvedWith(undefined);\n let closeAlgorithm = () => promiseResolvedWith(undefined);\n let abortAlgorithm = () => promiseResolvedWith(undefined);\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort(reason);\n }\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n}\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller) {\n controller._writeAlgorithm = undefined;\n controller._closeAlgorithm = undefined;\n controller._abortAlgorithm = undefined;\n controller._strategySizeAlgorithm = undefined;\n}\nfunction WritableStreamDefaultControllerClose(controller) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\nfunction WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\n try {\n return controller._strategySizeAlgorithm(chunk);\n }\n catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\nfunction WritableStreamDefaultControllerGetDesiredSize(controller) {\n return controller._strategyHWM - controller._queueTotalSize;\n}\nfunction WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n }\n catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n// Abstract operations for the WritableStreamDefaultController.\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\n const stream = controller._controlledWritableStream;\n if (!controller._started) {\n return;\n }\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n const state = stream._state;\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n if (controller._queue.length === 0) {\n return;\n }\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n }\n else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\nfunction WritableStreamDefaultControllerProcessClose(controller) {\n const stream = controller._controlledWritableStream;\n WritableStreamMarkCloseRequestInFlight(stream);\n DequeueValue(controller);\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(sinkClosePromise, () => {\n WritableStreamFinishInFlightClose(stream);\n }, reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n });\n}\nfunction WritableStreamDefaultControllerProcessWrite(controller, chunk) {\n const stream = controller._controlledWritableStream;\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(sinkWritePromise, () => {\n WritableStreamFinishInFlightWrite(stream);\n const state = stream._state;\n DequeueValue(controller);\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }, reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n });\n}\nfunction WritableStreamDefaultControllerGetBackpressure(controller) {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\nfunction WritableStreamDefaultControllerError(controller, error) {\n const stream = controller._controlledWritableStream;\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n// Helper functions for the WritableStream.\nfunction streamBrandCheckException$2(name) {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n// Helper functions for the WritableStreamDefaultWriter.\nfunction defaultWriterBrandCheckException(name) {\n return new TypeError(`WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\nfunction defaultWriterLockException(name) {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\nfunction defaultWriterClosedPromiseInitialize(writer) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\nfunction defaultWriterClosedPromiseReject(writer, reason) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\nfunction defaultWriterClosedPromiseResetToRejected(writer, reason) {\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\nfunction defaultWriterClosedPromiseResolve(writer) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\nfunction defaultWriterReadyPromiseInitialize(writer) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\nfunction defaultWriterReadyPromiseReject(writer, reason) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\nfunction defaultWriterReadyPromiseReset(writer) {\n defaultWriterReadyPromiseInitialize(writer);\n}\nfunction defaultWriterReadyPromiseResetToRejected(writer, reason) {\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\nfunction defaultWriterReadyPromiseResolve(writer) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n\nfunction isAbortSignal(value) {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof value.aborted === 'boolean';\n }\n catch (_a) {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/// \nconst NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\n\n/// \nfunction isDOMExceptionConstructor(ctor) {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new ctor();\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction createDOMExceptionPolyfill() {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(message, name) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n };\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n// eslint-disable-next-line no-redeclare\nconst DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nfunction ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\n const reader = AcquireReadableStreamDefaultReader(source);\n const writer = AcquireWritableStreamDefaultWriter(dest);\n source._disturbed = true;\n let shuttingDown = false;\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith(undefined);\n return newPromise((resolve, reject) => {\n let abortAlgorithm;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException$1('Aborted', 'AbortError');\n const actions = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n signal.addEventListener('abort', abortAlgorithm);\n }\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise((resolveLoop, rejectLoop) => {\n function next(done) {\n if (done) {\n resolveLoop();\n }\n else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n next(false);\n });\n }\n function pipeStep() {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(reader, {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n });\n });\n });\n }\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n }\n else {\n shutdown(true, storedError);\n }\n });\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n }\n else {\n shutdown(true, storedError);\n }\n });\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n }\n else {\n shutdown();\n }\n });\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n }\n else {\n shutdown(true, destClosed);\n }\n }\n setPromiseIsHandledToTrue(pipeLoop());\n function waitForWritesToFinish() {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(currentWrite, () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined);\n }\n function isOrBecomesErrored(stream, promise, action) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n }\n else {\n uponRejection(promise, action);\n }\n }\n function isOrBecomesClosed(stream, promise, action) {\n if (stream._state === 'closed') {\n action();\n }\n else {\n uponFulfillment(promise, action);\n }\n }\n function shutdownWithAction(action, originalIsError, originalError) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n }\n else {\n doTheRest();\n }\n function doTheRest() {\n uponPromise(action(), () => finalize(originalIsError, originalError), newError => finalize(true, newError));\n }\n }\n function shutdown(isError, error) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n }\n else {\n finalize(isError, error);\n }\n }\n function finalize(isError, error) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n }\n else {\n resolve(undefined);\n }\n }\n });\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nclass ReadableStreamDefaultController {\n constructor() {\n throw new TypeError('Illegal constructor');\n }\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize() {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('desiredSize');\n }\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close() {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('close');\n }\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n ReadableStreamDefaultControllerClose(this);\n }\n enqueue(chunk = undefined) {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('enqueue');\n }\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e = undefined) {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException$1('error');\n }\n ReadableStreamDefaultControllerError(this, e);\n }\n /** @internal */\n [CancelSteps](reason) {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n /** @internal */\n [PullSteps](readRequest) {\n const stream = this._controlledReadableStream;\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n }\n else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n readRequest._chunkSteps(chunk);\n }\n else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n// Abstract operations for the ReadableStreamDefaultController.\nfunction IsReadableStreamDefaultController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n return true;\n}\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n controller._pulling = true;\n const pullPromise = controller._pullAlgorithm();\n uponPromise(pullPromise, () => {\n controller._pulling = false;\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n }, e => {\n ReadableStreamDefaultControllerError(controller, e);\n });\n}\nfunction ReadableStreamDefaultControllerShouldCallPull(controller) {\n const stream = controller._controlledReadableStream;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n if (!controller._started) {\n return false;\n }\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n if (desiredSize > 0) {\n return true;\n }\n return false;\n}\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller) {\n controller._pullAlgorithm = undefined;\n controller._cancelAlgorithm = undefined;\n controller._strategySizeAlgorithm = undefined;\n}\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\nfunction ReadableStreamDefaultControllerClose(controller) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n const stream = controller._controlledReadableStream;\n controller._closeRequested = true;\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\nfunction ReadableStreamDefaultControllerEnqueue(controller, chunk) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n const stream = controller._controlledReadableStream;\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n }\n else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n }\n catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n }\n catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\nfunction ReadableStreamDefaultControllerError(controller, e) {\n const stream = controller._controlledReadableStream;\n if (stream._state !== 'readable') {\n return;\n }\n ResetQueue(controller);\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\nfunction ReadableStreamDefaultControllerGetDesiredSize(controller) {\n const state = controller._controlledReadableStream._state;\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n return controller._strategyHWM - controller._queueTotalSize;\n}\n// This is used in the implementation of TransformStream.\nfunction ReadableStreamDefaultControllerHasBackpressure(controller) {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n return true;\n}\nfunction ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\n const state = controller._controlledReadableStream._state;\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n return false;\n}\nfunction SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n controller._controlledReadableStream = stream;\n controller._queue = undefined;\n controller._queueTotalSize = undefined;\n ResetQueue(controller);\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n stream._readableStreamController = controller;\n const startResult = startAlgorithm();\n uponPromise(promiseResolvedWith(startResult), () => {\n controller._started = true;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }, r => {\n ReadableStreamDefaultControllerError(controller, r);\n });\n}\nfunction SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\n const controller = Object.create(ReadableStreamDefaultController.prototype);\n let startAlgorithm = () => undefined;\n let pullAlgorithm = () => promiseResolvedWith(undefined);\n let cancelAlgorithm = () => promiseResolvedWith(undefined);\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel(reason);\n }\n SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n}\n// Helper functions for the ReadableStreamDefaultController.\nfunction defaultControllerBrandCheckException$1(name) {\n return new TypeError(`ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n\nfunction ReadableStreamTee(stream, cloneForBranch2) {\n const reader = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1;\n let reason2;\n let branch1;\n let branch2;\n let resolveCancelPromise;\n const cancelPromise = newPromise(resolve => {\n resolveCancelPromise = resolve;\n });\n function pullAlgorithm() {\n if (reading) {\n return promiseResolvedWith(undefined);\n }\n reading = true;\n const readRequest = {\n _chunkSteps: value => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n reading = false;\n const value1 = value;\n const value2 = value;\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // value2 = StructuredDeserialize(StructuredSerialize(value2));\n // }\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promiseResolvedWith(undefined);\n }\n function cancel1Algorithm(reason) {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n function cancel2Algorithm(reason) {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n function startAlgorithm() {\n // do nothing\n }\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n uponRejection(reader._closedPromise, (r) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n return [branch1, branch2];\n}\n\nfunction convertUnderlyingDefaultOrByteSource(source, context) {\n assertDictionary(source, context);\n const original = source;\n const autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;\n const cancel = original === null || original === void 0 ? void 0 : original.cancel;\n const pull = original === null || original === void 0 ? void 0 : original.pull;\n const start = original === null || original === void 0 ? void 0 : original.start;\n const type = original === null || original === void 0 ? void 0 : original.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, `${context} has member 'autoAllocateChunkSize' that`),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\nfunction convertUnderlyingSourceCancelCallback(fn, original, context) {\n assertFunction(fn, context);\n return (reason) => promiseCall(fn, original, [reason]);\n}\nfunction convertUnderlyingSourcePullCallback(fn, original, context) {\n assertFunction(fn, context);\n return (controller) => promiseCall(fn, original, [controller]);\n}\nfunction convertUnderlyingSourceStartCallback(fn, original, context) {\n assertFunction(fn, context);\n return (controller) => reflectCall(fn, original, [controller]);\n}\nfunction convertReadableStreamType(type, context) {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n\nfunction convertReaderOptions(options, context) {\n assertDictionary(options, context);\n const mode = options === null || options === void 0 ? void 0 : options.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\nfunction convertReadableStreamReaderMode(mode, context) {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n\nfunction convertIteratorOptions(options, context) {\n assertDictionary(options, context);\n const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n\nfunction convertPipeOptions(options, context) {\n assertDictionary(options, context);\n const preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;\n const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n const preventClose = options === null || options === void 0 ? void 0 : options.preventClose;\n const signal = options === null || options === void 0 ? void 0 : options.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\nfunction assertAbortSignal(signal, context) {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n\nfunction convertReadableWritablePair(pair, context) {\n assertDictionary(pair, context);\n const readable = pair === null || pair === void 0 ? void 0 : pair.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n const writable = pair === null || pair === void 0 ? void 0 : pair.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n return { readable, writable };\n}\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nclass ReadableStream {\n constructor(rawUnderlyingSource = {}, rawStrategy = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n }\n else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n InitializeReadableStream(this);\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\n }\n else {\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\n }\n }\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked() {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('locked');\n }\n return IsReadableStreamLocked(this);\n }\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason = undefined) {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException$1('cancel'));\n }\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n return ReadableStreamCancel(this, reason);\n }\n getReader(rawOptions = undefined) {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('getReader');\n }\n const options = convertReaderOptions(rawOptions, 'First parameter');\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n return AcquireReadableStreamBYOBReader(this);\n }\n pipeThrough(rawTransform, rawOptions = {}) {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n const promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n setPromiseIsHandledToTrue(promise);\n return transform.readable;\n }\n pipeTo(destination, rawOptions = {}) {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\n }\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`));\n }\n let options;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n }\n catch (e) {\n return promiseRejectedWith(e);\n }\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\n }\n return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n }\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee() {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('tee');\n }\n const branches = ReadableStreamTee(this);\n return CreateArrayFromList(branches);\n }\n values(rawOptions = undefined) {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException$1('values');\n }\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n }\n}\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n// Abstract operations for the ReadableStream.\n// Throws if and only if startAlgorithm throws.\nfunction CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {\n const stream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n const controller = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\nfunction InitializeReadableStream(stream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\nfunction IsReadableStream(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n return true;\n}\nfunction IsReadableStreamLocked(stream) {\n if (stream._reader === undefined) {\n return false;\n }\n return true;\n}\n// ReadableStream API exposed for controllers.\nfunction ReadableStreamCancel(stream, reason) {\n stream._disturbed = true;\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n ReadableStreamClose(stream);\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\nfunction ReadableStreamClose(stream) {\n stream._state = 'closed';\n const reader = stream._reader;\n if (reader === undefined) {\n return;\n }\n defaultReaderClosedPromiseResolve(reader);\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\nfunction ReadableStreamError(stream, e) {\n stream._state = 'errored';\n stream._storedError = e;\n const reader = stream._reader;\n if (reader === undefined) {\n return;\n }\n defaultReaderClosedPromiseReject(reader, e);\n if (IsReadableStreamDefaultReader(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n reader._readRequests = new SimpleQueue();\n }\n else {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n// Helper functions for the ReadableStream.\nfunction streamBrandCheckException$1(name) {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n\nfunction convertQueuingStrategyInit(init, context) {\n assertDictionary(init, context);\n const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n\nconst byteLengthSizeFunction = function size(chunk) {\n return chunk.byteLength;\n};\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nclass ByteLengthQueuingStrategy {\n constructor(options) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark() {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size() {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n// Helper functions for the ByteLengthQueuingStrategy.\nfunction byteLengthBrandCheckException(name) {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\nfunction IsByteLengthQueuingStrategy(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n return true;\n}\n\nconst countSizeFunction = function size() {\n return 1;\n};\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nclass CountQueuingStrategy {\n constructor(options) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark() {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size() {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n// Helper functions for the CountQueuingStrategy.\nfunction countBrandCheckException(name) {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\nfunction IsCountQueuingStrategy(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n return true;\n}\n\nfunction convertTransformer(original, context) {\n assertDictionary(original, context);\n const flush = original === null || original === void 0 ? void 0 : original.flush;\n const readableType = original === null || original === void 0 ? void 0 : original.readableType;\n const start = original === null || original === void 0 ? void 0 : original.start;\n const transform = original === null || original === void 0 ? void 0 : original.transform;\n const writableType = original === null || original === void 0 ? void 0 : original.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original, `${context} has member 'transform' that`),\n writableType\n };\n}\nfunction convertTransformerFlushCallback(fn, original, context) {\n assertFunction(fn, context);\n return (controller) => promiseCall(fn, original, [controller]);\n}\nfunction convertTransformerStartCallback(fn, original, context) {\n assertFunction(fn, context);\n return (controller) => reflectCall(fn, original, [controller]);\n}\nfunction convertTransformerTransformCallback(fn, original, context) {\n assertFunction(fn, context);\n return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);\n}\n\n// Class TransformStream\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nclass TransformStream {\n constructor(rawTransformer = {}, rawWritableStrategy = {}, rawReadableStrategy = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n let startPromise_resolve;\n const startPromise = newPromise(resolve => {\n startPromise_resolve = resolve;\n });\n InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n }\n else {\n startPromise_resolve(undefined);\n }\n }\n /**\n * The readable side of the transform stream.\n */\n get readable() {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n return this._readable;\n }\n /**\n * The writable side of the transform stream.\n */\n get writable() {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n return this._writable;\n }\n}\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\nfunction InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\n function startAlgorithm() {\n return startPromise;\n }\n function writeAlgorithm(chunk) {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n function abortAlgorithm(reason) {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n function closeAlgorithm() {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\n function pullAlgorithm() {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n function cancelAlgorithm(reason) {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined;\n stream._backpressureChangePromise = undefined;\n stream._backpressureChangePromise_resolve = undefined;\n TransformStreamSetBackpressure(stream, true);\n stream._transformStreamController = undefined;\n}\nfunction IsTransformStream(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n return true;\n}\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream, e) {\n ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\nfunction TransformStreamErrorWritableAndUnblockWrite(stream, e) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\nfunction TransformStreamSetBackpressure(stream, backpressure) {\n // Passes also when called during construction.\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n stream._backpressure = backpressure;\n}\n// Class TransformStreamDefaultController\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nclass TransformStreamDefaultController {\n constructor() {\n throw new TypeError('Illegal constructor');\n }\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize() {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n }\n enqueue(chunk = undefined) {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason = undefined) {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n TransformStreamDefaultControllerError(this, reason);\n }\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate() {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n TransformStreamDefaultControllerTerminate(this);\n }\n}\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n// Transform Stream Default Controller Abstract Operations\nfunction IsTransformStreamDefaultController(x) {\n if (!typeIsObject(x)) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n return true;\n}\nfunction SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\n const controller = Object.create(TransformStreamDefaultController.prototype);\n let transformAlgorithm = (chunk) => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk);\n return promiseResolvedWith(undefined);\n }\n catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n let flushAlgorithm = () => promiseResolvedWith(undefined);\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush(controller);\n }\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\nfunction TransformStreamDefaultControllerClearAlgorithms(controller) {\n controller._transformAlgorithm = undefined;\n controller._flushAlgorithm = undefined;\n}\nfunction TransformStreamDefaultControllerEnqueue(controller, chunk) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n }\n catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n throw stream._readable._storedError;\n }\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n TransformStreamSetBackpressure(stream, true);\n }\n}\nfunction TransformStreamDefaultControllerError(controller, e) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\nfunction TransformStreamDefaultControllerPerformTransform(controller, chunk) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\nfunction TransformStreamDefaultControllerTerminate(controller) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController;\n ReadableStreamDefaultControllerClose(readableController);\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n// TransformStreamDefaultSink Algorithms\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\n const controller = stream._transformStreamController;\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n });\n }\n return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream) {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n// TransformStreamDefaultSource Algorithms\nfunction TransformStreamDefaultSourcePullAlgorithm(stream) {\n // Invariant. Enforced by the promises returned by start() and pull().\n TransformStreamSetBackpressure(stream, false);\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n// Helper functions for the TransformStreamDefaultController.\nfunction defaultControllerBrandCheckException(name) {\n return new TypeError(`TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n// Helper functions for the TransformStream.\nfunction streamBrandCheckException(name) {\n return new TypeError(`TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n\nexport { ByteLengthQueuingStrategy, CountQueuingStrategy, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, TransformStream, TransformStreamDefaultController, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter };\n//# sourceMappingURL=ponyfill.es6.mjs.map\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nfunction assert(test) {\n if (!test) {\n throw new TypeError('Assertion failed');\n }\n}\n\nfunction noop() {\n return;\n}\nfunction typeIsObject(x) {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nfunction isStreamConstructor(ctor) {\n if (typeof ctor !== 'function') {\n return false;\n }\n var startCalled = false;\n try {\n new ctor({\n start: function () {\n startCalled = true;\n }\n });\n }\n catch (e) {\n // ignore\n }\n return startCalled;\n}\nfunction isReadableStream(readable) {\n if (!typeIsObject(readable)) {\n return false;\n }\n if (typeof readable.getReader !== 'function') {\n return false;\n }\n return true;\n}\nfunction isReadableStreamConstructor(ctor) {\n if (!isStreamConstructor(ctor)) {\n return false;\n }\n if (!isReadableStream(new ctor())) {\n return false;\n }\n return true;\n}\nfunction isWritableStream(writable) {\n if (!typeIsObject(writable)) {\n return false;\n }\n if (typeof writable.getWriter !== 'function') {\n return false;\n }\n return true;\n}\nfunction isWritableStreamConstructor(ctor) {\n if (!isStreamConstructor(ctor)) {\n return false;\n }\n if (!isWritableStream(new ctor())) {\n return false;\n }\n return true;\n}\nfunction isTransformStream(transform) {\n if (!typeIsObject(transform)) {\n return false;\n }\n if (!isReadableStream(transform.readable)) {\n return false;\n }\n if (!isWritableStream(transform.writable)) {\n return false;\n }\n return true;\n}\nfunction isTransformStreamConstructor(ctor) {\n if (!isStreamConstructor(ctor)) {\n return false;\n }\n if (!isTransformStream(new ctor())) {\n return false;\n }\n return true;\n}\nfunction supportsByobReader(readable) {\n try {\n var reader = readable.getReader({ mode: 'byob' });\n reader.releaseLock();\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction supportsByteSource(ctor) {\n try {\n new ctor({ type: 'bytes' });\n return true;\n }\n catch (_a) {\n return false;\n }\n}\n\nfunction createReadableStreamWrapper(ctor) {\n assert(isReadableStreamConstructor(ctor));\n var byteSourceSupported = supportsByteSource(ctor);\n return function (readable, _a) {\n var _b = _a === void 0 ? {} : _a, type = _b.type;\n type = parseReadableType(type);\n if (type === 'bytes' && !byteSourceSupported) {\n type = undefined;\n }\n if (readable.constructor === ctor) {\n if (type !== 'bytes' || supportsByobReader(readable)) {\n return readable;\n }\n }\n if (type === 'bytes') {\n var source = createWrappingReadableSource(readable, { type: type });\n return new ctor(source);\n }\n else {\n var source = createWrappingReadableSource(readable);\n return new ctor(source);\n }\n };\n}\nfunction createWrappingReadableSource(readable, _a) {\n var _b = _a === void 0 ? {} : _a, type = _b.type;\n assert(isReadableStream(readable));\n assert(readable.locked === false);\n type = parseReadableType(type);\n var source;\n if (type === 'bytes') {\n source = new WrappingReadableByteStreamSource(readable);\n }\n else {\n source = new WrappingReadableStreamDefaultSource(readable);\n }\n return source;\n}\nfunction parseReadableType(type) {\n var typeString = String(type);\n if (typeString === 'bytes') {\n return typeString;\n }\n else if (type === undefined) {\n return type;\n }\n else {\n throw new RangeError('Invalid type is specified');\n }\n}\nvar AbstractWrappingReadableStreamSource = /** @class */ (function () {\n function AbstractWrappingReadableStreamSource(underlyingStream) {\n this._underlyingReader = undefined;\n this._readerMode = undefined;\n this._readableStreamController = undefined;\n this._pendingRead = undefined;\n this._underlyingStream = underlyingStream;\n // always keep a reader attached to detect close/error\n this._attachDefaultReader();\n }\n AbstractWrappingReadableStreamSource.prototype.start = function (controller) {\n this._readableStreamController = controller;\n };\n AbstractWrappingReadableStreamSource.prototype.cancel = function (reason) {\n assert(this._underlyingReader !== undefined);\n return this._underlyingReader.cancel(reason);\n };\n AbstractWrappingReadableStreamSource.prototype._attachDefaultReader = function () {\n if (this._readerMode === \"default\" /* DEFAULT */) {\n return;\n }\n this._detachReader();\n var reader = this._underlyingStream.getReader();\n this._readerMode = \"default\" /* DEFAULT */;\n this._attachReader(reader);\n };\n AbstractWrappingReadableStreamSource.prototype._attachReader = function (reader) {\n var _this = this;\n assert(this._underlyingReader === undefined);\n this._underlyingReader = reader;\n var closed = this._underlyingReader.closed;\n if (!closed) {\n return;\n }\n closed\n .then(function () { return _this._finishPendingRead(); })\n .then(function () {\n if (reader === _this._underlyingReader) {\n _this._readableStreamController.close();\n }\n }, function (reason) {\n if (reader === _this._underlyingReader) {\n _this._readableStreamController.error(reason);\n }\n })\n .catch(noop);\n };\n AbstractWrappingReadableStreamSource.prototype._detachReader = function () {\n if (this._underlyingReader === undefined) {\n return;\n }\n this._underlyingReader.releaseLock();\n this._underlyingReader = undefined;\n this._readerMode = undefined;\n };\n AbstractWrappingReadableStreamSource.prototype._pullWithDefaultReader = function () {\n var _this = this;\n this._attachDefaultReader();\n // TODO Backpressure?\n var read = this._underlyingReader.read()\n .then(function (result) {\n var controller = _this._readableStreamController;\n if (result.done) {\n _this._tryClose();\n }\n else {\n controller.enqueue(result.value);\n }\n });\n this._setPendingRead(read);\n return read;\n };\n AbstractWrappingReadableStreamSource.prototype._tryClose = function () {\n try {\n this._readableStreamController.close();\n }\n catch (_a) {\n // already errored or closed\n }\n };\n AbstractWrappingReadableStreamSource.prototype._setPendingRead = function (readPromise) {\n var _this = this;\n var pendingRead;\n var finishRead = function () {\n if (_this._pendingRead === pendingRead) {\n _this._pendingRead = undefined;\n }\n };\n this._pendingRead = pendingRead = readPromise.then(finishRead, finishRead);\n };\n AbstractWrappingReadableStreamSource.prototype._finishPendingRead = function () {\n var _this = this;\n if (!this._pendingRead) {\n return undefined;\n }\n var afterRead = function () { return _this._finishPendingRead(); };\n return this._pendingRead.then(afterRead, afterRead);\n };\n return AbstractWrappingReadableStreamSource;\n}());\nvar WrappingReadableStreamDefaultSource = /** @class */ (function (_super) {\n __extends(WrappingReadableStreamDefaultSource, _super);\n function WrappingReadableStreamDefaultSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WrappingReadableStreamDefaultSource.prototype.pull = function () {\n return this._pullWithDefaultReader();\n };\n return WrappingReadableStreamDefaultSource;\n}(AbstractWrappingReadableStreamSource));\nfunction toUint8Array(view) {\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n}\nfunction copyArrayBufferView(from, to) {\n var fromArray = toUint8Array(from);\n var toArray = toUint8Array(to);\n toArray.set(fromArray, 0);\n}\nvar WrappingReadableByteStreamSource = /** @class */ (function (_super) {\n __extends(WrappingReadableByteStreamSource, _super);\n function WrappingReadableByteStreamSource(underlyingStream) {\n var _this = this;\n var supportsByob = supportsByobReader(underlyingStream);\n _this = _super.call(this, underlyingStream) || this;\n _this._supportsByob = supportsByob;\n return _this;\n }\n Object.defineProperty(WrappingReadableByteStreamSource.prototype, \"type\", {\n get: function () {\n return 'bytes';\n },\n enumerable: false,\n configurable: true\n });\n WrappingReadableByteStreamSource.prototype._attachByobReader = function () {\n if (this._readerMode === \"byob\" /* BYOB */) {\n return;\n }\n assert(this._supportsByob);\n this._detachReader();\n var reader = this._underlyingStream.getReader({ mode: 'byob' });\n this._readerMode = \"byob\" /* BYOB */;\n this._attachReader(reader);\n };\n WrappingReadableByteStreamSource.prototype.pull = function () {\n if (this._supportsByob) {\n var byobRequest = this._readableStreamController.byobRequest;\n if (byobRequest) {\n return this._pullWithByobRequest(byobRequest);\n }\n }\n return this._pullWithDefaultReader();\n };\n WrappingReadableByteStreamSource.prototype._pullWithByobRequest = function (byobRequest) {\n var _this = this;\n this._attachByobReader();\n // reader.read(view) detaches the input view, therefore we cannot pass byobRequest.view directly\n // create a separate buffer to read into, then copy that to byobRequest.view\n var buffer = new Uint8Array(byobRequest.view.byteLength);\n // TODO Backpressure?\n var read = this._underlyingReader.read(buffer)\n .then(function (result) {\n _this._readableStreamController;\n if (result.done) {\n _this._tryClose();\n byobRequest.respond(0);\n }\n else {\n copyArrayBufferView(result.value, byobRequest.view);\n byobRequest.respond(result.value.byteLength);\n }\n });\n this._setPendingRead(read);\n return read;\n };\n return WrappingReadableByteStreamSource;\n}(AbstractWrappingReadableStreamSource));\n\nfunction createWritableStreamWrapper(ctor) {\n assert(isWritableStreamConstructor(ctor));\n return function (writable) {\n if (writable.constructor === ctor) {\n return writable;\n }\n var sink = createWrappingWritableSink(writable);\n return new ctor(sink);\n };\n}\nfunction createWrappingWritableSink(writable) {\n assert(isWritableStream(writable));\n assert(writable.locked === false);\n var writer = writable.getWriter();\n return new WrappingWritableStreamSink(writer);\n}\nvar WrappingWritableStreamSink = /** @class */ (function () {\n function WrappingWritableStreamSink(underlyingWriter) {\n var _this = this;\n this._writableStreamController = undefined;\n this._pendingWrite = undefined;\n this._state = \"writable\" /* WRITABLE */;\n this._storedError = undefined;\n this._underlyingWriter = underlyingWriter;\n this._errorPromise = new Promise(function (resolve, reject) {\n _this._errorPromiseReject = reject;\n });\n this._errorPromise.catch(noop);\n }\n WrappingWritableStreamSink.prototype.start = function (controller) {\n var _this = this;\n this._writableStreamController = controller;\n this._underlyingWriter.closed\n .then(function () {\n _this._state = \"closed\" /* CLOSED */;\n })\n .catch(function (reason) { return _this._finishErroring(reason); });\n };\n WrappingWritableStreamSink.prototype.write = function (chunk) {\n var _this = this;\n var writer = this._underlyingWriter;\n // Detect past errors\n if (writer.desiredSize === null) {\n return writer.ready;\n }\n var writeRequest = writer.write(chunk);\n // Detect future errors\n writeRequest.catch(function (reason) { return _this._finishErroring(reason); });\n writer.ready.catch(function (reason) { return _this._startErroring(reason); });\n // Reject write when errored\n var write = Promise.race([writeRequest, this._errorPromise]);\n this._setPendingWrite(write);\n return write;\n };\n WrappingWritableStreamSink.prototype.close = function () {\n var _this = this;\n if (this._pendingWrite === undefined) {\n return this._underlyingWriter.close();\n }\n return this._finishPendingWrite().then(function () { return _this.close(); });\n };\n WrappingWritableStreamSink.prototype.abort = function (reason) {\n if (this._state === \"errored\" /* ERRORED */) {\n return undefined;\n }\n var writer = this._underlyingWriter;\n return writer.abort(reason);\n };\n WrappingWritableStreamSink.prototype._setPendingWrite = function (writePromise) {\n var _this = this;\n var pendingWrite;\n var finishWrite = function () {\n if (_this._pendingWrite === pendingWrite) {\n _this._pendingWrite = undefined;\n }\n };\n this._pendingWrite = pendingWrite = writePromise.then(finishWrite, finishWrite);\n };\n WrappingWritableStreamSink.prototype._finishPendingWrite = function () {\n var _this = this;\n if (this._pendingWrite === undefined) {\n return Promise.resolve();\n }\n var afterWrite = function () { return _this._finishPendingWrite(); };\n return this._pendingWrite.then(afterWrite, afterWrite);\n };\n WrappingWritableStreamSink.prototype._startErroring = function (reason) {\n var _this = this;\n if (this._state === \"writable\" /* WRITABLE */) {\n this._state = \"erroring\" /* ERRORING */;\n this._storedError = reason;\n var afterWrite = function () { return _this._finishErroring(reason); };\n if (this._pendingWrite === undefined) {\n afterWrite();\n }\n else {\n this._finishPendingWrite().then(afterWrite, afterWrite);\n }\n this._writableStreamController.error(reason);\n }\n };\n WrappingWritableStreamSink.prototype._finishErroring = function (reason) {\n if (this._state === \"writable\" /* WRITABLE */) {\n this._startErroring(reason);\n }\n if (this._state === \"erroring\" /* ERRORING */) {\n this._state = \"errored\" /* ERRORED */;\n this._errorPromiseReject(this._storedError);\n }\n };\n return WrappingWritableStreamSink;\n}());\n\nfunction createTransformStreamWrapper(ctor) {\n assert(isTransformStreamConstructor(ctor));\n return function (transform) {\n if (transform.constructor === ctor) {\n return transform;\n }\n var transformer = createWrappingTransformer(transform);\n return new ctor(transformer);\n };\n}\nfunction createWrappingTransformer(transform) {\n assert(isTransformStream(transform));\n var readable = transform.readable, writable = transform.writable;\n assert(readable.locked === false);\n assert(writable.locked === false);\n var reader = readable.getReader();\n var writer;\n try {\n writer = writable.getWriter();\n }\n catch (e) {\n reader.releaseLock(); // do not leak reader\n throw e;\n }\n return new WrappingTransformStreamTransformer(reader, writer);\n}\nvar WrappingTransformStreamTransformer = /** @class */ (function () {\n function WrappingTransformStreamTransformer(reader, writer) {\n var _this = this;\n this._transformStreamController = undefined;\n this._onRead = function (result) {\n if (result.done) {\n return;\n }\n _this._transformStreamController.enqueue(result.value);\n return _this._reader.read().then(_this._onRead);\n };\n this._onError = function (reason) {\n _this._flushReject(reason);\n _this._transformStreamController.error(reason);\n _this._reader.cancel(reason).catch(noop);\n _this._writer.abort(reason).catch(noop);\n };\n this._onTerminate = function () {\n _this._flushResolve();\n _this._transformStreamController.terminate();\n var error = new TypeError('TransformStream terminated');\n _this._writer.abort(error).catch(noop);\n };\n this._reader = reader;\n this._writer = writer;\n this._flushPromise = new Promise(function (resolve, reject) {\n _this._flushResolve = resolve;\n _this._flushReject = reject;\n });\n }\n WrappingTransformStreamTransformer.prototype.start = function (controller) {\n this._transformStreamController = controller;\n this._reader.read()\n .then(this._onRead)\n .then(this._onTerminate, this._onError);\n var readerClosed = this._reader.closed;\n if (readerClosed) {\n readerClosed\n .then(this._onTerminate, this._onError);\n }\n };\n WrappingTransformStreamTransformer.prototype.transform = function (chunk) {\n return this._writer.write(chunk);\n };\n WrappingTransformStreamTransformer.prototype.flush = function () {\n var _this = this;\n return this._writer.close()\n .then(function () { return _this._flushPromise; });\n };\n return WrappingTransformStreamTransformer;\n}());\n\nexport { createReadableStreamWrapper, createTransformStreamWrapper, createWrappingReadableSource, createWrappingTransformer, createWrappingWritableSink, createWritableStreamWrapper };\n//# sourceMappingURL=web-streams-adapter.mjs.map\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import BN from 'bn.js';\n\n/**\n * @fileoverview\n * BigInteger implementation of basic operations\n * Wrapper of bn.js library (wwww.github.com/indutny/bn.js)\n * @module biginteger/bn\n * @private\n */\n\n/**\n * @private\n */\nexport default class BigInteger {\n /**\n * Get a BigInteger (input must be big endian for strings and arrays)\n * @param {Number|String|Uint8Array} n - Value to convert\n * @throws {Error} on undefined input\n */\n constructor(n) {\n if (n === undefined) {\n throw new Error('Invalid BigInteger input');\n }\n\n this.value = new BN(n);\n }\n\n clone() {\n const clone = new BigInteger(null);\n this.value.copy(clone.value);\n return clone;\n }\n\n /**\n * BigInteger increment in place\n */\n iinc() {\n this.value.iadd(new BN(1));\n return this;\n }\n\n /**\n * BigInteger increment\n * @returns {BigInteger} this + 1.\n */\n inc() {\n return this.clone().iinc();\n }\n\n /**\n * BigInteger decrement in place\n */\n idec() {\n this.value.isub(new BN(1));\n return this;\n }\n\n /**\n * BigInteger decrement\n * @returns {BigInteger} this - 1.\n */\n dec() {\n return this.clone().idec();\n }\n\n\n /**\n * BigInteger addition in place\n * @param {BigInteger} x - Value to add\n */\n iadd(x) {\n this.value.iadd(x.value);\n return this;\n }\n\n /**\n * BigInteger addition\n * @param {BigInteger} x - Value to add\n * @returns {BigInteger} this + x.\n */\n add(x) {\n return this.clone().iadd(x);\n }\n\n /**\n * BigInteger subtraction in place\n * @param {BigInteger} x - Value to subtract\n */\n isub(x) {\n this.value.isub(x.value);\n return this;\n }\n\n /**\n * BigInteger subtraction\n * @param {BigInteger} x - Value to subtract\n * @returns {BigInteger} this - x.\n */\n sub(x) {\n return this.clone().isub(x);\n }\n\n /**\n * BigInteger multiplication in place\n * @param {BigInteger} x - Value to multiply\n */\n imul(x) {\n this.value.imul(x.value);\n return this;\n }\n\n /**\n * BigInteger multiplication\n * @param {BigInteger} x - Value to multiply\n * @returns {BigInteger} this * x.\n */\n mul(x) {\n return this.clone().imul(x);\n }\n\n /**\n * Compute value modulo m, in place\n * @param {BigInteger} m - Modulo\n */\n imod(m) {\n this.value = this.value.umod(m.value);\n return this;\n }\n\n /**\n * Compute value modulo m\n * @param {BigInteger} m - Modulo\n * @returns {BigInteger} this mod m.\n */\n mod(m) {\n return this.clone().imod(m);\n }\n\n /**\n * Compute modular exponentiation\n * Much faster than this.exp(e).mod(n)\n * @param {BigInteger} e - Exponent\n * @param {BigInteger} n - Modulo\n * @returns {BigInteger} this ** e mod n.\n */\n modExp(e, n) {\n // We use either Montgomery or normal reduction context\n // Montgomery requires coprime n and R (montogmery multiplier)\n // bn.js picks R as power of 2, so n must be odd\n const nred = n.isEven() ? BN.red(n.value) : BN.mont(n.value);\n const x = this.clone();\n x.value = x.value.toRed(nred).redPow(e.value).fromRed();\n return x;\n }\n\n /**\n * Compute the inverse of this value modulo n\n * Note: this and and n must be relatively prime\n * @param {BigInteger} n - Modulo\n * @returns {BigInteger} x such that this*x = 1 mod n\n * @throws {Error} if the inverse does not exist\n */\n modInv(n) {\n // invm returns a wrong result if the inverse does not exist\n if (!this.gcd(n).isOne()) {\n throw new Error('Inverse does not exist');\n }\n return new BigInteger(this.value.invm(n.value));\n }\n\n /**\n * Compute greatest common divisor between this and n\n * @param {BigInteger} n - Operand\n * @returns {BigInteger} gcd\n */\n gcd(n) {\n return new BigInteger(this.value.gcd(n.value));\n }\n\n /**\n * Shift this to the left by x, in place\n * @param {BigInteger} x - Shift value\n */\n ileftShift(x) {\n this.value.ishln(x.value.toNumber());\n return this;\n }\n\n /**\n * Shift this to the left by x\n * @param {BigInteger} x - Shift value\n * @returns {BigInteger} this << x.\n */\n leftShift(x) {\n return this.clone().ileftShift(x);\n }\n\n /**\n * Shift this to the right by x, in place\n * @param {BigInteger} x - Shift value\n */\n irightShift(x) {\n this.value.ishrn(x.value.toNumber());\n return this;\n }\n\n /**\n * Shift this to the right by x\n * @param {BigInteger} x - Shift value\n * @returns {BigInteger} this >> x.\n */\n rightShift(x) {\n return this.clone().irightShift(x);\n }\n\n /**\n * Whether this value is equal to x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n equal(x) {\n return this.value.eq(x.value);\n }\n\n /**\n * Whether this value is less than x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n lt(x) {\n return this.value.lt(x.value);\n }\n\n /**\n * Whether this value is less than or equal to x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n lte(x) {\n return this.value.lte(x.value);\n }\n\n /**\n * Whether this value is greater than x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n gt(x) {\n return this.value.gt(x.value);\n }\n\n /**\n * Whether this value is greater than or equal to x\n * @param {BigInteger} x\n * @returns {Boolean}\n */\n gte(x) {\n return this.value.gte(x.value);\n }\n\n isZero() {\n return this.value.isZero();\n }\n\n isOne() {\n return this.value.eq(new BN(1));\n }\n\n isNegative() {\n return this.value.isNeg();\n }\n\n isEven() {\n return this.value.isEven();\n }\n\n abs() {\n const res = this.clone();\n res.value = res.value.abs();\n return res;\n }\n\n /**\n * Get this value as a string\n * @returns {String} this value.\n */\n toString() {\n return this.value.toString();\n }\n\n /**\n * Get this value as an exact Number (max 53 bits)\n * Fails if this value is too large\n * @returns {Number}\n */\n toNumber() {\n return this.value.toNumber();\n }\n\n /**\n * Get value of i-th bit\n * @param {Number} i - Bit index\n * @returns {Number} Bit value.\n */\n getBit(i) {\n return this.value.testn(i) ? 1 : 0;\n }\n\n /**\n * Compute bit length\n * @returns {Number} Bit length.\n */\n bitLength() {\n return this.value.bitLength();\n }\n\n /**\n * Compute byte length\n * @returns {Number} Byte length.\n */\n byteLength() {\n return this.value.byteLength();\n }\n\n /**\n * Get Uint8Array representation of this number\n * @param {String} endian - Endianess of output array (defaults to 'be')\n * @param {Number} length - Of output array\n * @returns {Uint8Array}\n */\n toUint8Array(endian = 'be', length) {\n return this.value.toArrayLike(Uint8Array, endian, length);\n }\n}\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n // Note: this implementation is according to the original paper\n // by P. Montgomery, NOT the one by D. J. Bernstein.\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n var bytes = utils.toArray(bytes, enc);\n\n // TODO Curve448\n // Montgomery curve points must be represented in the compressed format\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (bytes.length === 33 && bytes[0] === 0x40)\n bytes = bytes.slice(1, 33).reverse(); // point must be little-endian\n if (bytes.length !== 32)\n throw new Error('Unknown point compression format');\n return this.point(bytes, 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n\n // Note: the output should always be little-endian\n // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n if (compact) {\n return [ 0x40 ].concat(this.getX().toArray('le', len));\n } else {\n return this.getX().toArray('be', len);\n }\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else if (options.type === 'mont')\n this.curve = new curve.mont(options);\n else throw new Error('Unknown curve type.');\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, n*G != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\n// https://tools.ietf.org/html/rfc7748#section-4.1\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n cofactor: '8',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n cofactor: '8',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.4\ndefineCurve('brainpoolP256r1', {\n type: 'short',\n prime: null,\n p: 'A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 2013481D 1F6E5377',\n a: '7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C E94A4B44 F330B5D9',\n b: '26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 6BCCDC18 FF8C07B6',\n n: 'A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 901E0E82 974856A7',\n hash: hash.sha256, // or 384, or 512\n gRed: false,\n g: [\n '8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262',\n '547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.6\ndefineCurve('brainpoolP384r1', {\n type: 'short',\n prime: null,\n p: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 12B1DA19 7FB71123' +\n 'ACD3A729 901D1A71 87470013 3107EC53',\n a: '7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 139165EF BA91F90F' +\n '8AA5814A 503AD4EB 04A8C7DD 22CE2826',\n b: '04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 2E880EA5 3EEB62D5' +\n '7CB43902 95DBC994 3AB78696 FA504C11',\n n: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 1F166E6C AC0425A7' +\n 'CF3AB6AF 6B7FC310 3B883202 E9046565',\n hash: hash.sha384, // or 512\n gRed: false,\n g: [\n '1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10' +\n 'E8E826E03436D646AAEF87B2E247D4AF1E',\n '8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129' +\n '280E4646217791811142820341263C5315'\n ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.7\ndefineCurve('brainpoolP512r1', {\n type: 'short',\n prime: null,\n p: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330871' +\n '7D4D9B00 9BC66842 AECDA12A E6A380E6 2881FF2F 2D82C685 28AA6056 583A48F3',\n a: '7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 A83441CA EA9863BC' +\n '2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA',\n b: '3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7' +\n '2BF2C7B9 E7C1AC4D 77FC94CA DC083E67 984050B7 5EBAE5DD 2809BD63 8016F723',\n n: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330870' +\n '553E5C41 4CA92619 41866119 7FAC1047 1DB1D381 085DDADD B5879682 9CA90069',\n hash: hash.sha512,\n gRed: false,\n g: [\n '81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D009' +\n '8EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822',\n '7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F81' +\n '11B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892'\n ]\n});\n\n// https://en.bitcoin.it/wiki/Secp256k1\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\n// TODO: should not validate for X25519\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc, compact) {\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // For Curve25519/Curve448 we have a specific procedure.\n // TODO Curve448\n if (this.ec.curve.type === 'mont') {\n var one = this.ec.curve.one;\n var mask = one.ushln(255 - 3).sub(one).ushln(3);\n this.priv = this.priv.or(one.ushln(255 - 1));\n this.priv = this.priv.and(mask);\n } else\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n // Key generation for curve25519 is simpler\n if (this.curve.type === 'mont') {\n var priv = new BN(drbg.generate(32));\n return this.keyFromPrivate(priv);\n }\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly, bitSize) {\n bitSize = bitSize || msg.byteLength() * 8;\n var delta = bitSize - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.truncateMsg = function truncateMSG(msg) {\n // Bit size is only determined correctly for Uint8Arrays and hex strings\n var bitSize;\n if (msg instanceof Uint8Array) {\n bitSize = msg.byteLength * 8;\n msg = this._truncateToN(new BN(msg, 16), false, bitSize);\n } else if (typeof msg === 'string') {\n bitSize = msg.length * 4;\n msg = this._truncateToN(new BN(msg, 16), false, bitSize);\n } else {\n msg = this._truncateToN(new BN(msg, 16));\n }\n return msg;\n}\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this.truncateMsg(msg);\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n // Fallback to the old code\n var ret = this._verify(this.truncateMsg(msg), signature, key) ||\n this._verify(this._truncateToN(new BN(msg, 16)), signature, key);\n return ret;\n};\n\nEC.prototype._verify = function _verify(msg, signature, key) {\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n if (params.hasOwnProperty('secret'))\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else {\n this._pubBytes = parseBytes(params.pub);\n if (this._pubBytes && this._pubBytes.length === 33 &&\n this._pubBytes[0] === 0x40)\n this._pubBytes = this._pubBytes.slice(1, 33);\n if (this._pubBytes && this._pubBytes.length !== 32)\n throw new Error('Unknown point compression format');\n }\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n // https://tools.ietf.org/html/rfc8032#section-5.1.5\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc, compact) {\n return utils.encode((compact ? [ 0x40 ] : []).concat(this.pubBytes()), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\nvar hash = require('hash.js');\nvar HmacDRBG = require('hmac-drbg');\nvar rand = require('brorand');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n var curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.curve.n.toArray()\n });\n\n return this.keyFromSecret(drbg.generate(32));\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"8eb42f38\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"todo:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktodo\"] = self[\"webpackChunktodo\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n reloadDocument?: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\ntype PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(\n branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname)\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:(\\w+)(\\?)?/g, (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction safelyDecodeURI(value: string) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (isPathRelative || toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how works and a\n // major reason we call this a \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized =\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\n (!initialMatches.some((m) => m.route.loader) || init.hydrationData != null);\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location);\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n viewTransitionOpts?: ViewTransitionOpts\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n subscribers.forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: viewTransitionOpts,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n viewTransitionOpts\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n });\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(location, {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n });\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n if (!isUninterruptedRevalidation) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState({\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n });\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath })\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error);\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, submission);\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(key, routeId, path, match, matches, submission);\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error);\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n let fetcher = getSubmittingFetcher(submission, existingFetcher);\n state.fetchers.set(key, fetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n if (deletedFetchers.has(key)) {\n state.fetchers.set(key, getDoneFetcher(undefined));\n updateState({ fetchers: new Map(state.fetchers) });\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n let doneFetcher = getDoneFetcher(undefined);\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n return;\n } else {\n fetchRedirectIds.add(key);\n let loadingFetcher = getLoadingFetcher(submission);\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n // Put this fetcher into it's loading state\n let loadingFetcher = getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n if (deletedFetchers.has(key)) {\n state.fetchers.set(key, getDoneFetcher(undefined));\n updateState({ fetchers: new Map(state.fetchers) });\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n let doneFetcher = getDoneFetcher(undefined);\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\n }\n }),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function setFetcherError(key: string, routeId: string, error: any) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n });\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId != null && relative !== \"path\") {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route. When using relative:path,\n // fromRouteId is ignored since that is always relative to the current\n // location path\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n if (match.route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n if (match.route.loader == null) {\n return false;\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (!matches.some((m) => m.route.id === f.routeId)) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\n }\n\n let data: any;\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n data = await result.json();\n } else {\n data = await result.text();\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponseImpl(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject extends NavigationContextObject {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error || state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error = match.route.id ? errors?.[match.route.id] : null;\n // Only data routers handle errors\n let errorElement: React.ReactNode | null = null;\n if (dataRouterState) {\n errorElement = match.route.errorElement || defaultErrorElement;\n }\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useActionData must be used inside a RouteContext`);\n\n return Object.values(state?.actionData || {})[0];\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n future?: Partial;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a