voting_schemes-electionguard 0.24.1 → 0.24.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile.lock +90 -83
  4. data/app/assets/javascripts/voting_schemes/electionguard/electionguard.js +1 -1
  5. data/lib/voting_schemes/electionguard/version.rb +1 -1
  6. data/public/assets/electionguard/attrs.data +0 -0
  7. data/public/assets/electionguard/attrs.js +1 -1
  8. data/public/assets/electionguard/bulletin_board-electionguard.data +0 -0
  9. data/public/assets/electionguard/bulletin_board-electionguard.js +1 -1
  10. data/public/assets/electionguard/console.html +89 -61
  11. data/public/assets/electionguard/electionguard.data +0 -0
  12. data/public/assets/electionguard/electionguard.js +1 -1
  13. data/public/assets/electionguard/gmpy2.data +0 -0
  14. data/public/assets/electionguard/gmpy2.js +1 -1
  15. data/public/assets/electionguard/hypothesis.data +0 -0
  16. data/public/assets/electionguard/hypothesis.js +1 -1
  17. data/public/assets/electionguard/jsons.data +0 -0
  18. data/public/assets/electionguard/jsons.js +1 -1
  19. data/public/assets/electionguard/micropip.data +0 -0
  20. data/public/assets/electionguard/micropip.js +1 -1
  21. data/public/assets/electionguard/packages.json +1 -1
  22. data/public/assets/electionguard/packaging.data +0 -0
  23. data/public/assets/electionguard/packaging.js +1 -0
  24. data/public/assets/electionguard/pyasn1.data +0 -0
  25. data/public/assets/electionguard/pyasn1.js +1 -1
  26. data/public/assets/electionguard/pyodide.asm.data +0 -0
  27. data/public/assets/electionguard/pyodide.asm.js +11 -11
  28. data/public/assets/electionguard/pyodide.asm.wasm +0 -0
  29. data/public/assets/electionguard/pyodide.js +781 -333
  30. data/public/assets/electionguard/pyparsing.data +0 -0
  31. data/public/assets/electionguard/pyparsing.js +1 -0
  32. data/public/assets/electionguard/rsa.data +0 -0
  33. data/public/assets/electionguard/rsa.js +1 -1
  34. data/public/assets/electionguard/six.data +0 -0
  35. data/public/assets/electionguard/six.js +1 -0
  36. data/public/assets/electionguard/sortedcontainers.data +0 -0
  37. data/public/assets/electionguard/sortedcontainers.js +1 -1
  38. data/public/assets/electionguard/test.data +0 -0
  39. data/public/assets/electionguard/test.html +21 -24
  40. data/public/assets/electionguard/test.js +1 -1
  41. data/public/assets/electionguard/typish.data +0 -0
  42. data/public/assets/electionguard/typish.js +1 -1
  43. data/public/assets/electionguard/webworker.js +29 -21
  44. data/public/assets/electionguard/webworker_dev.js +14 -14
  45. metadata +9 -7
  46. data/public/assets/electionguard/distlib.data +0 -0
  47. data/public/assets/electionguard/distlib.js +0 -1
  48. data/public/assets/electionguard/pyodide.asm.data.js +0 -1
  49. data/public/assets/electionguard/renderedhtml.css +0 -209
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8de527e88c13f14799bc6cd0581b3c8d6970d1a8ccbd407775ae1826d2b44ac4
4
- data.tar.gz: 494546ed3d6f1163bafc944f7b27f967a50170568f1f0f8e613c69600789c9a9
3
+ metadata.gz: 133827bbdd7b9b0c9b885d7c194577527e4b7c0a256ab347483d577468948b72
4
+ data.tar.gz: 63b2e8d727374ee769918619b1b4130a2ceb98fe70ea5959fa0f9ab54ce10580
5
5
  SHA512:
6
- metadata.gz: e0330456ff252e214948133fe6d1eed5d05cf2e2c747972540eede25b67226e6b7b1af0c173a4934449def3f28c3a87b21b724306fdf93dfb4191e72da7c6076
7
- data.tar.gz: 47f4a8c68f118b906c15ee65cb7f9f0f4f53d7f2e853a715f146f04695dbd093f46ff7faab36d9a490aa2225c0018d57d35dfb7d144cb5c00f4dcb0dd568d893
6
+ metadata.gz: ff706b029ced40fca15b3d5fc7763032e8e4f15bdd139066ca54516aea6222d457c33d9302afa4adb6e8101a99316412d8de29f442fe7139a454a19510eec7ee
7
+ data.tar.gz: 21fc706d03691c93303cefc3db90c3198797bca8a8982cc631b32534386e2ad94cc919e20d2d3ae8959ead32a1caaf1630350d1be3f4ab5c5d4e288f5df59525
data/.rubocop.yml CHANGED
@@ -1,4 +1,4 @@
1
- inherit_from: https://raw.githubusercontent.com/decidim/decidim/develop/.rubocop_ruby.yml
1
+ inherit_from: https://raw.githubusercontent.com/decidim/decidim/develop/decidim-dev/config/rubocop/ruby.yml
2
2
 
3
3
  AllCops:
4
4
  Include:
data/Gemfile.lock CHANGED
@@ -1,73 +1,73 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- voting_schemes-electionguard (0.24.1)
4
+ voting_schemes-electionguard (0.24.3)
5
5
  rails (>= 5.0.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (7.0.4)
11
- actionpack (= 7.0.4)
12
- activesupport (= 7.0.4)
10
+ actioncable (7.0.8)
11
+ actionpack (= 7.0.8)
12
+ activesupport (= 7.0.8)
13
13
  nio4r (~> 2.0)
14
14
  websocket-driver (>= 0.6.1)
15
- actionmailbox (7.0.4)
16
- actionpack (= 7.0.4)
17
- activejob (= 7.0.4)
18
- activerecord (= 7.0.4)
19
- activestorage (= 7.0.4)
20
- activesupport (= 7.0.4)
15
+ actionmailbox (7.0.8)
16
+ actionpack (= 7.0.8)
17
+ activejob (= 7.0.8)
18
+ activerecord (= 7.0.8)
19
+ activestorage (= 7.0.8)
20
+ activesupport (= 7.0.8)
21
21
  mail (>= 2.7.1)
22
22
  net-imap
23
23
  net-pop
24
24
  net-smtp
25
- actionmailer (7.0.4)
26
- actionpack (= 7.0.4)
27
- actionview (= 7.0.4)
28
- activejob (= 7.0.4)
29
- activesupport (= 7.0.4)
25
+ actionmailer (7.0.8)
26
+ actionpack (= 7.0.8)
27
+ actionview (= 7.0.8)
28
+ activejob (= 7.0.8)
29
+ activesupport (= 7.0.8)
30
30
  mail (~> 2.5, >= 2.5.4)
31
31
  net-imap
32
32
  net-pop
33
33
  net-smtp
34
34
  rails-dom-testing (~> 2.0)
35
- actionpack (7.0.4)
36
- actionview (= 7.0.4)
37
- activesupport (= 7.0.4)
38
- rack (~> 2.0, >= 2.2.0)
35
+ actionpack (7.0.8)
36
+ actionview (= 7.0.8)
37
+ activesupport (= 7.0.8)
38
+ rack (~> 2.0, >= 2.2.4)
39
39
  rack-test (>= 0.6.3)
40
40
  rails-dom-testing (~> 2.0)
41
41
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
42
- actiontext (7.0.4)
43
- actionpack (= 7.0.4)
44
- activerecord (= 7.0.4)
45
- activestorage (= 7.0.4)
46
- activesupport (= 7.0.4)
42
+ actiontext (7.0.8)
43
+ actionpack (= 7.0.8)
44
+ activerecord (= 7.0.8)
45
+ activestorage (= 7.0.8)
46
+ activesupport (= 7.0.8)
47
47
  globalid (>= 0.6.0)
48
48
  nokogiri (>= 1.8.5)
49
- actionview (7.0.4)
50
- activesupport (= 7.0.4)
49
+ actionview (7.0.8)
50
+ activesupport (= 7.0.8)
51
51
  builder (~> 3.1)
52
52
  erubi (~> 1.4)
53
53
  rails-dom-testing (~> 2.0)
54
54
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
55
- activejob (7.0.4)
56
- activesupport (= 7.0.4)
55
+ activejob (7.0.8)
56
+ activesupport (= 7.0.8)
57
57
  globalid (>= 0.3.6)
58
- activemodel (7.0.4)
59
- activesupport (= 7.0.4)
60
- activerecord (7.0.4)
61
- activemodel (= 7.0.4)
62
- activesupport (= 7.0.4)
63
- activestorage (7.0.4)
64
- actionpack (= 7.0.4)
65
- activejob (= 7.0.4)
66
- activerecord (= 7.0.4)
67
- activesupport (= 7.0.4)
58
+ activemodel (7.0.8)
59
+ activesupport (= 7.0.8)
60
+ activerecord (7.0.8)
61
+ activemodel (= 7.0.8)
62
+ activesupport (= 7.0.8)
63
+ activestorage (7.0.8)
64
+ actionpack (= 7.0.8)
65
+ activejob (= 7.0.8)
66
+ activerecord (= 7.0.8)
67
+ activesupport (= 7.0.8)
68
68
  marcel (~> 1.0)
69
69
  mini_mime (>= 1.1.0)
70
- activesupport (7.0.4)
70
+ activesupport (7.0.8)
71
71
  concurrent-ruby (~> 1.0, >= 1.0.2)
72
72
  i18n (>= 1.6, < 2)
73
73
  minitest (>= 5.1)
@@ -76,67 +76,74 @@ GEM
76
76
  builder (3.2.4)
77
77
  concurrent-ruby (1.1.10)
78
78
  crass (1.0.6)
79
+ date (3.3.3)
79
80
  diff-lcs (1.5.0)
80
- erubi (1.11.0)
81
+ erubi (1.12.0)
81
82
  faker (2.22.0)
82
83
  i18n (>= 1.8.11, < 2)
83
- globalid (1.0.0)
84
- activesupport (>= 5.0)
84
+ globalid (1.2.1)
85
+ activesupport (>= 6.1)
85
86
  i18n (1.12.0)
86
87
  concurrent-ruby (~> 1.0)
87
- loofah (2.19.0)
88
+ loofah (2.21.3)
88
89
  crass (~> 1.0.2)
89
- nokogiri (>= 1.5.9)
90
- mail (2.7.1)
90
+ nokogiri (>= 1.12.0)
91
+ mail (2.8.1)
91
92
  mini_mime (>= 0.1.1)
93
+ net-imap
94
+ net-pop
95
+ net-smtp
92
96
  marcel (1.0.2)
93
97
  method_source (1.0.0)
94
- mini_mime (1.1.2)
95
- mini_portile2 (2.8.0)
96
- minitest (5.16.3)
97
- net-imap (0.3.1)
98
+ mini_mime (1.1.5)
99
+ mini_portile2 (2.8.4)
100
+ minitest (5.20.0)
101
+ net-imap (0.3.7)
102
+ date
98
103
  net-protocol
99
104
  net-pop (0.1.2)
100
105
  net-protocol
101
- net-protocol (0.1.3)
106
+ net-protocol (0.2.1)
102
107
  timeout
103
- net-smtp (0.3.3)
108
+ net-smtp (0.4.0)
104
109
  net-protocol
105
- nio4r (2.5.8)
106
- nokogiri (1.13.9)
107
- mini_portile2 (~> 2.8.0)
110
+ nio4r (2.5.9)
111
+ nokogiri (1.15.4)
112
+ mini_portile2 (~> 2.8.2)
108
113
  racc (~> 1.4)
109
- nokogiri (1.13.9-x86_64-linux)
114
+ nokogiri (1.15.4-x86_64-linux)
110
115
  racc (~> 1.4)
111
116
  parallel (1.22.1)
112
117
  parser (3.1.2.1)
113
118
  ast (~> 2.4.1)
114
- racc (1.6.0)
115
- rack (2.2.4)
116
- rack-test (2.0.2)
119
+ racc (1.7.1)
120
+ rack (2.2.8)
121
+ rack-test (2.1.0)
117
122
  rack (>= 1.3)
118
- rails (7.0.4)
119
- actioncable (= 7.0.4)
120
- actionmailbox (= 7.0.4)
121
- actionmailer (= 7.0.4)
122
- actionpack (= 7.0.4)
123
- actiontext (= 7.0.4)
124
- actionview (= 7.0.4)
125
- activejob (= 7.0.4)
126
- activemodel (= 7.0.4)
127
- activerecord (= 7.0.4)
128
- activestorage (= 7.0.4)
129
- activesupport (= 7.0.4)
123
+ rails (7.0.8)
124
+ actioncable (= 7.0.8)
125
+ actionmailbox (= 7.0.8)
126
+ actionmailer (= 7.0.8)
127
+ actionpack (= 7.0.8)
128
+ actiontext (= 7.0.8)
129
+ actionview (= 7.0.8)
130
+ activejob (= 7.0.8)
131
+ activemodel (= 7.0.8)
132
+ activerecord (= 7.0.8)
133
+ activestorage (= 7.0.8)
134
+ activesupport (= 7.0.8)
130
135
  bundler (>= 1.15.0)
131
- railties (= 7.0.4)
132
- rails-dom-testing (2.0.3)
133
- activesupport (>= 4.2.0)
136
+ railties (= 7.0.8)
137
+ rails-dom-testing (2.2.0)
138
+ activesupport (>= 5.0.0)
139
+ minitest
134
140
  nokogiri (>= 1.6)
135
- rails-html-sanitizer (1.4.3)
136
- loofah (~> 2.3)
137
- railties (7.0.4)
138
- actionpack (= 7.0.4)
139
- activesupport (= 7.0.4)
141
+ rails-html-sanitizer (1.6.0)
142
+ loofah (~> 2.21)
143
+ nokogiri (~> 1.14)
144
+ railties (7.0.8)
145
+ actionpack (= 7.0.8)
146
+ activesupport (= 7.0.8)
140
147
  method_source
141
148
  rake (>= 12.2)
142
149
  thor (~> 1.0)
@@ -175,15 +182,15 @@ GEM
175
182
  rubocop-rspec (2.11.1)
176
183
  rubocop (~> 1.19)
177
184
  ruby-progressbar (1.11.0)
178
- thor (1.2.1)
179
- timeout (0.3.0)
180
- tzinfo (2.0.5)
185
+ thor (1.2.2)
186
+ timeout (0.4.0)
187
+ tzinfo (2.0.6)
181
188
  concurrent-ruby (~> 1.0)
182
189
  unicode-display_width (2.2.0)
183
- websocket-driver (0.7.5)
190
+ websocket-driver (0.7.6)
184
191
  websocket-extensions (>= 0.1.0)
185
192
  websocket-extensions (0.1.5)
186
- zeitwerk (2.6.6)
193
+ zeitwerk (2.6.12)
187
194
 
188
195
  PLATFORMS
189
196
  ruby
@@ -1 +1 @@
1
- (()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{TrusteeWrapperAdapter:()=>o,VoterWrapperAdapter:()=>s});class r{processPythonCodeOnWorker(e,t){return new Promise(((r,o)=>{this.worker.onmessage=e=>{r(e.data.results)},this.worker.onerror=e=>{console.error(e),o(e)},this.worker.postMessage({python:e,...t})}))}}class o extends r{constructor({trusteeId:e,workerUrl:t}){super(),this.trusteeId=e,this.worker=new Worker(t)}setup(){return this.processPythonCodeOnWorker("\n from js import trustee_id\n from bulletin_board.electionguard.trustee import Trustee\n trustee = Trustee(trustee_id)\n ",{trustee_id:this.trusteeId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n import json\n from js import message_type, decoded_data\n trustee.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const[{message_type:e,content:t}]=r;return{messageType:e,content:t}}}isFresh(){return this.processPythonCodeOnWorker("\n trustee.is_fresh()\n ")}backup(){return this.processPythonCodeOnWorker("\n trustee.backup().hex()\n ")}restore(e){return this.processPythonCodeOnWorker("\n from js import state\n\n trustee = Trustee.restore(bytes.fromhex(state))\n True\n ",{state:e})}isKeyCeremonyDone(){return this.processPythonCodeOnWorker("\n trustee.is_key_ceremony_done()\n ")}isTallyDone(){return this.processPythonCodeOnWorker("\n trustee.is_tally_done()\n ")}}class s extends r{constructor({voterId:e,workerUrl:t}){super(),this.voterId=e,this.worker=new Worker(t)}setup(){return this.processPythonCodeOnWorker("\n from js import voter_id\n from bulletin_board.electionguard.voter import Voter\n voter = Voter(voter_id)\n ",{voter_id:this.voterId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n import json\n from js import message_type, decoded_data\n voter.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r[0]){const{message_type:e,content:t}=r[0];return{messageType:e,content:t}}}async encrypt(e,t){const[r,o]=await this.processPythonCodeOnWorker("\n from js import plain_vote, ballot_style\n voter.encrypt(plain_vote, ballot_style)\n ",{plain_vote:e,ballot_style:t});return{auditableData:r,encryptedData:o}}}window.electionGuardVotingScheme=t})();
1
+ (()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{TrusteeWrapperAdapter:()=>o,VoterWrapperAdapter:()=>s});class r{async processPythonCodeOnWorker(e,t){return new Promise(((r,o)=>{this.worker.onmessage=e=>{r(e.data.results)},this.worker.onerror=e=>{console.error("Error in worker",e),o(e)},this.worker.postMessage({python:e,...t})}))}}class o extends r{constructor({trusteeId:e,workerUrl:t}){super(),this.trusteeId=e,this.worker=new Worker(t)}async setup(){return await this.processPythonCodeOnWorker("\n from js import trustee_id\n from bulletin_board.electionguard.trustee import Trustee\n trustee = Trustee(trustee_id)\n ",{trustee_id:this.trusteeId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n from js import message_type, decoded_data\n import json\n trustee.process_message(\n message_type,\n json.loads(decoded_data)\n )\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const{message_type:e,content:t}=r[0]instanceof Map?Object.fromEntries(r[0]):r[0];return{messageType:e,content:t}}}isFresh(){return this.processPythonCodeOnWorker("\n trustee.is_fresh()\n ")}backup(){return this.processPythonCodeOnWorker("\n trustee.backup().hex()\n ")}restore(e){return this.processPythonCodeOnWorker("\n from js import state\n trustee = Trustee.restore(bytes.fromhex(state))\n True\n ",{state:e})}isKeyCeremonyDone(){return this.processPythonCodeOnWorker("\n trustee.is_key_ceremony_done()\n ")}isTallyDone(){return this.processPythonCodeOnWorker("\n trustee.is_tally_done()\n ")}}class s extends r{constructor({voterId:e,workerUrl:t}){super(),this.voterId=e,this.worker=new Worker(t)}async setup(){return await this.processPythonCodeOnWorker("\n from js import voter_id\n from bulletin_board.electionguard.voter import Voter\n voter = Voter(voter_id)\n ",{voter_id:this.voterId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n from js import message_type, decoded_data\n import json\n voter.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const{message_type:e,content:t}=r[0]instanceof Map?Object.fromEntries(r[0]):r[0];return{messageType:e,content:t}}}async encrypt(e,t){const[r,o]=await this.processPythonCodeOnWorker("\n from js import plain_vote, ballot_style\n voter.encrypt(plain_vote.to_py(), ballot_style)\n ",{plain_vote:e,ballot_style:t});return{auditableData:r,encryptedData:o}}}window.electionGuardVotingScheme=t})();
@@ -2,6 +2,6 @@
2
2
 
3
3
  module VotingSchemes
4
4
  module Electionguard
5
- VERSION = "0.24.1"
5
+ VERSION = "0.24.3"
6
6
  end
7
7
  end
Binary file
@@ -1 +1 @@
1
- var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};Module.checkABI(1);if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="attrs.data";var REMOTE_PACKAGE_BASE="attrs.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attr",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attrs-20.1.0-py3.8.egg-info",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createPreloadedFile"](this.name,null,byteArray,true,true,function(){Module["removeRunDependency"]("fp "+that.name)},function(){if(that.audio){Module["removeRunDependency"]("fp "+that.name)}else{err("Preloading file "+that.name+" failed")}},false,true);this.requests[this.name]=null}};function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:91927,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1231,2010,3362,4460,5698,6738,7921,8718,9850,11257,12730,14174,15470,16879,18055,19368,20506,21736,22892,23922,25049,26291,27413,28253,29420,30805,32248,33659,35083,36546,37893,39051,39971,41215,42356,43574,44523,45753,46842,48048,49054,50087,50590,51162,52317,53593,54715,55891,56793,58156,59540,60872,62024,63277,64412,65525,66596,67881,69096,70257,71439,72543,73691,75076,75834,76421,77020,77911,79012,80169,81184,82356,83768,85129,86558,87761,89137,90470,91634],sizes:[1231,779,1352,1098,1238,1040,1183,797,1132,1407,1473,1444,1296,1409,1176,1313,1138,1230,1156,1030,1127,1242,1122,840,1167,1385,1443,1411,1424,1463,1347,1158,920,1244,1141,1218,949,1230,1089,1206,1006,1033,503,572,1155,1276,1122,1176,902,1363,1384,1332,1152,1253,1135,1113,1071,1285,1215,1161,1182,1104,1148,1385,758,587,599,891,1101,1157,1015,1172,1412,1361,1429,1203,1376,1333,1164,293],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData.data=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData});Module["removeRunDependency"]("datafile_attrs.data")}Module["addRunDependency"]("datafile_attrs.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/attr/__init__.py",start:0,end:1568,audio:0},{filename:"/lib/python3.8/site-packages/attr/_compat.py",start:1568,end:8894,audio:0},{filename:"/lib/python3.8/site-packages/attr/_config.py",start:8894,end:9408,audio:0},{filename:"/lib/python3.8/site-packages/attr/_funcs.py",start:9408,end:21048,audio:0},{filename:"/lib/python3.8/site-packages/attr/_make.py",start:21048,end:105181,audio:0},{filename:"/lib/python3.8/site-packages/attr/_next_gen.py",start:105181,end:107959,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.py",start:107959,end:110121,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.py",start:110121,end:112335,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.py",start:112335,end:114285,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.py",start:114285,end:115383,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.py",start:115383,end:116817,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.py",start:116817,end:128314,audio:0},{filename:"/lib/python3.8/site-packages/attr/__init__.pyi",start:128314,end:140766,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.pyi",start:140766,end:140975,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.pyi",start:140975,end:141355,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.pyi",start:141355,end:141894,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.pyi",start:141894,end:142108,audio:0},{filename:"/lib/python3.8/site-packages/attr/py.typed",start:142108,end:142108,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.pyi",start:142108,end:142675,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.pyi",start:142675,end:144543,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/PKG-INFO",start:144543,end:160237,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/SOURCES.txt",start:160237,end:162053,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/dependency_links.txt",start:162053,end:162054,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/not-zip-safe",start:162054,end:162055,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/requires.txt",start:162055,end:162316,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/top_level.txt",start:162316,end:162321,audio:0}],remote_package_size:96023,package_uuid:"7be34235-3bd9-45d3-be84-e0631b5ac6df"})})();
1
+ var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="attrs.data";var REMOTE_PACKAGE_BASE="attrs.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attr",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attrs-20.3.0-py3.8.egg-info",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:92978,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1227,2006,3370,4474,5719,6922,7675,8936,9546,10717,12163,13627,14972,16280,17692,18936,20230,21408,22516,23639,24615,25769,26939,28145,29078,30174,31513,32982,34363,35793,37242,38685,39939,41019,42071,43329,44497,45703,46714,48039,49397,50538,51657,52710,53556,54223,55090,56433,57526,58752,59851,60878,62233,63549,64809,66043,67255,68514,69558,70665,71889,73220,74419,75617,76697,77673,78932,80211,80726,81351,81808,82902,84052,85128,86160,87398,88782,90168,91468,92514],sizes:[1227,779,1364,1104,1245,1203,753,1261,610,1171,1446,1464,1345,1308,1412,1244,1294,1178,1108,1123,976,1154,1170,1206,933,1096,1339,1469,1381,1430,1449,1443,1254,1080,1052,1258,1168,1206,1011,1325,1358,1141,1119,1053,846,667,867,1343,1093,1226,1099,1027,1355,1316,1260,1234,1212,1259,1044,1107,1224,1331,1199,1198,1080,976,1259,1279,515,625,457,1094,1150,1076,1032,1238,1384,1386,1300,1046,464],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData},true);Module["removeRunDependency"]("datafile_attrs.data")}Module["addRunDependency"]("datafile_attrs.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/attr/__init__.py",start:0,end:1568,audio:0},{filename:"/lib/python3.8/site-packages/attr/_compat.py",start:1568,end:8876,audio:0},{filename:"/lib/python3.8/site-packages/attr/_config.py",start:8876,end:9390,audio:0},{filename:"/lib/python3.8/site-packages/attr/_funcs.py",start:9390,end:22471,audio:0},{filename:"/lib/python3.8/site-packages/attr/_make.py",start:22471,end:110784,audio:0},{filename:"/lib/python3.8/site-packages/attr/_next_gen.py",start:110784,end:114922,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.py",start:114922,end:117084,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.py",start:117084,end:119298,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.py",start:119298,end:121248,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.py",start:121248,end:122346,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.py",start:122346,end:123780,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.py",start:123780,end:135277,audio:0},{filename:"/lib/python3.8/site-packages/attr/__init__.pyi",start:135277,end:148263,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.pyi",start:148263,end:148472,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.pyi",start:148472,end:148852,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.pyi",start:148852,end:149391,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.pyi",start:149391,end:149605,audio:0},{filename:"/lib/python3.8/site-packages/attr/py.typed",start:149605,end:149605,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.pyi",start:149605,end:150172,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.pyi",start:150172,end:152040,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/PKG-INFO",start:152040,end:162595,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/SOURCES.txt",start:162595,end:164440,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/dependency_links.txt",start:164440,end:164441,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/not-zip-safe",start:164441,end:164442,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/requires.txt",start:164442,end:164755,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/top_level.txt",start:164755,end:164760,audio:0}],remote_package_size:97074,package_uuid:"f0be090d-5cb6-4ce9-a045-0253e15d3955"})})();
@@ -1 +1 @@
1
- var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};Module.checkABI(1);if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="bulletin_board-electionguard.data";var REMOTE_PACKAGE_BASE="bulletin_board-electionguard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages/bulletin_board","electionguard",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board_electionguard-0.1.1-py3.8.egg-info",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createPreloadedFile"](this.name,null,byteArray,true,true,function(){Module["removeRunDependency"]("fp "+that.name)},function(){if(that.audio){Module["removeRunDependency"]("fp "+that.name)}else{err("Preloading file "+that.name+" failed")}},false,true);this.requests[this.name]=null}};function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:26369,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,904,1976,3034,3991,4817,5577,6708,7633,8425,9315,10338,11343,12346,13358,14570,15559,16820,17855,18784,19627,20537,21564,22738,23748,24730,26024],sizes:[904,1072,1058,957,826,760,1131,925,792,890,1023,1005,1003,1012,1212,989,1261,1035,929,843,910,1027,1174,1010,982,1294,345],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData.data=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData});Module["removeRunDependency"]("datafile_bulletin_board-electionguard.data")}Module["addRunDependency"]("datafile_bulletin_board-electionguard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/bulletin_board/__init__.py",start:0,end:0,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/voter.py",start:0,end:3852,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/tally_decryptor.py",start:3852,end:12936,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/trustee.py",start:12936,end:28917,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/dummy_scheduler.py",start:28917,end:29288,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/election.py",start:29288,end:33385,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/serializable.py",start:33385,end:36143,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/__init__.py",start:36143,end:36143,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/bulletin_board.py",start:36143,end:45648,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/common.py",start:45648,end:49846,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/messages.py",start:49846,end:51559,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/utils.py",start:51559,end:52792,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/PKG-INFO",start:52792,end:53140,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/requires.txt",start:53140,end:53172,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/top_level.txt",start:53172,end:53187,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/SOURCES.txt",start:53187,end:54043,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/dependency_links.txt",start:54043,end:54201,audio:0}],remote_package_size:30465,package_uuid:"e447f605-5978-46e9-b038-c8bb0e0674f9"})})();
1
+ var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="bulletin_board-electionguard.data";var REMOTE_PACKAGE_BASE="bulletin_board-electionguard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board_electionguard-0.1.1-py3.8.egg-info",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages/bulletin_board","electionguard",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:26805,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1088,2277,3305,4361,5364,6209,6987,8084,9014,10138,11001,11858,12803,13829,14793,15728,16809,17905,18957,20050,21188,22192,23353,24125,25098,26019],sizes:[1088,1189,1028,1056,1003,845,778,1097,930,1124,863,857,945,1026,964,935,1081,1096,1052,1093,1138,1004,1161,772,973,921,786],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData},true);Module["removeRunDependency"]("datafile_bulletin_board-electionguard.data")}Module["addRunDependency"]("datafile_bulletin_board-electionguard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/PKG-INFO",start:0,end:348,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/SOURCES.txt",start:348,end:1253,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/requires.txt",start:1253,end:1285,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/dependency_links.txt",start:1285,end:1443,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/top_level.txt",start:1443,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/__init__.py",start:1458,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/common.py",start:1458,end:6073,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/tally_decryptor.py",start:6073,end:15156,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/utils.py",start:15156,end:16389,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/messages.py",start:16389,end:18101,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/trustee.py",start:18101,end:34144,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/serializable.py",start:34144,end:36902,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/dummy_scheduler.py",start:36902,end:37273,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/voter.py",start:37273,end:41172,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/election.py",start:41172,end:45269,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/bulletin_board.py",start:45269,end:54785,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/__init__.py",start:54785,end:54785,audio:0}],remote_package_size:30901,package_uuid:"7bc125a9-1257-44c4-aaa9-e2890bb3679c"})})();
@@ -2,83 +2,111 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <script src="https://code.jquery.com/jquery-latest.js"></script>
6
- <script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
7
- <link href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet"/>
8
- <link href="renderedhtml.css" rel="stylesheet"/>
9
- <script type="text/javascript">
10
- // set the pyodide files URL (packages.json, pyodide.asm.data etc)
11
- window.languagePluginUrl = './';
12
- </script>
5
+ <script src="https://cdn.jsdelivr.net/npm/jquery"></script>
6
+ <script src="https://cdn.jsdelivr.net/npm/jquery.terminal@2.23.0/js/jquery.terminal.min.js"></script>
7
+ <link href="https://cdn.jsdelivr.net/npm/jquery.terminal@2.23.0/css/jquery.terminal.min.css" rel="stylesheet"/>
13
8
  <script src="./pyodide.js"></script>
9
+ <style>
10
+ .terminal { --size: 1.5; }
11
+ </style>
14
12
  </head>
15
13
  <body>
16
14
  <script>
17
- languagePluginLoader.then(() => {
18
- function pushCode(line) {
19
- handleResult(c.push(line))
20
- }
15
+ function sleep(s){
16
+ return new Promise(resolve => setTimeout(resolve, s));
17
+ }
18
+ async function main() {
19
+ await loadPyodide({ indexURL : './' });
20
+ let namespace = pyodide.globals.get("dict")();
21
+ pyodide.runPython(`
22
+ import sys
23
+ import js
24
+ from pyodide import console
25
+ import __main__
21
26
 
22
- var term = $('body').terminal(
23
- pushCode,
24
- {
25
- greetings: "Welcome to the Pyodide terminal emulator 🐍",
26
- prompt: "[[;red;]>>> ]"
27
- }
28
- );
27
+ class PyConsole(console._InteractiveConsole):
28
+ def __init__(self):
29
+ super().__init__(
30
+ __main__.__dict__,
31
+ persistent_stream_redirection=False,
32
+ )
29
33
 
30
- window.term = term;
31
- pyodide.runPython(`
32
- import io, code, sys
33
- from js import term, pyodide
34
+ def banner(self):
35
+ return f"Welcome to the Pyodide terminal emulator 🐍\\n{super().banner()}"
34
36
 
35
- class Console(code.InteractiveConsole):
36
- def runcode(self, code):
37
- sys.stdout = io.StringIO()
38
- sys.stderr = io.StringIO()
39
- term.runPython("\\n".join(self.buffer))
40
- _c = Console(locals=globals())
41
- `)
42
37
 
43
- var c = pyodide.pyimport('_c')
38
+ js.pyconsole = PyConsole()
39
+ `, namespace);
40
+ namespace.destroy();
44
41
 
45
- function handleResult(result) {
46
- if (result) {
47
- term.set_prompt('[[;gray;]... ]')
48
- } else {
49
- term.set_prompt('[[;red;]>>> ]')
50
- var stderr = pyodide.runPython("sys.stderr.getvalue()").trim()
51
- if (stderr) {
52
- term.echo(`[[;red;]${stderr}]`)
53
- } else {
54
- var stdout = pyodide.runPython("sys.stdout.getvalue()")
55
- if (stdout) {
56
- term.echo(stdout.trim())
57
- }
58
- }
59
- }
60
- }
42
+ let ps1 = '>>> ', ps2 = '... ';
61
43
 
62
- term.runPython = function(code) {
63
- pyodide.runPythonAsync(code).then(
64
- term.handlePythonResult, term.handlePythonError
65
- )
44
+ async function lock(){
45
+ let resolve;
46
+ let ready = term.ready;
47
+ term.ready = new Promise(res => resolve = res);
48
+ await ready;
49
+ return resolve;
66
50
  }
67
51
 
68
- term.handlePythonResult = function(result) {
69
- if (result === undefined) {
70
- return
71
- } else if (result['_repr_html_'] !== undefined) {
72
- term.echo(result['_repr_html_'], {raw: true})
73
- } else {
74
- term.echo(result.toString())
52
+ async function interpreter(command) {
53
+ let unlock = await lock();
54
+ try {
55
+ term.pause();
56
+ // multiline should be splitted (useful when pasting)
57
+ for( const c of command.split('\n') ) {
58
+ let run_complete = pyconsole.run_complete;
59
+ try {
60
+ const incomplete = pyconsole.push(c);
61
+ term.set_prompt(incomplete ? ps2 : ps1);
62
+ let r = await run_complete;
63
+ if(pyodide.isPyProxy(r)){
64
+ r.destroy();
65
+ }
66
+ } catch(e){
67
+ if(e.name !== "PythonError"){
68
+ term.error(e);
69
+ throw e;
70
+ }
71
+ }
72
+ run_complete.destroy();
73
+ }
74
+ } finally {
75
+ term.resume();
76
+ await sleep(10);
77
+ unlock();
75
78
  }
76
79
  }
77
80
 
78
- term.handlePythonError = function(result) {
79
- term.error(result.toString())
81
+ let term = $('body').terminal(
82
+ interpreter,
83
+ {
84
+ greetings: pyconsole.banner(),
85
+ prompt: ps1,
86
+ completionEscape: false,
87
+ completion: function(command, callback) {
88
+ callback(pyconsole.complete(command).toJs()[0]);
89
+ }
90
+ }
91
+ );
92
+ window.term = term;
93
+ pyconsole.stdout_callback = s => term.echo(s, {newline : false});
94
+ pyconsole.stderr_callback = s => {
95
+ term.error(s.trimEnd());
80
96
  }
81
- });
97
+ term.ready = Promise.resolve();
98
+ pyodide._module.on_fatal = async (e) => {
99
+ term.error("Pyodide has suffered a fatal error. Please report this to the Pyodide maintainers.");
100
+ term.error("The cause of the fatal error was:");
101
+ term.error(e);
102
+ term.error("Look in the browser console for more details.");
103
+ await term.ready;
104
+ term.pause();
105
+ await sleep(15);
106
+ term.pause();
107
+ };
108
+ }
109
+ window.console_ready = main();
82
110
  </script>
83
111
  </body>
84
112
  </html>