Commit d7ad9cc0 authored by taco@waag.org's avatar taco@waag.org
Browse files

signed test images and patched PNG call in blockhash library

parent 956fb1df
......@@ -285,7 +285,7 @@ if(true) {_paq.push(["trackPageView"]);_paq.push(["setIgnoreClasses", ["no-track
<div class="view-content">
<div>
<div class="visual"> <picture>
<img data-pop-v0-img="eyJAY29udGV4dCI6Imh0dHBzOi8vaXJtYS5hcHAvbGQvc2lnbmF0dXJlL3YyIiwic2lnbmF0dXJlIjpbeyJjIjoiaWZCaHBCRUh2NDhrYktBUHNQZllINElrNGRyYUp4QTlLTGkvcVlqSHZiaz0iLCJBIjoiWTY5VlhwR2daSUM0MWFLRlFaSTNJOUh0MWpvK2xqNWxPcTZ0aUdVMnc0U0F2TlNYYXRJM3dIYUszYkJhSWhoOXdmbzZDSTlxN0pPRGp3NkwrVW4raTcvTk1WVE05cWpqaU11S1U5ZHUrMndsY1NGUlhTcmdqK1U0bVVWOEQ0N1J4MEVaRlB1MmJEeW5NNHRQRDdpZ2duUkx2Tks1ZjFETnhYNjFtN0lRSGs1QWhuQzlheWlUZ2hmTHRnZXkxRjluTUVUTFZJTHFWUjFyRDRocGVGbmx3QTYxSTcrcE1kVTIrallLdENNZmlFTWVoOEFoWFlwdGZlbHE0R0xGT2QvdkVFSDFGbUVldmJjOHlqL0JtT2lWNGxDNTh0SEpjb0hwck1yUDVNMUNxSk9uU3dDcGpMQkVaZjJyUGk4MDF4TWZIUXlxMXdLUlFsajBzRUhCYmdNcGV3PT0iLCJlX3Jlc3BvbnNlIjoiZVUwOWFaeTJTZ0JhbEUrU205Nytubkw2T2tPU2ZFOVQ5NWhRRlBIaStlN1lMSDhYeUpldTlKUFFSaTc1b3JiY0xsR3k2Tnhic3p0YWg0R3A2aTRKIiwidl9yZXNwb25zZSI6IkFpL25mTkJjYnU0VGVJUGZ3cGlhNy9tbHBDWjZvMjZNZmxwQ1UrVmo2R05Ddjc0M2lZK21hakZGQk4vU3J0YUhML1VBNGlqWXBxSHl1SmloblZGTSt1Sy9MTjJ2bnpqd1VOaWlkUXVqYmNBYk0rdE5NWnJ3MDh2SlRwVHFRN2x3VWlwa3VmOXJPRlg1VXBzQ1dIdW1zTGZGUHBsT1h6OGNHa2F6OVg5UzJSVURLYjlnZENkRlpJdDBicXpNWFhLaGpyTW4weURQSG1LNlU4R1RJSks5aTZja2xJazk0by9kazhDK2JyZm9nN2QzdXdlOG9HdFIzbTJwSkhWYUlhSXliY2JOa2NhTXpubHhHK25hN0JVZXNuL1VTWHF5dzRDYUErUllCbDdPbE9jcUZneGNMYUpXc0l4eEtFZ2dwbDBDQU83WTFwRVpzSUNDSGVIOGlPcnJHdHFlT3RVR0hVSTFYNUovZWh2dTdSOGk2ckVhMHdUZ3dUK2FPSGI5TUJCdFFvVzkrcTJwbXFOQlZ4U3E0dkhyT2k5Y0Q1S0xieEhyemJZWDdQaVEwMEcyMTQ3aEJzdmw5R29zeTl4bXllQTJIazFRMVNhdTJZdzc4VUNzVDJNZVdORHZOL2lFZUh1Y25RN3kzelFON2NhblZKQ1B4R0lVOTlIVEkxREg5RVdPVVlLRVVXd21YNzRGTmJBZnk2bUxXR3M9IiwiYV9yZXNwb25zZXMiOnsiMCI6Ijkwa29lTWhHNFVzUjF1U3JVZ204SnFQTlJrTzBPUU9FSHVmSXVWdk5OekhJTWp1S0hWL3BSbi9SMVN1VGZmZzh4c2pSUFB0WVhQbGFVQ1EvKzdzcHVHZXliSjkyRUJuVGNKY1lOTXNUSVljPSIsIjMiOiJvdkVVUGhPcXNxSDhESGM5QWJXS3dFd3dQK0ErdnpUWXVmYTRsUlhIRFdoenY2SHZhc3BjN2NRZWd6bHVyL2dDVFdWaHlUUWNKaVVFQ25Xa0RCM1lDazRDSXFZZ0M5ZkZTOFlPWm95aWQ2VT0ifSwiYV9kaXNjbG9zZWQiOnsiMSI6IkF3QUtwd0EwQUFBOFFGdTFwSnM3ZDdqVVpKN0pzZ2FKIiwiMiI6IjZNTEczb0R1d3NMT1hON2t6dz09In0sInJhbmdlcHJvb2ZzIjpudWxsfV0sImluZGljZXMiOltbeyJjcmVkIjowLCJhdHRyIjoyfV1dLCJub25jZSI6Ik5GbWF3aHIwVVFBMlI4R2xrUmhVSEE9PSIsImNvbnRleHQiOiJBUT09IiwidGltZXN0YW1wIjp7IlRpbWUiOjE2NDk3NTUyMjksIlNlcnZlclVybCI6Imh0dHBzOi8vaXJtYS5zaWRuLm5sL2F0dW1kLyIsIlNpZyI6eyJBbGciOiJlZDI1NTE5IiwiRGF0YSI6ImtuRlFxdU9rYWZ1NEhYZ3ZCc1lXODhhYnZuWm5HeUx5K1hGR0Zycm5oUFBPMGt6dkp5dk1jWG1uL2FRcUpOb1dVNWJ5UHZEVXlvZkpDa3k1UGFTWEJ3PT0iLCJQdWJsaWNLZXkiOiJNS2RYeEp4RVdQUkl3TlA3U3V2UDBKL00vTlY1MVZadnFDeU8rN2VEd0o4PSJ9fX0=" src="https://snotolf.waag.org/waag/sites/waag/files/2021-03/29031756258_3d2cb5e695_b.jpeg" alt="Public Stack Summit iPad" typeof="foaf:Image" />
<img data-pop-v0-img="eyJAY29udGV4dCI6Imh0dHBzOi8vaXJtYS5hcHAvbGQvc2lnbmF0dXJlL3YyIiwic2lnbmF0dXJlIjpbeyJjIjoib1psWWpESTJhaGdSdTdNUzFWdHAyNy85NWh4bU5qMkovZWlXVHJCSmx2ST0iLCJBIjoiSW9HRUNsMUsrMzJOQjE4WWVJYkptRHJlelR3a1g2MkZSL2Fpc2R0NENaK2t6Z2hNUUZLQXBXdkNOUjRHQjdrQWQ2dzVlekYwWlR3UE8yd21QSDdFL2h6dktvZHZJd0YwakU5L1NUczA3Uk9kdEUwWnRCZTBLcVRRbUJISm5qcVorZVo1OHVQcGVudHVvazdDOTNqSXBwMkNTVjBGVFZZLzIxQkk3VDE4RWs5cEFPejM4anJrdE10Y3NQVUtCVXdWSlY4N0ZNRmlUUWVtSzc1QU0yQWFvT0N2SjVOdHFoWVA2RGl5RkFTTSsweUZvNjdPMzJrSTdhZGVhMUlhWjk0a2dSb3ZDWE1PTmM4bVV2a2lZdW50ZStnRnZNbGg5Y3VUU1IzR2Fid0RvTUUzNGtpNGpTNWFJNWdlRzlmcGREWHJqekxHdk95QXh1bUlLMGZnOEJuSExBPT0iLCJlX3Jlc3BvbnNlIjoiRVFZcERUWkVTSDJReUdxcTFqNWNmVW0xaWZ0MGhuMFZOTVVKdnkxN0JYc0R3bDVWeS9MazFCRG5JblQvZjhmWloxMFNnY0VHeUdvT25oeVhMbzhCIiwidl9yZXNwb25zZSI6IkRMTUoxUlNQRjhIU1lUWWJMaVVRSXJhWmFoT1lOZFlONVhOTWFTNm9STFIwSXo3ZmtVSHNBcGtrV0sxNGcyMTd3RU10QlVudE0ySG5jUTlhQWw1Y3NZbnN4QjlhMU5aZnZ1aDRjbDM0cWt0MGlLRkhVM3J0andNOEFCYVkyNnR0V0Z1b1AwV3BjeVZ5aTlQbWFWSTJERTZmajZ0NWpLZ21VUEh6bzRVV3dKYmNyWllQVExlbUpVUzlETjd3UlM2NElZby9IazVqZXJ3RGZjaitwN2xDcEJCKzB0cGhKQnEwcXdWdUVrbmFLSHdXZEZoQXYyUXo2bzUzSWJ5MjVJUzU1R3FGTE9Rb1NoNm16VnVYaUNxVGdFVDJqNTl1VW5ZWVhhbDk5aS81aE5XRGJnbFpyVzNSbWNUMXFLSkJCNEMwREVKclpnSzhjS1NxNzNYSGo4ZFVlVWluaWxFTDIrWWhienZBTGYydWVTR3dkZGtTZEpsSEMvUThYZkxYZy8vWXlMSVFNdzhpWmJEcFMxTVhSUS9RdmFhT1JDSG0yWFVVWEhjVjJzWW9YYlB3VU9mV1ZOSUZWZGprV0VUTHNia0JwV3BpUHQzemUwY05Kdlh1U2luQ3I1TmoxdlFMNTBSNUthT3F1a0t5RTNBWjJsaDZMRU8rZlBKVUZXb1p1WTdjcmhiRUx0Vis5VlgxeDJnK1lZODlvMTg9IiwiYV9yZXNwb25zZXMiOnsiMCI6IkhhK0pZQlRaWmthM2NDYnlLNEFiblpQYUxoVG1NZWJQK0VLQkJNczErbldTTVZGcVM3bExOeEJEc0JXWlQzVFUvNFFpeER2bEQzQ2ZoQUdHNUxIUEpqSmdXcjVPeHpNM3ZybnlSWEM0eGNBPSIsIjMiOiJXaDFsNGdSN2lWSUdUZzRWWTlCOWY5UXN3K3RLQWw1UVNXZTZEaHhSZGUrdXhkM3pKY1kwa2ZRWjV6VmwySDBoS2tlREFKQ2hNeXBQQ3dkdGU0aVB4MDJYT1FsUW9TRzd4NlMwTnk5T09CRT0ifSwiYV9kaXNjbG9zZWQiOnsiMSI6IkF3QUtwd0EwQUFBOFFGdTFwSnM3ZDdqVVpKN0pzZ2FKIiwiMiI6IjZNTEczb0R1d3NMT1hON2t6dz09In0sInJhbmdlcHJvb2ZzIjpudWxsfV0sImluZGljZXMiOltbeyJjcmVkIjowLCJhdHRyIjoyfV1dLCJub25jZSI6IkpVMmlWc1pZaS95V04yMVRiMVNiSFE9PSIsImNvbnRleHQiOiJBUT09IiwidGltZXN0YW1wIjp7IlRpbWUiOjE2NTIzNTExNzgsIlNlcnZlclVybCI6Imh0dHBzOi8vaXJtYS5zaWRuLm5sL2F0dW1kLyIsIlNpZyI6eyJBbGciOiJlZDI1NTE5IiwiRGF0YSI6ImNONFA2QzQ2TGE1WW5IMDhtTlFONnFhZXQ1cTlzMXNvakRsMkZheWNGSmR5TllYU3hrMmdVM3pzTGl3VEp0TzE4T3BOZXBZY2kwWUpZbXAxeGV6bEN3PT0iLCJQdWJsaWNLZXkiOiJNS2RYeEp4RVdQUkl3TlA3U3V2UDBKL00vTlY1MVZadnFDeU8rN2VEd0o4PSJ9fX0=" src="https://snotolf.waag.org/waag/sites/waag/files/2021-03/29031756258_3d2cb5e695_b.jpeg" alt="Public Stack Summit iPad" typeof="foaf:Image" />
</picture>
......@@ -318,8 +318,8 @@ Coil is funded by the American Ripple, which works with XRP currency, a bitcoin
<p><strong>Change of plans</strong><br />
We want to use our research to find out whether micro donations are a suitable model for financing digital Public Stack initiatives. Initially, Waag thought it would be necessary to act as a Web Monetization provider (just like Coil) in order to fully investigate this. This turned out to be unnecessary, due to the possibilities and freedom the Web Monetization interface offers via Coil. Acting as a provider yourself therefore has no real added value. Also, as a provider you start a new company with customers and money flows. This is organisationally complex and does not fit within the organisation of Waag.</p>
<p>Rather than reinventing the what, we turn our attention to the working out of the how. So we will not act as a Web Monetization provider ourselves as in the original plan, but use Coil and build our own web extension next to it (this space offers the Web Monetization API). The added value of such a proprietary second web extension is that you as a user can select exactly which platforms and open source projects you want to support, and that you can link clear conditions to them. For example, you can set a maximum amount or switch on and off your preferences for certain platforms. Ultimately, it is not the owner of the site, for example through a paywall for extra content, but the user who decides what is paid for. Below is an example of what such a web extension could look like.</p>
<p><img data-pop-v0-img="eyJAY29udGV4dCI6Imh0dHBzOi8vaXJtYS5hcHAvbGQvc2lnbmF0dXJlL3YyIiwic2lnbmF0dXJlIjpbeyJjIjoiZU9sSFFadzk2VU5CbnJzT21BRmtHTzRNRGtqVDBHWXJlSDdGbzdqbnN6Yz0iLCJBIjoiQjZBRGhkbmZnOUVsRFpPZlNaVjBSMnNGNUcwUUI4cUZQcmZwaXhpWWQwS042UWs4MnV4MVlMMHoyUHYwdUhBYzJldFN1enR4bWVITG5nMmF1WXo0TmRuTEQ2TWhYTXZyL2Z0TTFXbXFXVjMzdmVrMi9xWk5tV1lFbDQ1VkxKZmNlaytsRDBUZHNHYWdSdTJBem1CQWpObGNHN1hWR3h5Z0VCYlBTR3MvSmg5TEw3THBkU2JUSFVuaFdKNnR4WjVVbGFoUituSDBSMXZUOU5DcC9VUFlSdzBvME1Mb0R2cjQ3VnRmQnMxeFJJdThMNDgyNnEvci9LREhNMUljc1Y1cy83SlFEcE5Ka3NoQnFXcVNza2tieXNrWEd3R2dVR2dKdFJrVkVzR3owYU44OEVzM1lKdVR3cUk4cTI5NzVxRjV4VEhGdWdqTXk0WFJzNlNaUUIvRU5RPT0iLCJlX3Jlc3BvbnNlIjoiUW9wMVdlUkRKNFlkQUVveEVaaytZV2ZvRDF0Y1diN3ZYTjRvQ25pWWJURHQ5TjFraUw3WVc2L3NiV0RuRUh6M2NYSWdEdXd2TG45RWp2NFMrWTdPIiwidl9yZXNwb25zZSI6IkR3LzUrVS9NOGZhakRZN3VaYm5pUE1iM3FHN0xVbjhETkZMWmI3emJ1QkNsbnJLRzhvL0xpM1FldHR1OVcrelpONDk4QTVkazNoNnZ2S2U0NXZQcWRlbmVLVStJNVB0K1Y1RVpYamE1aXVwU0ZnQW9YQjk5Qjh6c0dmalJIcGNpYkhqNjhIZTg1b1ZFMGhzZ1JqMTNsSlhXS2xBc0tSL1RDM2g2QUx5MTJwZXdtM3JTdGd5dmM1SzNBcHptZFY4WDdkRkxIMGliN2srb01IWVl5Sm14WjVWK0hxbmdpN1M2WE1xd3ZTM3NSVXg5WmZiZ1ZDbWpjc044WS85SmV0bWRaRXBWNFluZkZTZ1g5S2Y1RGg3Sk9DRmhtMjMyaEYzTDdDTEcrUU1jOUFHelhMdWs5SG91a1pMUkxEZmxLb1o2MTZyVGE1Zm5GMzFabnBuWHB6U1BPN1oyb3NCUy80VEhTY2RmT29wOXhHdnltWVdLTjUrVkx6enZZbVZ0dWVVdFVXOFIvUlJWN1FXZ01qb3hiU1E2UXN1NGhiZFNlRHdJcG1rRE1HOWlBQ3BmZDRoZ0l5ODlVcy9mYkw4UlZNVXV6aExyWnN4WldIaUtuQmMzdDRMK2gwQU9yWHdiTms5azBaVWVSUHlqeEpCV0liVjBRQXR3UEM3V1FkZlBIeGdkbzhnYmFYdFNQZkZhUTBwZ01MQkcyRGs9IiwiYV9yZXNwb25zZXMiOnsiMCI6IlZEeEZsKy94YnU0aFV0NzVKR0Zic0EvanNNMmRaeVlkMENlQkU1a1pjWVFuU1FzckYrc2tPLzZ4cVJtY1RZTDJqSGY1c0Zlc1FKUFArMCtrZHlzcVAzczFYdGd0NnlJN0dzTTVQdTVFUlUwPSIsIjMiOiJReHdiTVpmZW9UVU9YRFFVdnU0eTBibkFFVWw2WTFDRVIrelRma0FxaDFkMGdDS0dPSFE5eFNHT3U3a0g5bjJ6N1NzN0x2TldoRlczZHVPajNHRmdkZCtYTzJXWlpFSUhib2JDd3g1QWZBZz0ifSwiYV9kaXNjbG9zZWQiOnsiMSI6IkF3QUtwd0EwQUFBOFFGdTFwSnM3ZDdqVVpKN0pzZ2FKIiwiMiI6IjZNTEczb0R1d3NMT1hON2t6dz09In0sInJhbmdlcHJvb2ZzIjpudWxsfV0sImluZGljZXMiOltbeyJjcmVkIjowLCJhdHRyIjoyfV1dLCJub25jZSI6ImtxMHdYQmwyWHV3TVJnSThOdG9ERXc9PSIsImNvbnRleHQiOiJBUT09IiwidGltZXN0YW1wIjp7IlRpbWUiOjE2NDk3NTUyNzgsIlNlcnZlclVybCI6Imh0dHBzOi8vaXJtYS5zaWRuLm5sL2F0dW1kLyIsIlNpZyI6eyJBbGciOiJlZDI1NTE5IiwiRGF0YSI6InVOZWlDNG5RL0NERG1SVWdSYmplN3hrTWVHZ0F1N0VUVG05RDdhVk12ZC84WkQ3RkVYNkNUd3VZMzJvaGlwdUNHaE1TamllZHVQUTgyd2RNQWdvdkR3PT0iLCJQdWJsaWNLZXkiOiJNS2RYeEp4RVdQUkl3TlA3U3V2UDBKL00vTlY1MVZadnFDeU8rN2VEd0o4PSJ9fX0=" alt="Microdonor Mockup 1" data-entity-type="file" data-entity-uuid="d0472efe-b29f-40d6-927f-4790d33fd43f" src="https://snotolf.waag.org/waag/sites/waag/files/inline-images/Snip%201%20mockup%20extensie_0.PNG" /></p>
<p><img data-pop-v0-img="eyJAY29udGV4dCI6Imh0dHBzOi8vaXJtYS5hcHAvbGQvc2lnbmF0dXJlL3YyIiwic2lnbmF0dXJlIjpbeyJjIjoiRTE2MEZGbGNJbVJRUDBpcjkvNlpOWkdVaEdta1ZtbHFiK2lXT0RGcW9HRT0iLCJBIjoiTkJRczc4dEcrZkxNOXI2V3ArSkFKbmx5YVVPM3JrZVJiODRyRXRoQlFsb1RJZWtLQ0hzUGY0M3ZiYnd0cGRlQ1FTdkN1MGNNczZIZzZFaHVWNThMajRnVjlzRXd0MzNjZXArSFByd21qTm43ZERCdWtzVlJ6YnVUU3pXMVpzem11TTBUVUFjK3dkTWs5N1N3UzBsbDhQTy9KMXcyTXpzdkVYQ0tmWTI0K0UyZnV4TFJBUzVHM0JONUhjYlljajhyMTNGMUtMK2xyOGZmN0xjK2t4cDBTQ2VRTHlJalVOMVpPdXBRM2dFVkpOVlNEMkxYV1hTc3ZDTmRlNThVNVErSEtIdmplR3FjcndKUHV2cHp3Ukp2TXcvL2ZUT0N2Ky9tQjNSUVZxSWJEeE14SWlJYVFMZmhNOWJNV3dMbFVoMlluNmo5UFo3Yy93Z0U0S3Q0WURRQVNnPT0iLCJlX3Jlc3BvbnNlIjoiNXBRcEozcHJ1MjdZdjgyUGNZSFE0RDJHRW1URG9DaTV5Qlo5bS9zT2xmR2JvMXFMWTFQbEJXNzdsY0h1VHJEUnUrTzFQRS9LTXppQ1VxNlMyTXc3Iiwidl9yZXNwb25zZSI6IkMrL2gyemFZQituTStjTUxZMlRlUEFKbTBjR20xS3A2allPZ2JWUUJDRjVGRnhzaU5VbUR3L0hIMzZIV2U0S1RTT2hubmVvdjF4enZwT3VlY3JGRHZBbVRPQkhXY2c1NERTZUsreDUxSmlkVFpzaEhWdVdEcGdIaEdPdUhqbWludDZHeEVNMUdBMUpOelY3YVFWdkI3bSs0Skh4SWRna0IzZ0k3VlN2RTMzTVlReWU1WkdCc1RrcFJEVmgxNDBSMGFSUXpPTUg5OVFsYkRxZElPT3lFQTRoTG1RWGYrVURYc2g3T0tLT0syVGVoTHpvNVJHU05yVHpSOEkza01OUStJbmpzNGl6Q0IxQ0RReEFnRzRGNUhtc0VKcEtMTFRaWFVBb2Jna000aGxxQUZWbERYWkpRMmh0V2lENC9sWFhFNm84ckQwWklzbVZaQlI1WVg1S3RWVDhXVUdISFZFV2NxVi9ma25PaTU5T2dJbHhlWm8rdXlTRkNwMXBXVEpsYlZHdER2aXNSWlVYNkNIWE1xWE5oTmpDK0dYZDYwVURVcERsS0x6NFB0MzZoUTltRXRmdVVDcEZkakc5M0F5M1VpSHB6WG5uOFRNeTg3ZEl4ODVYMTdqUTIxeERFSDcrVjVjVEtzSktPU0JLSlZmS05XZGduN3F3UW9ydUMvZ1VOd3lLemJlYmRVVHBYNXA1OUI5WnhDNzQ9IiwiYV9yZXNwb25zZXMiOnsiMCI6InBpNWJDRzBBVnNuYWVoRVVQaFg2NnlQbU1wWCtvdmNvTXk2UTFpR0xVWHd0bHpMWWw0TU50aG5VSTdNQ2tsa2hVZFBUYjBrWEhDVFJYeFlXMHZFOHd2UVl3RkRBaE1NckVFbXNVZGt1K3VnPSIsIjMiOiJhT3RsVVlEUy9oMld3Q0YvdHNUaHdUSTBjd0Zqa05OdGNlRm5URU5pWXdkZFo2bDJyRlphdFhyMXA1blVtcm1IS2dzb05sY2RvZ1Y5TEh6MUVXWnhlbi9VVHRtLzR3dUJqZzRONDN1cDBrND0ifSwiYV9kaXNjbG9zZWQiOnsiMSI6IkF3QUtwd0EwQUFBOFFGdTFwSnM3ZDdqVVpKN0pzZ2FKIiwiMiI6IjZNTEczb0R1d3NMT1hON2t6dz09In0sInJhbmdlcHJvb2ZzIjpudWxsfV0sImluZGljZXMiOltbeyJjcmVkIjowLCJhdHRyIjoyfV1dLCJub25jZSI6IklXdytnUFQweC9LWW93T1IySmYxdlE9PSIsImNvbnRleHQiOiJBUT09IiwidGltZXN0YW1wIjp7IlRpbWUiOjE2NDk3NTUzMjMsIlNlcnZlclVybCI6Imh0dHBzOi8vaXJtYS5zaWRuLm5sL2F0dW1kLyIsIlNpZyI6eyJBbGciOiJlZDI1NTE5IiwiRGF0YSI6Ikt6dnQyeVB0ZlNPNXFOcS9LaThPNURnTUhVT3Z1cVRaRmVpcTdlTG9Ra0dIWGJ4d0VLSCtHdC9nZEVkTTErRCtldjYxNGVGY1VIaFMrTFdxc2hCYkFnPT0iLCJQdWJsaWNLZXkiOiJNS2RYeEp4RVdQUkl3TlA3U3V2UDBKL00vTlY1MVZadnFDeU8rN2VEd0o4PSJ9fX0=" alt="Microdonor Mockup 2" data-entity-type="file" data-entity-uuid="409d5225-9b13-4e38-8fc6-e0246668a2a0" src="https://snotolf.waag.org/waag/sites/waag/files/inline-images/Snip%202%20mockup%20extensie_0.PNG" /></p>
<p><img data-pop-v0-img="eyJAY29udGV4dCI6Imh0dHBzOi8vaXJtYS5hcHAvbGQvc2lnbmF0dXJlL3YyIiwic2lnbmF0dXJlIjpbeyJjIjoidkRXZXdORjNhaVpTb1l6UnZtc2NDS05nNXVncXQ2V3Q4K1cwYmd1UXpMcz0iLCJBIjoiaDlBS1l3OW1xOHIzZktwajltcTR4blh6UUlLZ2tvdFRRK0JTL1REazdQRWZKd0VMYjNYZVRoYTk0S0d4VEZOZzhDUkVrNU9nc3pOcHE3cjlBNENvOTlDVjJZTXpPMGMxem1ESVUzTlNzeThyRkpQdkU2Tzk5VU90R2h1N0xUc0d3bFhBYXBsUmhpYkM0cTlxMHcxWE13b0NrSTNMYko5TzRBQWwzMEJIU3V2ajhWSGc2TmhoeFRHVURhZ3pnTlFseDhQa1d5V0kyclRiSmIwTTk0T3ZKMFBiamwwaW9TeW5Cam80L3kyanBlRVRBZnlhNURQQlduK09PZUFvQnRRUmhJa05XQWNZeUcrQ1oyZytDM3BjK2lVa2JOR29pdU1oVnduNFgrY2JCZ0d4THoyN2J0YXZrMFQ3eW1TQ3JseGRsN1cxM3RSV3o0ZmtSMjFhVlVoNDBnPT0iLCJlX3Jlc3BvbnNlIjoib0xIT2RXZEQ2NkRsZDdVQ3IwRmZmMDR2TzRtYk44anBjZTdhYnNHaVJCd2hJVWFibmprS1c2UWdRa1I1elhkTGUzeml1RWs5ZlplSU5hVkgwU3V5Iiwidl9yZXNwb25zZSI6IkJkazBvNFRXZFFNbzBTWUh4cFhVZkpSWjJDVDZubXRzTkZudlpqY1kyMWdZS0VpYi8zdFJmVUNpemhLMnlqcnVkWTc4bk1GTFc2VXFWNFptZFNCczBKRjVXM1VRdlB2L2pYZHUrZlNBVVlzYnJqUndHYUpwd2dRZHhtZXRtUjNmWlBDTWp4NnhKMlNQcEZvQnptRjdxSkd2Y1JNVWhtVU5IUEhuOUtBa2VCQ1NqZmk4SjUyTi9FMHhHNjRxL2tzOFhPZlAyd3BMZFFyZHY5UU1LT2wrbm9NejI5RVJPNjZnMk1KSWZxTWhGUWJCOWJUa202WTR2UTNuRmpDL08yZDF0elBONkluMllteDV6U3lEcjFpRGVDLzdNNG5VMWdmVDZ5WWRWM2picGVKajc1Q0Z0MXBDbDhyUjhMZDdJK1N4SFNlQWliM2xvR0tNTmRZMXk2TW56MTc1eGp5bE9paG9kZHdkU2ZqNkdVdkRrcUJsM05jbFpncVF2Rk1VZFlHWGl6SjMrSzFrcWo4WjluT2FmRDdneTNIR0Nka05zejQvQllXWWtmOHllcFZ5UDFHZFdLdW9JemxseXRwSXh6eDB5cGgvNThERXd3UTcyUGFtNFdqUENMKzNMU3o0dGVDYlRwWVdFdTEvYU9lNW1HSHFkdFVGaW1BRXh6YjR5ZFpOeThTOU9KaE9kNndVaWp2RU5iSXN5MUE9IiwiYV9yZXNwb25zZXMiOnsiMCI6ImtxNERzRkg5Sm8yVUZqRlg3dWp0RXc0cVdnaHBpLzZWNFJUdEhyMDl3Y1NzeVVjeG9tWTFtcmlIS3RaVVdlSWhXdWp3Z3JmNktCRmJTQk5mZ2dnVTI1T0FtZzlhMktsc0FSckV6Tk9YNzlRPSIsIjMiOiJzNFRyekhnY1RMRVM5VWI2UnpQZEZYYk1tZElrQ05Kb0JZTldPNFYvZ3RCbHN4ekt4STgwaEJLWVNvVnBPbUdPLzhFbzZ1bVZ0TzdPVDBjWnJrZU1yRHkvZzIvd3RxRDdYYStpbFRGU25TRT0ifSwiYV9kaXNjbG9zZWQiOnsiMSI6IkF3QUtwd0EwQUFBOFFGdTFwSnM3ZDdqVVpKN0pzZ2FKIiwiMiI6IjZNTEczb0R1d3NMT1hON2t6dz09In0sInJhbmdlcHJvb2ZzIjpudWxsfV0sImluZGljZXMiOltbeyJjcmVkIjowLCJhdHRyIjoyfV1dLCJub25jZSI6IkcvdC9xVUcxd2JCcnlFSHZnamFQK1E9PSIsImNvbnRleHQiOiJBUT09IiwidGltZXN0YW1wIjp7IlRpbWUiOjE2NTIzNTQyMjYsIlNlcnZlclVybCI6Imh0dHBzOi8vaXJtYS5zaWRuLm5sL2F0dW1kLyIsIlNpZyI6eyJBbGciOiJlZDI1NTE5IiwiRGF0YSI6InF3UGNkVklSNVFtSVRGUTFDL1V1aFlzbm8wVTVwZlNFZGNtQ1NzbmFiVUNkekxQMWtZeTJ4ZmdZTm8xejYvRVZZS3duT1MrK28xUjdTMDRJc09ETkF3PT0iLCJQdWJsaWNLZXkiOiJNS2RYeEp4RVdQUkl3TlA3U3V2UDBKL00vTlY1MVZadnFDeU8rN2VEd0o4PSJ9fX0=" alt="Microdonor Mockup 1" data-entity-type="file" data-entity-uuid="d0472efe-b29f-40d6-927f-4790d33fd43f" src="https://snotolf.waag.org/waag/sites/waag/files/inline-images/Snip%201%20mockup%20extensie_0.PNG" /></p>
<p><img data-pop-v0-img="eyJAY29udGV4dCI6Imh0dHBzOi8vaXJtYS5hcHAvbGQvc2lnbmF0dXJlL3YyIiwic2lnbmF0dXJlIjpbeyJjIjoiMjl6a0RkUEVYNW4rTEs2czhhejBUcEhxSFM4Ukt0a1F0OEY4eFVQU1c3WT0iLCJBIjoiaHQyWThSWENxYmNmQWRISE0zeGZzcFVNQWpXU09HZGZyblM4TFJVNlpwcFlFaDZpd3Z1T0doOFV5MjhyN3pOT2ZpSnFqRDNkekg5RDNMb2JuSXRVWlFZUm5lTDBvL1R5UVlXYjQwVEc0MElLVThMcGVZNXBac1V6SHIxa2Q3N3g3ckUweXZCZjh2S1hwdmNpcDhDYXRjRmllM1ErYm9PbGFhWUVESW9HbUdQR2JTUEloRG1XNWlwSmFjY0xYbWhmNS9EalBVRjFQUmZKWDMwaFBVZms4TmxhSElBUkxqMFN5Y3g0MHV6WExlYU9vZWZtR2xXTFBRb2d3bzhIQTl2WmNqN2NCdXF0Qm11UFMvdmtvbDNWcWNsZ21IRWhwVThkbzl6Qkx6Vmd0VjFBWkh5YlhtQS9XOXl2NnNhVmhzUWpJMTA3UlhuTUwwQ1Nkc040YUVQOHFBPT0iLCJlX3Jlc3BvbnNlIjoiQlduR1MwbGM0dVJaTDRIVHBZZmtKamRVY2szajAvMFJhaTc1eTVtakRNenV6VDh6dHdVaEZrZG51djJpajNvb0RNdjAvbjVpemV0L2d6L2dhaEVoIiwidl9yZXNwb25zZSI6IkFyVURwbm1UMi9kZFNWdkhTeWxHQzJ2ZjVKZnY0ZGlLbTkwanJIRTMzaUdtb3JoTjFZNlJpWUNIUkxrWlRabG93NzQyQ0FXeG52UmVPMGhHVVlhTFNxcU9Zak5aL3Q5YjZGa1hqRksyTU0wa3dpMDVwcmhocEVjTit0TnJrOHRRNW5nL2lnVkl6SXQ4OWZsOEdjdFA5K3ZodDYzTG9MandwVVE0NWdsVjRzY1ZtSERuMU9vcHd3djlPUDRFWEpianhaVFBDV2lCTS83aVBJTGJiZjFYTVdac0tSSWd6ZFdlYTVRdkJpWi9wMFo0MXN5ZXYyMno4emNyRVRienR5V2NERWZWTGlDa29VaGFHOHpqMGxkKzdYZUc0dU9vSU81R1ZRU3lyZzgwRHpGdFk5dmEvUEJpVmgyaE4vK25abjhqMjh2ekNkU0lqZU1OVjROZzJrNDNUS3FFa1ZuUE1QL1hvME1BeEk3dy9zZU5WYzNITEtjZnZiVnRrZVN5TUx6bGkwdm0yQkJCaWJRcmhhZTN4UU0wSSsvUGdKc1MvY1RwdnMzOEMycTE5VmdHdFRMdWtXR0Z3L0ZrdnZpdFBnbkwvTWxJWEc4QUZ0T2ZYbU5EOUZkYUhyN2tLazNvQXhDSG1PMzYwZFkvMlFmb1YxZzNReExFN1M1R2RSWFFRNGQ4dUcrRE1OWWtBSzBZRjRkWElVTnFabjg9IiwiYV9yZXNwb25zZXMiOnsiMCI6InZHdUZKcnRvWThPRDkrZGFpbFZDd0dtWmRVUy9vY0pMaGE3L2pPTGFQSStqSFEvN3laL3dicHpKbXFoaTNiMkdEL2gxTXZsTlpzMERCVWYza2twTlpjRERVbUR0bU5hcjhJZEFiY0taSTBVPSIsIjMiOiJjaTJWUHBlNFo4dWtId0NyaENmM21pWFVtdUlGeEZJdjQzWEFEcGdyUlhaVWdhaEVxNWc0bm5YVGo3NnZpSWNYa3k4Y05OeWtCQmhHRVFhSDVTWmY1SlVJM1M5RngwaGZURTN4RlU2WVJnYz0ifSwiYV9kaXNjbG9zZWQiOnsiMSI6IkF3QUtwd0EwQUFBOFFGdTFwSnM3ZDdqVVpKN0pzZ2FKIiwiMiI6IjZNTEczb0R1d3NMT1hON2t6dz09In0sInJhbmdlcHJvb2ZzIjpudWxsfV0sImluZGljZXMiOltbeyJjcmVkIjowLCJhdHRyIjoyfV1dLCJub25jZSI6IjZ6ODN0TnlNY0xTTy9GUVQ3SWdoTmc9PSIsImNvbnRleHQiOiJBUT09IiwidGltZXN0YW1wIjp7IlRpbWUiOjE2NTIzNTQzMDMsIlNlcnZlclVybCI6Imh0dHBzOi8vaXJtYS5zaWRuLm5sL2F0dW1kLyIsIlNpZyI6eyJBbGciOiJlZDI1NTE5IiwiRGF0YSI6Imx3V25KMitsQmtpZ2lDN1lYU24wZklQNUxueTZiald0Q29RaDd3OE5TUEhDNlpUU2RWL2g1dmdEYUEwTXB6M3laUEFsYzcvWWFxYnlnWU52QXg3cER3PT0iLCJQdWJsaWNLZXkiOiJNS2RYeEp4RVdQUkl3TlA3U3V2UDBKL00vTlY1MVZadnFDeU8rN2VEd0o4PSJ9fX0=" alt="Microdonor Mockup 2" data-entity-type="file" data-entity-uuid="409d5225-9b13-4e38-8fc6-e0246668a2a0" src="https://snotolf.waag.org/waag/sites/waag/files/inline-images/Snip%202%20mockup%20extensie_0.PNG" /></p>
<p><strong>And now?</strong><br />
There are a number of follow-up steps in our investigation. First, we need to find out: what are you monetising? How do you determine which organisations and content belong to Public Stack initiatives, from which the user can ultimately make a selection via our web extension? In addition, the process surrounding both web extensions must be as transparent as possible to the user, with terms and conditions for payments and preferences clearly defined - including Coil's privacy terms. How do you communicate this as openly as possible?</p>
<p>We would also like to talk to you. Is a Web Monetization system indeed something we want? What other options are there? A public programme took place on Thursday 18 March, in which various organizations that are already experimenting with fairer earnings models will be featured. <a href="https://vimeo.com/506179307">Re-watch the meetup</a> (in Dutch).</p>
......
......@@ -324,7 +324,7 @@ window.PNG = (function() {
xhr.responseType = 'arraybuffer';
xhr.onload = () => {
const data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);
const png = new PNG(data);
const png = new window.PNG(data);
if (typeof (canvas && canvas.getContext) === 'function') {
png.render(canvas);
}
......
......@@ -8,6 +8,7 @@
<meta charset="UTF-8">
<script type="text/javascript" src="irma.js"></script>
<script type="text/javascript" src="blockhash.js"></script>
<script type="text/javascript" src="zlib.js"></script>
<script type="text/javascript" src="pop.js"></script>
<style>
html, body {
......
/*
* Extracted from pdf.js
* https://github.com/andreasgal/pdf.js
*
* Copyright (c) 2011 Mozilla Foundation
*
* Contributors: Andreas Gal <gal@mozilla.com>
* Chris G Jones <cjones@mozilla.com>
* Shaon Barman <shaon.barman@gmail.com>
* Vivien Nicolas <21@vingtetun.org>
* Justin D'Arcangelo <justindarc@gmail.com>
* Yury Delendik
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
window.DecodeStream = (function() {
function constructor() {
this.pos = 0;
this.bufferLength = 0;
this.eof = false;
this.buffer = null;
}
constructor.prototype = {
ensureBuffer: function decodestream_ensureBuffer(requested) {
var buffer = this.buffer;
var current = buffer ? buffer.byteLength : 0;
if (requested < current)
return buffer;
var size = 512;
while (size < requested)
size <<= 1;
var buffer2 = new Uint8Array(size);
for (var i = 0; i < current; ++i)
buffer2[i] = buffer[i];
return this.buffer = buffer2;
},
getByte: function decodestream_getByte() {
var pos = this.pos;
while (this.bufferLength <= pos) {
if (this.eof)
return null;
this.readBlock();
}
return this.buffer[this.pos++];
},
getBytes: function decodestream_getBytes(length) {
var pos = this.pos;
if (length) {
this.ensureBuffer(pos + length);
var end = pos + length;
while (!this.eof && this.bufferLength < end)
this.readBlock();
var bufEnd = this.bufferLength;
if (end > bufEnd)
end = bufEnd;
} else {
while (!this.eof)
this.readBlock();
var end = this.bufferLength;
}
this.pos = end;
return this.buffer.subarray(pos, end);
},
lookChar: function decodestream_lookChar() {
var pos = this.pos;
while (this.bufferLength <= pos) {
if (this.eof)
return null;
this.readBlock();
}
return String.fromCharCode(this.buffer[this.pos]);
},
getChar: function decodestream_getChar() {
var pos = this.pos;
while (this.bufferLength <= pos) {
if (this.eof)
return null;
this.readBlock();
}
return String.fromCharCode(this.buffer[this.pos++]);
},
makeSubStream: function decodestream_makeSubstream(start, length, dict) {
var end = start + length;
while (this.bufferLength <= end && !this.eof)
this.readBlock();
return new Stream(this.buffer, start, length, dict);
},
skip: function decodestream_skip(n) {
if (!n)
n = 1;
this.pos += n;
},
reset: function decodestream_reset() {
this.pos = 0;
}
};
return constructor;
})();
window.FlateStream = (function() {
var codeLenCodeMap = new Uint32Array([
16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
]);
var lengthDecode = new Uint32Array([
0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,
0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,
0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,
0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102
]);
var distDecode = new Uint32Array([
0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,
0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,
0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,
0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001
]);
var fixedLitCodeTab = [new Uint32Array([
0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,
0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,
0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,
0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,
0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,
0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,
0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,
0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,
0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,
0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,
0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,
0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,
0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,
0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,
0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,
0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,
0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,
0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,
0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,
0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,
0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,
0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,
0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,
0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,
0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,
0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,
0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,
0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,
0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,
0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,
0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,
0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,
0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,
0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,
0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,
0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,
0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,
0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,
0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,
0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,
0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,
0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,
0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,
0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,
0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,
0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,
0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,
0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,
0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,
0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,
0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,
0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,
0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,
0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,
0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,
0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,
0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,
0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,
0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,
0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,
0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,
0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,
0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,
0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff
]), 9];
var fixedDistCodeTab = [new Uint32Array([
0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,
0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,
0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,
0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000
]), 5];
function error(e) {
throw new Error(e)
}
function constructor(bytes) {
//var bytes = stream.getBytes();
var bytesPos = 0;
var cmf = bytes[bytesPos++];
var flg = bytes[bytesPos++];
if (cmf == -1 || flg == -1)
error('Invalid header in flate stream');
if ((cmf & 0x0f) != 0x08)
error('Unknown compression method in flate stream');
if ((((cmf << 8) + flg) % 31) != 0)
error('Bad FCHECK in flate stream');
if (flg & 0x20)
error('FDICT bit set in flate stream');
this.bytes = bytes;
this.bytesPos = bytesPos;
this.codeSize = 0;
this.codeBuf = 0;
DecodeStream.call(this);
}
constructor.prototype = Object.create(DecodeStream.prototype);
constructor.prototype.getBits = function(bits) {
var codeSize = this.codeSize;
var codeBuf = this.codeBuf;
var bytes = this.bytes;
var bytesPos = this.bytesPos;
var b;
while (codeSize < bits) {
if (typeof (b = bytes[bytesPos++]) == 'undefined')
error('Bad encoding in flate stream');
codeBuf |= b << codeSize;
codeSize += 8;
}
b = codeBuf & ((1 << bits) - 1);
this.codeBuf = codeBuf >> bits;
this.codeSize = codeSize -= bits;
this.bytesPos = bytesPos;
return b;
};
constructor.prototype.getCode = function(table) {
var codes = table[0];
var maxLen = table[1];
var codeSize = this.codeSize;
var codeBuf = this.codeBuf;
var bytes = this.bytes;
var bytesPos = this.bytesPos;
while (codeSize < maxLen) {
var b;
if (typeof (b = bytes[bytesPos++]) == 'undefined')
error('Bad encoding in flate stream');
codeBuf |= (b << codeSize);
codeSize += 8;
}
var code = codes[codeBuf & ((1 << maxLen) - 1)];
var codeLen = code >> 16;
var codeVal = code & 0xffff;
if (codeSize == 0 || codeSize < codeLen || codeLen == 0)
error('Bad encoding in flate stream');
this.codeBuf = (codeBuf >> codeLen);
this.codeSize = (codeSize - codeLen);
this.bytesPos = bytesPos;
return codeVal;
};
constructor.prototype.generateHuffmanTable = function(lengths) {
var n = lengths.length;
// find max code length
var maxLen = 0;
for (var i = 0; i < n; ++i) {
if (lengths[i] > maxLen)
maxLen = lengths[i];
}
// build the table
var size = 1 << maxLen;
var codes = new Uint32Array(size);
for (var len = 1, code = 0, skip = 2;
len <= maxLen;
++len, code <<= 1, skip <<= 1) {
for (var val = 0; val < n; ++val) {
if (lengths[val] == len) {
// bit-reverse the code
var code2 = 0;
var t = code;
for (var i = 0; i < len; ++i) {
code2 = (code2 << 1) | (t & 1);
t >>= 1;
}
// fill the table entries
for (var i = code2; i < size; i += skip)
codes[i] = (len << 16) | val;
++code;
}
}
}
return [codes, maxLen];
};
constructor.prototype.readBlock = function() {
function repeat(stream, array, len, offset, what) {
var repeat = stream.getBits(len) + offset;
while (repeat-- > 0)
array[i++] = what;
}
// read block header
var hdr = this.getBits(3);
if (hdr & 1)
this.eof = true;
hdr >>= 1;
if (hdr == 0) { // uncompressed block
var bytes = this.bytes;
var bytesPos = this.bytesPos;
var b;
if (typeof (b = bytes[bytesPos++]) == 'undefined')
error('Bad block header in flate stream');
var blockLen = b;
if (typeof (b = bytes[bytesPos++]) == 'undefined')
error('Bad block header in flate stream');
blockLen |= (b << 8);
if (typeof (b = bytes[bytesPos++]) == 'undefined')
error('Bad block header in flate stream');
var check = b;
if (typeof (b = bytes[bytesPos++]) == 'undefined')
error('Bad block header in flate stream');
check |= (b << 8);
if (check != (~blockLen & 0xffff))
error('Bad uncompressed block length in flate stream');
this.codeBuf = 0;
this.codeSize = 0;
var bufferLength = this.bufferLength;
var buffer = this.ensureBuffer(bufferLength + blockLen);
var end = bufferLength + blockLen;
this.bufferLength = end;
for (var n = bufferLength; n < end; ++n) {
if (typeof (b = bytes[bytesPos++]) == 'undefined') {
this.eof = true;
break;
}
buffer[n] = b;
}
this.bytesPos = bytesPos;
return;
}
var litCodeTable;
var distCodeTable;
if (hdr == 1) { // compressed block, fixed codes
litCodeTable = fixedLitCodeTab;
distCodeTable = fixedDistCodeTab;
} else if (hdr == 2) { // compressed block, dynamic codes
var numLitCodes = this.getBits(5) + 257;
var numDistCodes = this.getBits(5) + 1;
var numCodeLenCodes = this.getBits(4) + 4;
// build the code lengths code table
var codeLenCodeLengths = Array(codeLenCodeMap.length);
var i = 0;
while (i < numCodeLenCodes)
codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3);
var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
// build the literal and distance code tables
var len = 0;
var i = 0;
var codes = numLitCodes + numDistCodes;
var codeLengths = new Array(codes);
while (i < codes) {
var code = this.getCode(codeLenCodeTab);
if (code == 16) {
repeat(this, codeLengths, 2, 3, len);
} else if (code == 17) {
repeat(this, codeLengths, 3, 3, len = 0);
} else if (code == 18) {
repeat(this, codeLengths, 7, 11, len = 0);
} else {
codeLengths[i++] = len = code;
}
}
litCodeTable =
this.generateHuffmanTable(codeLengths.slice(0, numLitCodes));
distCodeTable =
this.generateHuffmanTable(codeLengths.slice(numLitCodes, codes));
} else {
error('Unknown block type in flate stream');
}
var buffer = this.buffer;
var limit = buffer ? buffer.length : 0;
var pos = this.bufferLength;
while (true) {
var code1 = this.getCode(litCodeTable);
if (code1 < 256) {
if (pos + 1 >= limit) {
buffer = this.ensureBuffer(pos + 1);
limit = buffer.length;
}
buffer[pos++] = code1;
continue;
}
if (code1 == 256) {
this.bufferLength = pos;
return;
}
code1 -= 257;
code1 = lengthDecode[code1];
var code2 = code1 >> 16;
if (code2 > 0)
code2 = this.getBits(code2);
var len = (code1 & 0xffff) + code2;
code1 = this.getCode(distCodeTable);
code1 = distDecode[code1];
code2 = code1 >> 16;
if (code2 > 0)
code2 = this.getBits(code2);
var dist = (code1 & 0xffff) + code2;
if (pos + len >= limit) {
buffer = this.ensureBuffer(pos + len);
limit = buffer.length;
}
for (var k = 0; k < len; ++k, ++pos)
buffer[pos] = buffer[pos - dist];
}
};
return constructor;
})();
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment