0 00:00:00,000 --> 00:00:30,000 Dear viewer, these subtitles were generated by a machine via the service Trint and therefore are (very) buggy. If you are capable, please help us to create good quality subtitles: https://c3subtitles.de/talk/558 Thanks! 1 00:00:09,240 --> 00:00:11,489 Hello and welcome, everybody, to 2 00:00:11,490 --> 00:00:14,129 the next talk after the break. 3 00:00:14,130 --> 00:00:16,529 It's so great that you're all here 4 00:00:16,530 --> 00:00:18,629 to learn about your art. 5 00:00:20,510 --> 00:00:23,929 And I'm so glad to introduce 6 00:00:23,930 --> 00:00:26,569 to you who usually 7 00:00:26,570 --> 00:00:28,789 speaks about security at Congress, 8 00:00:28,790 --> 00:00:31,039 but this time he brought 9 00:00:31,040 --> 00:00:33,319 to use some great tool he will 10 00:00:33,320 --> 00:00:35,119 release and explain to you. 11 00:00:35,120 --> 00:00:37,249 I hope you're all here to make a QR 12 00:00:37,250 --> 00:00:39,349 codes better, more 13 00:00:39,350 --> 00:00:41,809 beautiful, because nowadays 14 00:00:41,810 --> 00:00:44,209 there are still many of the times 15 00:00:44,210 --> 00:00:46,369 ugly. And next year at Congress, I 16 00:00:46,370 --> 00:00:48,739 really want to see some great stickers 17 00:00:48,740 --> 00:00:50,569 with great QR codes. 18 00:00:50,570 --> 00:00:52,339 So give it up for Hendrickx. 19 00:00:52,340 --> 00:00:53,340 Thank you. 20 00:00:59,430 --> 00:01:01,019 Yeah, thank you for the introduction. 21 00:01:01,020 --> 00:01:02,639 It's actually good that you said next 22 00:01:02,640 --> 00:01:04,769 Congress because it's not quite finished, 23 00:01:06,900 --> 00:01:08,699 but I will give you some building blocks 24 00:01:08,700 --> 00:01:10,650 for Tool and I will 25 00:01:12,010 --> 00:01:14,189 most of the talk will consist of me 26 00:01:14,190 --> 00:01:15,989 explaining to you how a QR code 27 00:01:17,160 --> 00:01:19,259 is constructed, which you will need 28 00:01:19,260 --> 00:01:21,299 in order to manipulate, manipulate it, 29 00:01:23,790 --> 00:01:25,619 as you might or might not know. 30 00:01:26,940 --> 00:01:28,379 Before the talk, I've met a couple of 31 00:01:28,380 --> 00:01:30,299 people who didn't even know what QR code 32 00:01:30,300 --> 00:01:32,009 was that? 33 00:01:32,010 --> 00:01:33,959 That is some kind of barcodes. 34 00:01:35,150 --> 00:01:37,349 The QR stands for Quick Response 35 00:01:37,350 --> 00:01:39,989 was developed in 1994 36 00:01:39,990 --> 00:01:42,060 for the automotive industry in Japan 37 00:01:44,100 --> 00:01:45,899 in order to store more data than a 38 00:01:45,900 --> 00:01:48,929 conventional flat to the barcode. 39 00:01:48,930 --> 00:01:50,999 It has since been standardized 40 00:01:51,000 --> 00:01:53,309 as an international standard in 41 00:01:53,310 --> 00:01:55,839 ISO eighteen or for 42 00:01:55,840 --> 00:01:58,409 first anodized in 2000 and 43 00:01:58,410 --> 00:01:59,969 updated in 2006. 44 00:01:59,970 --> 00:02:03,059 The 2000 standard is no longer valid. 45 00:02:03,060 --> 00:02:05,759 QR codes have a wide adoption in Asia. 46 00:02:05,760 --> 00:02:07,679 They have been using this stuff for ages 47 00:02:07,680 --> 00:02:09,809 now, but I've seen, especially in the 48 00:02:09,810 --> 00:02:11,789 last year, the last two years have seen a 49 00:02:11,790 --> 00:02:13,979 lot of codes in Europe and I was 50 00:02:13,980 --> 00:02:16,109 especially glad to see so many QR 51 00:02:16,110 --> 00:02:17,369 codes on this Congress 52 00:02:19,470 --> 00:02:21,719 compared with last year where there were 53 00:02:21,720 --> 00:02:22,720 basically none. 54 00:02:25,130 --> 00:02:27,229 One of the reasons why 55 00:02:27,230 --> 00:02:29,629 this is now getting more and more adopted 56 00:02:29,630 --> 00:02:31,879 is that there are free Reede 57 00:02:31,880 --> 00:02:34,489 applications for most smartphones, 58 00:02:34,490 --> 00:02:36,979 even for Nonsuch smartphones. 59 00:02:36,980 --> 00:02:39,259 My old Nokia, for example, 60 00:02:39,260 --> 00:02:41,239 didn't have that many applications, but 61 00:02:41,240 --> 00:02:43,249 there was one barcode reader built in and 62 00:02:43,250 --> 00:02:45,439 I was always confused because this 63 00:02:45,440 --> 00:02:48,259 thing wouldn't read any 64 00:02:48,260 --> 00:02:50,599 and the two debacle that you 65 00:02:50,600 --> 00:02:51,710 find on every product. 66 00:02:52,730 --> 00:02:54,289 But it was called Barcode Reader, and it 67 00:02:54,290 --> 00:02:56,599 turns out that this was a QR code reader 68 00:02:56,600 --> 00:02:58,999 and it could read a QR code just fine. 69 00:03:01,160 --> 00:03:03,799 Apart from the standard used there, 70 00:03:03,800 --> 00:03:05,989 which I'm only 71 00:03:05,990 --> 00:03:07,879 talking about, little people have been 72 00:03:07,880 --> 00:03:09,949 using QR codes in a variety 73 00:03:09,950 --> 00:03:11,989 of creative ways. 74 00:03:11,990 --> 00:03:14,329 Most of you might be familiar with the 75 00:03:14,330 --> 00:03:15,859 right one. 76 00:03:15,860 --> 00:03:18,049 That is one of the first examples 77 00:03:18,050 --> 00:03:20,299 for a QR code that isn't just 78 00:03:20,300 --> 00:03:23,089 from machine consumption, but also 79 00:03:23,090 --> 00:03:25,039 nice to look at for human. 80 00:03:26,330 --> 00:03:28,429 That was 2008 for the BBC. 81 00:03:30,020 --> 00:03:31,939 It turns out that this isn't actually a 82 00:03:31,940 --> 00:03:34,009 very sophisticated mechanism, it 83 00:03:34,010 --> 00:03:36,229 only looks like this because 84 00:03:36,230 --> 00:03:38,329 the BBC let 85 00:03:38,330 --> 00:03:40,879 us on. They are just overlayed 86 00:03:40,880 --> 00:03:43,039 you could have drawn, I don't know, 87 00:03:43,040 --> 00:03:45,169 a pony and unicorn in there. 88 00:03:45,170 --> 00:03:47,299 And from a machinery perspective, from 89 00:03:47,300 --> 00:03:48,919 the barcode reader perspective, that 90 00:03:48,920 --> 00:03:51,079 would have been the same. 91 00:03:51,080 --> 00:03:53,149 Those look like they belong to the court, 92 00:03:53,150 --> 00:03:54,150 but they don't. 93 00:03:56,810 --> 00:03:59,089 This example I got so I am always 94 00:03:59,090 --> 00:04:00,679 citing my sources, this example I got 95 00:04:00,680 --> 00:04:02,899 from the great Russ Cox, who has 96 00:04:02,900 --> 00:04:05,419 a very similar project 97 00:04:05,420 --> 00:04:06,889 that isn't as wide in scope. 98 00:04:06,890 --> 00:04:08,329 I'm going to reference that later on. 99 00:04:08,330 --> 00:04:10,609 Again, he also 100 00:04:10,610 --> 00:04:13,069 referenced another blog entry 101 00:04:13,070 --> 00:04:14,359 from 2009. 102 00:04:14,360 --> 00:04:16,458 Like I said, the, uh, 103 00:04:16,459 --> 00:04:18,229 people in Japan and Asia have been using 104 00:04:18,230 --> 00:04:19,940 QR codes for quite some time now. 105 00:04:20,959 --> 00:04:23,659 Those Disney advertisements, 106 00:04:23,660 --> 00:04:25,969 which also have a perfectly 107 00:04:25,970 --> 00:04:28,189 readable barcode that looks like 108 00:04:28,190 --> 00:04:30,499 it might include 109 00:04:30,500 --> 00:04:32,809 some of the Disney characters, but 110 00:04:32,810 --> 00:04:34,860 they are not really part of the barcode. 111 00:04:36,440 --> 00:04:38,599 This is the project from Biros, Cox, 112 00:04:38,600 --> 00:04:40,879 Cox. Q Art, he calls 113 00:04:40,880 --> 00:04:43,459 it, um, he 114 00:04:43,460 --> 00:04:45,439 did really great things and is able to 115 00:04:45,440 --> 00:04:47,809 encode pictures in most of the pixels. 116 00:04:49,760 --> 00:04:51,379 Those two codes are readable. 117 00:04:51,380 --> 00:04:54,199 They are fully valid QR codes. 118 00:04:54,200 --> 00:04:56,449 There is no trickery, no 119 00:04:56,450 --> 00:04:58,519 error correction involved. 120 00:04:58,520 --> 00:05:00,619 Um, I'm not going 121 00:05:00,620 --> 00:05:02,089 to explain fully how that works. 122 00:05:02,090 --> 00:05:04,069 I'm just referencing that you can read up 123 00:05:04,070 --> 00:05:05,569 on the first link. 124 00:05:08,190 --> 00:05:10,529 For these examples, like I said, 125 00:05:10,530 --> 00:05:13,199 these aren't properly integrated, 126 00:05:13,200 --> 00:05:15,959 they are just over painted. 127 00:05:15,960 --> 00:05:18,089 That works because the QR code can 128 00:05:18,090 --> 00:05:20,519 handle a lot of damage 129 00:05:20,520 --> 00:05:21,629 people might smudge on. 130 00:05:21,630 --> 00:05:23,879 There might be coffee stains on the QR 131 00:05:23,880 --> 00:05:26,009 code. That's why this error correction 132 00:05:26,010 --> 00:05:28,139 in there. And if you look at this code 133 00:05:28,140 --> 00:05:30,419 and this code, human might not be able 134 00:05:30,420 --> 00:05:32,129 to see the difference that easily. 135 00:05:32,130 --> 00:05:35,339 But I've invited a lot of the pixels, 136 00:05:35,340 --> 00:05:36,689 which means they are damaged. 137 00:05:36,690 --> 00:05:38,069 They don't encode what they should 138 00:05:38,070 --> 00:05:40,769 encode. But a QR code reader, 139 00:05:40,770 --> 00:05:43,169 if anyone has one, you can try can 140 00:05:43,170 --> 00:05:44,849 read this one just fine. 141 00:05:44,850 --> 00:05:46,109 It's encoded at the highest error 142 00:05:46,110 --> 00:05:47,669 correction level. 143 00:05:47,670 --> 00:05:48,670 And 144 00:05:50,610 --> 00:05:53,879 at the IRS correction level, the 145 00:05:53,880 --> 00:05:55,649 code can be damaged to up to a 30 146 00:05:55,650 --> 00:05:56,650 percent. 147 00:05:58,250 --> 00:05:59,809 This one might be a little bit easier. 148 00:05:59,810 --> 00:06:01,939 This is where I instead of inverting 149 00:06:01,940 --> 00:06:04,039 the area I over painted it, I 150 00:06:04,040 --> 00:06:06,229 could have drawn a logo and egg just 151 00:06:06,230 --> 00:06:07,939 made it black. 152 00:06:07,940 --> 00:06:10,279 Of course. Now, it's not 30 percent 153 00:06:10,280 --> 00:06:11,809 damage. It's only 15 percent damage 154 00:06:11,810 --> 00:06:13,429 because on average, 15 percent of the 155 00:06:13,430 --> 00:06:14,929 pixels already black 156 00:06:16,070 --> 00:06:19,099 over a painting is in wide use. 157 00:06:19,100 --> 00:06:20,719 One of the most recent examples I 158 00:06:20,720 --> 00:06:22,429 particularly liked was a project called 159 00:06:22,430 --> 00:06:24,979 Sandstorm. This is their logo already 160 00:06:24,980 --> 00:06:27,109 looks like a code and this is 161 00:06:27,110 --> 00:06:28,110 their QR code. 162 00:06:30,080 --> 00:06:32,239 It does look like the court has the logos 163 00:06:32,240 --> 00:06:33,169 and better that it's not. 164 00:06:33,170 --> 00:06:35,089 It's just overpaint it. 165 00:06:35,090 --> 00:06:35,929 With my tools. 166 00:06:35,930 --> 00:06:37,999 You could see the original code 167 00:06:39,950 --> 00:06:42,169 that was over painted on 168 00:06:42,170 --> 00:06:43,549 another example. 169 00:06:43,550 --> 00:06:45,739 I'm not showing too many examples because 170 00:06:45,740 --> 00:06:47,779 most of them these are for advertisement 171 00:06:47,780 --> 00:06:49,279 and I don't want to advertise. 172 00:06:49,280 --> 00:06:50,899 I might advertise for this project 173 00:06:50,900 --> 00:06:52,489 because it's cool. 174 00:06:52,490 --> 00:06:54,769 They also have a code that is 175 00:06:54,770 --> 00:06:55,850 using overprinting. 176 00:06:57,420 --> 00:06:59,549 Like I said, the other 177 00:06:59,550 --> 00:07:01,709 method to do 178 00:07:01,710 --> 00:07:03,869 fun stuff is the 179 00:07:03,870 --> 00:07:05,939 Project Q Art 180 00:07:05,940 --> 00:07:08,009 Russ Kwok's, he has a different 181 00:07:08,010 --> 00:07:10,529 trick. He noticed 182 00:07:10,530 --> 00:07:12,869 that it's it doesn't matter if 183 00:07:12,870 --> 00:07:14,879 you have a yellow and htp. 184 00:07:14,880 --> 00:07:17,099 Well, it doesn't matter if there 185 00:07:17,100 --> 00:07:19,409 is a very long hash that doesn't 186 00:07:19,410 --> 00:07:20,410 really exist. 187 00:07:21,870 --> 00:07:24,179 This so this is the actual 188 00:07:24,180 --> 00:07:26,429 HTP oil and 189 00:07:26,430 --> 00:07:28,740 this is a hash fragment identifier 190 00:07:30,060 --> 00:07:32,159 which the browser is going to look 191 00:07:32,160 --> 00:07:34,379 for but won't find and then 192 00:07:34,380 --> 00:07:35,819 just ignores. 193 00:07:35,820 --> 00:07:37,889 And the face you see in the 194 00:07:37,890 --> 00:07:40,379 code below here is actually just encoded 195 00:07:40,380 --> 00:07:42,209 in this number sequence. 196 00:07:42,210 --> 00:07:44,429 He has done a lot of a lot 197 00:07:44,430 --> 00:07:46,799 of math in order to calculate 198 00:07:46,800 --> 00:07:48,689 the number sequence that will encode this 199 00:07:48,690 --> 00:07:50,129 picture, this face 200 00:07:51,390 --> 00:07:52,299 with this technique. 201 00:07:52,300 --> 00:07:54,329 He can control both of the data and error 202 00:07:54,330 --> 00:07:55,949 correction pixels, though not 203 00:07:55,950 --> 00:07:57,629 particularly simultaneously. 204 00:07:57,630 --> 00:07:59,459 He can only. 205 00:07:59,460 --> 00:08:02,459 So if you are caught, for example, has 26 206 00:08:02,460 --> 00:08:04,619 words and total sixteen bits of 207 00:08:04,620 --> 00:08:06,779 those data, ten words 208 00:08:06,780 --> 00:08:09,029 are error correction. 209 00:08:10,320 --> 00:08:12,149 Of course, you can only control the data. 210 00:08:12,150 --> 00:08:14,159 So you at most you can control 16 words 211 00:08:14,160 --> 00:08:16,349 in total, like ten data 212 00:08:16,350 --> 00:08:18,029 words and six error correction words. 213 00:08:19,770 --> 00:08:20,770 Um. 214 00:08:22,010 --> 00:08:24,289 So this was the introduction and 215 00:08:24,290 --> 00:08:26,329 a little bit of motivation why I want to 216 00:08:26,330 --> 00:08:28,669 be able to modify more than that, 217 00:08:28,670 --> 00:08:30,109 because as you can see, there are still a 218 00:08:30,110 --> 00:08:31,789 lot of structure and there that she can 219 00:08:31,790 --> 00:08:32,790 control. 220 00:08:33,740 --> 00:08:36,079 Turns out that QR code, 221 00:08:36,080 --> 00:08:38,449 as you know and love it, 222 00:08:38,450 --> 00:08:40,129 looks simple, but isn't. 223 00:08:40,130 --> 00:08:42,889 Yeah, I call it deceptively simple. 224 00:08:42,890 --> 00:08:45,169 The basic module or the basic unit 225 00:08:45,170 --> 00:08:47,119 of a QR code is called a module that 226 00:08:47,120 --> 00:08:48,409 that's simple enough. 227 00:08:48,410 --> 00:08:50,839 A single pixel in in 228 00:08:50,840 --> 00:08:52,849 Isel speak is called a module. 229 00:08:52,850 --> 00:08:55,369 But a lot of the other stuff 230 00:08:55,370 --> 00:08:57,439 also has some function. 231 00:08:57,440 --> 00:08:59,509 Those big ones in the 232 00:08:59,510 --> 00:09:02,539 corners are called the finder patterns. 233 00:09:02,540 --> 00:09:04,429 Those actually need to be there in order 234 00:09:04,430 --> 00:09:06,139 for the QR code reader to find the pen. 235 00:09:07,610 --> 00:09:09,829 And what I didn't notice 236 00:09:09,830 --> 00:09:11,659 before, I'm not sure if any of you have 237 00:09:11,660 --> 00:09:12,619 noticed this. 238 00:09:12,620 --> 00:09:14,989 There's a timing pattern over here. 239 00:09:14,990 --> 00:09:17,659 Those pixels always alternate. 240 00:09:17,660 --> 00:09:19,909 You usually don't notice that 241 00:09:19,910 --> 00:09:21,949 even though a human normally is pretty 242 00:09:21,950 --> 00:09:24,079 good at identifying 243 00:09:24,080 --> 00:09:24,949 patterns. 244 00:09:24,950 --> 00:09:26,200 I didn't see that before. 245 00:09:28,430 --> 00:09:30,529 The ISO standard specifies the 246 00:09:30,530 --> 00:09:32,389 encoding procedure. 247 00:09:32,390 --> 00:09:34,459 Turns out that also what it 248 00:09:34,460 --> 00:09:36,649 did not notice before is that there are 249 00:09:36,650 --> 00:09:38,959 four different encoding modes, numeric 250 00:09:38,960 --> 00:09:41,479 alphanumeric Árpád bytes and kanji. 251 00:09:41,480 --> 00:09:43,609 Like I said this originally or 252 00:09:43,610 --> 00:09:44,710 originates from Asia, 253 00:09:45,920 --> 00:09:48,439 then you have to determine 254 00:09:48,440 --> 00:09:49,819 the version. I'm telling you a little bit 255 00:09:49,820 --> 00:09:51,739 about that later. 256 00:09:51,740 --> 00:09:52,740 The same 257 00:09:54,140 --> 00:09:55,789 is then encode it into a bitstream. 258 00:09:59,260 --> 00:10:01,509 I'm betting 259 00:10:01,510 --> 00:10:02,769 is that it edit, 260 00:10:04,090 --> 00:10:06,429 as you will see later, all the encodings 261 00:10:06,430 --> 00:10:08,559 switching is done, done in forward 262 00:10:08,560 --> 00:10:10,809 units, everything is bid based. 263 00:10:10,810 --> 00:10:12,819 Leong's sometimes nine bids long, 264 00:10:12,820 --> 00:10:14,709 sometimes 11 bids long. 265 00:10:14,710 --> 00:10:16,539 So everything after that, it has to be 266 00:10:16,540 --> 00:10:18,099 split into code words. 267 00:10:18,100 --> 00:10:20,319 The code words are then to 268 00:10:20,320 --> 00:10:22,119 these code words then is an error 269 00:10:22,120 --> 00:10:24,490 correction code based on Solomon or edit 270 00:10:25,720 --> 00:10:27,849 afterwards, which is also very 271 00:10:27,850 --> 00:10:30,969 confusing. And I didn't know before 272 00:10:30,970 --> 00:10:33,189 the data and the error correction 273 00:10:33,190 --> 00:10:34,869 words are interleaved. 274 00:10:34,870 --> 00:10:37,119 So even though the code 275 00:10:37,120 --> 00:10:40,479 is filled from one particular position, 276 00:10:40,480 --> 00:10:42,879 you won't find your data at that position 277 00:10:42,880 --> 00:10:45,279 incrementing, but your data is 278 00:10:45,280 --> 00:10:47,349 split a scattered all over the 279 00:10:47,350 --> 00:10:49,119 place. I'll show a picture later. 280 00:10:50,530 --> 00:10:52,989 Then those special modules, 281 00:10:52,990 --> 00:10:54,429 those special pixels are placed there 282 00:10:54,430 --> 00:10:56,499 called function modules. 283 00:10:56,500 --> 00:10:58,749 And another thing I didn't know before 284 00:10:58,750 --> 00:11:01,419 is that a masking is applied. 285 00:11:01,420 --> 00:11:03,399 There are seven different masks that are 286 00:11:03,400 --> 00:11:05,889 overlaid over the code 287 00:11:05,890 --> 00:11:07,989 in order to obscure deliberately 288 00:11:07,990 --> 00:11:09,999 obscure features you would normally see 289 00:11:10,000 --> 00:11:11,000 in the code. 290 00:11:12,820 --> 00:11:14,409 Of course, if you know that beforehand, 291 00:11:14,410 --> 00:11:16,449 you can adjust your data so that this 292 00:11:16,450 --> 00:11:19,179 doesn't bother you like 293 00:11:19,180 --> 00:11:20,379 Ross projected. 294 00:11:20,380 --> 00:11:22,059 But if you would just encode, for 295 00:11:22,060 --> 00:11:24,489 example, a sequence of spaces 296 00:11:24,490 --> 00:11:26,409 you would normally expect, I'm not sure 297 00:11:26,410 --> 00:11:27,489 if anyone has ever tried that. 298 00:11:27,490 --> 00:11:29,199 You would normally expect to see some 299 00:11:29,200 --> 00:11:30,799 pattern and no resulting code. 300 00:11:30,800 --> 00:11:32,529 You don't because there's 301 00:11:33,820 --> 00:11:35,080 masking applied 302 00:11:36,250 --> 00:11:38,739 and at last 303 00:11:38,740 --> 00:11:41,679 format and version informationis is edit 304 00:11:41,680 --> 00:11:43,749 that so that the decoder can 305 00:11:43,750 --> 00:11:45,909 find out what kind of code 306 00:11:45,910 --> 00:11:46,910 he has. 307 00:11:49,080 --> 00:11:51,419 Like I said, the data 308 00:11:51,420 --> 00:11:53,429 has to be encoded, there are four basic 309 00:11:53,430 --> 00:11:55,709 modes, the first, the most 310 00:11:55,710 --> 00:11:57,299 obvious on the first one that was 311 00:11:57,300 --> 00:11:59,099 originally in the in the automotive 312 00:11:59,100 --> 00:12:01,799 application is the numeric encoding mode 313 00:12:01,800 --> 00:12:05,309 where you can only encode numbers, 314 00:12:05,310 --> 00:12:07,559 um, the way they do by 315 00:12:07,560 --> 00:12:09,719 encoding three characters into ten bits. 316 00:12:09,720 --> 00:12:12,329 They just use it as an integer from 317 00:12:12,330 --> 00:12:14,819 one zero two thousand twenty three. 318 00:12:14,820 --> 00:12:17,009 Ignore the last 23 and 319 00:12:17,010 --> 00:12:18,059 have three digits. 320 00:12:19,460 --> 00:12:21,919 Alphanumeric mode uses 321 00:12:21,920 --> 00:12:23,869 substitution table, they have forty five 322 00:12:23,870 --> 00:12:26,179 characters in this table 323 00:12:26,180 --> 00:12:28,489 and they encode two entries in the table 324 00:12:28,490 --> 00:12:29,490 into 11 bits. 325 00:12:30,680 --> 00:12:32,839 Edward Bitts is just plain Edward Vides, 326 00:12:32,840 --> 00:12:34,819 as you would expect, and there's a 327 00:12:34,820 --> 00:12:36,919 country that I've never seen used, 328 00:12:36,920 --> 00:12:39,169 um, which according to this bag, 329 00:12:39,170 --> 00:12:42,019 uses 13 bids for two characters. 330 00:12:42,020 --> 00:12:43,020 Um. 331 00:12:44,180 --> 00:12:46,429 I've never I don't know how they met, 332 00:12:46,430 --> 00:12:48,659 I don't speak Japanese, 333 00:12:48,660 --> 00:12:50,149 it's also something fun. 334 00:12:50,150 --> 00:12:51,769 It's called Extended Channel 335 00:12:51,770 --> 00:12:53,299 Interpretation ECI. 336 00:12:54,650 --> 00:12:56,479 With this you can switch between 337 00:12:56,480 --> 00:12:58,149 different interpretations. 338 00:12:58,150 --> 00:13:00,319 You use the same basic modes, you 339 00:13:00,320 --> 00:13:03,229 can the same basic modes that encode 340 00:13:03,230 --> 00:13:05,899 normally encode ASCII data or 341 00:13:05,900 --> 00:13:07,969 normal characters a bit by 342 00:13:07,970 --> 00:13:10,039 characters, but can 343 00:13:10,040 --> 00:13:12,199 make them mean something different. 344 00:13:12,200 --> 00:13:14,359 The most important mode for most 345 00:13:14,360 --> 00:13:16,429 of you probably will be 346 00:13:16,430 --> 00:13:18,559 UTF eight, which has 347 00:13:18,560 --> 00:13:20,539 a number, but there are a couple of 348 00:13:20,540 --> 00:13:22,369 different modes. I haven't explored them 349 00:13:22,370 --> 00:13:23,629 at all. 350 00:13:23,630 --> 00:13:25,999 I'm guessing you can also add some 351 00:13:26,000 --> 00:13:27,949 degrees of freedom by just choosing a 352 00:13:27,950 --> 00:13:30,709 different world than it might be 353 00:13:30,710 --> 00:13:32,779 doubtful that any reader can read that 354 00:13:32,780 --> 00:13:34,769 or that's going to be done. 355 00:13:34,770 --> 00:13:36,889 There's another interesting feature 356 00:13:36,890 --> 00:13:39,349 I have never seen use which is structured 357 00:13:39,350 --> 00:13:40,699 append. 358 00:13:40,700 --> 00:13:42,769 If all your data doesn't fit into a 359 00:13:42,770 --> 00:13:44,899 code or your 360 00:13:44,900 --> 00:13:47,299 encoding region isn't 361 00:13:47,300 --> 00:13:49,609 quite erratic, you can 362 00:13:49,610 --> 00:13:52,159 change multiple codes together 363 00:13:52,160 --> 00:13:53,449 up to 16. 364 00:13:53,450 --> 00:13:55,699 All of these codes, QR codes 365 00:13:55,700 --> 00:13:57,949 will then have a checksum 366 00:13:57,950 --> 00:14:00,349 and each of the codes 367 00:14:00,350 --> 00:14:02,749 tells you that I am code one 368 00:14:02,750 --> 00:14:04,849 out of five and code two out of 369 00:14:04,850 --> 00:14:06,079 five and so on. 370 00:14:06,080 --> 00:14:08,269 So your reader will then prompt you to 371 00:14:08,270 --> 00:14:10,609 scan all the other courts and afterwards 372 00:14:10,610 --> 00:14:12,799 chain the data together. 373 00:14:12,800 --> 00:14:14,000 The most. 374 00:14:15,470 --> 00:14:17,269 The reader that's most often used to, 375 00:14:17,270 --> 00:14:19,429 which might be the barcode reader 376 00:14:19,430 --> 00:14:21,139 for Android, doesn't support that. 377 00:14:21,140 --> 00:14:23,329 I was somewhat shocked that my 378 00:14:23,330 --> 00:14:26,089 old Nokia phone, for example, does that. 379 00:14:26,090 --> 00:14:29,179 I have an example on the next slide and 380 00:14:29,180 --> 00:14:32,179 another mode character is the 381 00:14:32,180 --> 00:14:34,669 FMC and one 382 00:14:34,670 --> 00:14:35,809 I'm not going to talk about that. 383 00:14:35,810 --> 00:14:39,109 That's barcode stuff. 384 00:14:39,110 --> 00:14:41,779 There's a lot of a lot of special stuff. 385 00:14:41,780 --> 00:14:43,909 This is a structured append 386 00:14:43,910 --> 00:14:46,339 example out right out of the spec. 387 00:14:46,340 --> 00:14:48,709 If you want to try that with your reader. 388 00:14:48,710 --> 00:14:50,869 The four codes on the bottom 389 00:14:50,870 --> 00:14:52,969 have the same semantic meaning as the 390 00:14:52,970 --> 00:14:54,349 one code at the top. 391 00:14:54,350 --> 00:14:55,350 It's just an alphabet. 392 00:14:56,510 --> 00:14:58,759 But for example, the Android reader 393 00:14:58,760 --> 00:15:01,039 can read the four codes at the bottom, 394 00:15:01,040 --> 00:15:03,949 it will just show you the 395 00:15:03,950 --> 00:15:06,079 sequence, the part sequence that was 396 00:15:06,080 --> 00:15:07,080 encoded in there, 397 00:15:08,360 --> 00:15:11,089 if you try. That was an old Nokia phone. 398 00:15:11,090 --> 00:15:13,189 The Nokia phone will happily tell 399 00:15:13,190 --> 00:15:15,649 you that this is code one 400 00:15:15,650 --> 00:15:17,809 out of four and will prompt you 401 00:15:17,810 --> 00:15:19,099 to scan all the other codes. 402 00:15:21,550 --> 00:15:23,889 So how much can you store in 403 00:15:23,890 --> 00:15:25,479 a QR code? 404 00:15:25,480 --> 00:15:26,480 Quite a lot. 405 00:15:27,100 --> 00:15:29,529 The code size and storage capacity 406 00:15:29,530 --> 00:15:31,509 depends on something called a version, 407 00:15:31,510 --> 00:15:33,609 which was very confusing to me at first. 408 00:15:33,610 --> 00:15:35,619 There are 40 versions, but they are not 409 00:15:35,620 --> 00:15:37,899 versions like you would say 410 00:15:37,900 --> 00:15:39,119 in software speaker. 411 00:15:39,120 --> 00:15:40,659 They are not software versions. 412 00:15:40,660 --> 00:15:42,819 A version is just the length of 413 00:15:42,820 --> 00:15:44,049 the code. 414 00:15:44,050 --> 00:15:46,359 Um, they do have something 415 00:15:46,360 --> 00:15:47,859 that we would normally refer to as 416 00:15:47,860 --> 00:15:49,279 Virgin. They are called models. 417 00:15:49,280 --> 00:15:51,279 There's a model one model two code. 418 00:15:51,280 --> 00:15:52,959 We are always using model to codes. 419 00:15:52,960 --> 00:15:55,029 Model one codes are deprecated and not 420 00:15:55,030 --> 00:15:56,030 in use anymore. 421 00:15:58,180 --> 00:16:00,099 So this is the version one called it 422 00:16:00,100 --> 00:16:02,110 Stars 152 data bits, 423 00:16:03,370 --> 00:16:05,499 and some of these may be error correction 424 00:16:05,500 --> 00:16:07,649 bits of the version to code. 425 00:16:08,740 --> 00:16:10,899 As you can see, something happens when 426 00:16:10,900 --> 00:16:13,719 going from Russian one to Russian to 427 00:16:13,720 --> 00:16:15,629 another alignment pattern. 428 00:16:15,630 --> 00:16:18,009 So those are the finer patterns in the 429 00:16:18,010 --> 00:16:19,010 US 430 00:16:20,200 --> 00:16:22,599 version. One only has these version. 431 00:16:22,600 --> 00:16:24,159 Two has an alignment pattern, 432 00:16:25,510 --> 00:16:27,759 then it just gets bigger and bigger 433 00:16:27,760 --> 00:16:29,889 at some point here. 434 00:16:29,890 --> 00:16:32,049 And version seven, additional alignment 435 00:16:32,050 --> 00:16:34,200 pattern appears, patterns appear 436 00:16:35,290 --> 00:16:37,509 and another change that you can 437 00:16:37,510 --> 00:16:39,370 see that now version information is edit 438 00:16:40,660 --> 00:16:43,059 version seven stars 439 00:16:43,060 --> 00:16:45,669 to them, 200 bits, version ten, 440 00:16:45,670 --> 00:16:48,729 two thousand bits, twenty 441 00:16:48,730 --> 00:16:50,799 six thousand bits and goes up to version 442 00:16:50,800 --> 00:16:53,169 forty, which can store 443 00:16:54,190 --> 00:16:56,409 23000 data bits 444 00:16:56,410 --> 00:16:57,880 at this error correction level, 445 00:16:59,050 --> 00:17:00,050 which 446 00:17:01,480 --> 00:17:03,159 this one just starts. 447 00:17:03,160 --> 00:17:04,828 Yeah, you can, you can try this one just 448 00:17:04,829 --> 00:17:06,939 starts to let us QR and the rest 449 00:17:06,940 --> 00:17:07,940 is pitting. 450 00:17:10,859 --> 00:17:12,180 I didn't need all those bits 451 00:17:13,200 --> 00:17:14,338 from this back there. 452 00:17:14,339 --> 00:17:16,409 There are pages, tables and pages and 453 00:17:16,410 --> 00:17:18,479 pages of tables. One of these tables 454 00:17:18,480 --> 00:17:20,578 tells you how much storage capacity is 455 00:17:20,579 --> 00:17:22,409 in each version of the code word for for 456 00:17:22,410 --> 00:17:25,499 example, like I said, 23000 457 00:17:25,500 --> 00:17:26,500 bits, which 458 00:17:27,960 --> 00:17:30,239 makes something like 7000 459 00:17:30,240 --> 00:17:31,829 numbers or 460 00:17:33,300 --> 00:17:35,519 almost 3000, eight bit 461 00:17:35,520 --> 00:17:36,520 characters. 462 00:17:39,150 --> 00:17:41,369 Um, like I said earlier, data 463 00:17:41,370 --> 00:17:43,289 and error correction is interleaved. 464 00:17:43,290 --> 00:17:44,369 There's another table from the 465 00:17:44,370 --> 00:17:45,819 specification. 466 00:17:45,820 --> 00:17:46,820 Um, 467 00:17:48,390 --> 00:17:49,829 these are code words. 468 00:17:49,830 --> 00:17:52,769 A code word is just an eight bit byte. 469 00:17:52,770 --> 00:17:54,959 And the data 470 00:17:54,960 --> 00:17:57,149 code words are arranged here, goes from 471 00:17:57,150 --> 00:17:58,709 there to there. So if you had hello 472 00:17:58,710 --> 00:18:00,899 world, this would be an h e 473 00:18:00,900 --> 00:18:03,389 l l and so on. 474 00:18:03,390 --> 00:18:05,669 And for each of these rows, 475 00:18:05,670 --> 00:18:07,829 the error correction is calculated. 476 00:18:07,830 --> 00:18:09,959 And then four, including into 477 00:18:09,960 --> 00:18:12,449 the code, they go by Cullum's 478 00:18:12,450 --> 00:18:14,759 They use go from here to then 479 00:18:14,760 --> 00:18:16,679 and there those and so on. 480 00:18:16,680 --> 00:18:18,869 Um on the next 481 00:18:18,870 --> 00:18:20,939 slide I'll show on the side of 482 00:18:20,940 --> 00:18:22,319 the follows the slide. I'll show an 483 00:18:22,320 --> 00:18:23,320 example. 484 00:18:24,900 --> 00:18:26,969 When laying out the data blocks the 485 00:18:26,970 --> 00:18:29,129 code words, you will start at the 486 00:18:29,130 --> 00:18:30,130 bottom. Right. 487 00:18:30,990 --> 00:18:33,179 So this is the first one, the second one 488 00:18:33,180 --> 00:18:35,519 third and so on goes up 489 00:18:35,520 --> 00:18:37,619 then and it goes up 490 00:18:37,620 --> 00:18:39,749 and down again and in a zigzag 491 00:18:39,750 --> 00:18:40,750 pattern. 492 00:18:43,480 --> 00:18:45,989 And this is another 493 00:18:45,990 --> 00:18:48,729 Appley, another Dipak output from record 494 00:18:48,730 --> 00:18:50,649 that tells you which code codewords, 495 00:18:50,650 --> 00:18:51,969 which is the fast. 496 00:18:53,200 --> 00:18:55,269 This is the second, as you can see, 497 00:18:55,270 --> 00:18:57,859 this is the interleaving. 498 00:18:57,860 --> 00:19:00,069 Um, I'm not sure how many of those 499 00:19:00,070 --> 00:19:02,049 are, but this maybe one. 500 00:19:02,050 --> 00:19:04,599 And there's maybe 11, 21, 31, 501 00:19:06,070 --> 00:19:08,439 41 to 12 502 00:19:08,440 --> 00:19:09,429 and so on. 503 00:19:09,430 --> 00:19:11,349 So there's the interleaving in action. 504 00:19:13,170 --> 00:19:15,309 Like I said before, something most people 505 00:19:15,310 --> 00:19:17,829 don't know, there's masking involved, 506 00:19:17,830 --> 00:19:19,659 this is so that a QR code reader that 507 00:19:19,660 --> 00:19:21,549 looks for a QR code can just look for the 508 00:19:21,550 --> 00:19:22,969 pin up hidden. That's why it's called 509 00:19:22,970 --> 00:19:25,209 that and doesn't have to worry 510 00:19:25,210 --> 00:19:27,429 about finding the find a pattern 511 00:19:27,430 --> 00:19:29,379 in the data. Even if you encode some data 512 00:19:29,380 --> 00:19:31,089 that would lead to a finer pattern 513 00:19:31,090 --> 00:19:33,429 encoding appearing in the data, 514 00:19:33,430 --> 00:19:35,499 you would not see it in the QR 515 00:19:35,500 --> 00:19:37,779 code because there are seven 516 00:19:37,780 --> 00:19:39,879 different masks that are 517 00:19:39,880 --> 00:19:41,769 just export onto the code. 518 00:19:41,770 --> 00:19:43,269 And there's an algorithm in the 519 00:19:43,270 --> 00:19:45,429 specification that tells you that 520 00:19:45,430 --> 00:19:47,619 you just just try all those seven masks 521 00:19:47,620 --> 00:19:50,379 in order, then calculate how bad 522 00:19:50,380 --> 00:19:52,269 the resulting quarters and then choose 523 00:19:52,270 --> 00:19:53,499 the least bad on. 524 00:19:57,800 --> 00:19:58,800 Um. 525 00:20:00,190 --> 00:20:02,589 There's another Dibakar output from my 526 00:20:02,590 --> 00:20:04,929 court, from my program tells 527 00:20:04,930 --> 00:20:07,029 you whether you find a function, 528 00:20:07,030 --> 00:20:08,709 we already saw the find out patterns and 529 00:20:08,710 --> 00:20:11,049 these corners right next 530 00:20:11,050 --> 00:20:13,389 to it is the format information. 531 00:20:13,390 --> 00:20:14,859 Those are the F's. 532 00:20:14,860 --> 00:20:16,030 It's here. 533 00:20:17,950 --> 00:20:20,199 And there's a second copy down here and 534 00:20:20,200 --> 00:20:22,479 over here. So even if you cut off 535 00:20:22,480 --> 00:20:25,779 one of these corners, we'll be OK. 536 00:20:25,780 --> 00:20:28,419 There's a virgin formation here 537 00:20:28,420 --> 00:20:29,319 and here. 538 00:20:29,320 --> 00:20:30,999 So even if you cut off one of those 539 00:20:31,000 --> 00:20:32,000 corners, will it be OK? 540 00:20:33,070 --> 00:20:35,049 And those are the line alignment patterns 541 00:20:35,050 --> 00:20:36,050 and the timing pattern. 542 00:20:38,930 --> 00:20:41,569 Um, to show you 543 00:20:41,570 --> 00:20:43,549 how many degrees of freedom you have, 544 00:20:43,550 --> 00:20:45,529 it's best to use an example. 545 00:20:45,530 --> 00:20:47,209 I'm just encoding the text. 546 00:20:47,210 --> 00:20:50,149 Hello, 23C 23 547 00:20:50,150 --> 00:20:51,150 C3. 548 00:20:53,360 --> 00:20:55,489 And using these 549 00:20:55,490 --> 00:20:57,919 indicators, I would split this into 550 00:20:57,920 --> 00:20:59,449 two different sections. 551 00:20:59,450 --> 00:21:01,669 One has it bit by it's because 552 00:21:01,670 --> 00:21:03,139 the normal alphanumeric doesn't have 553 00:21:03,140 --> 00:21:04,579 lowercase characters. 554 00:21:04,580 --> 00:21:06,649 So I'm using eight bit bytes 555 00:21:06,650 --> 00:21:08,749 for those characters, alphanumeric for 556 00:21:08,750 --> 00:21:10,039 those characters. 557 00:21:10,040 --> 00:21:11,450 And then there's a Terminator. 558 00:21:13,850 --> 00:21:15,920 This would be the resulting bitstream. 559 00:21:17,070 --> 00:21:19,169 You start at the top, a 560 00:21:19,170 --> 00:21:21,509 top left, and then just use 561 00:21:21,510 --> 00:21:22,510 this as a bitstream 562 00:21:23,790 --> 00:21:26,039 at padding and code 563 00:21:26,040 --> 00:21:28,619 into eighty 564 00:21:28,620 --> 00:21:30,839 eight bedmates, most 565 00:21:30,840 --> 00:21:32,559 often if you look at the back, output 566 00:21:32,560 --> 00:21:34,109 will start with 64. 567 00:21:34,110 --> 00:21:36,089 If you look at the previous slide, that's 568 00:21:36,090 --> 00:21:37,440 the eight bit bite indicator. 569 00:21:39,150 --> 00:21:41,309 Um, and this would 570 00:21:41,310 --> 00:21:43,739 be the structure that results if, uh, 571 00:21:43,740 --> 00:21:46,019 OK, those are the data worlds, then 572 00:21:46,020 --> 00:21:48,299 I calculated the Reid Solomont error 573 00:21:48,300 --> 00:21:49,679 correction code. Luckily, I didn't have 574 00:21:49,680 --> 00:21:51,749 to do that by myself because I suck 575 00:21:51,750 --> 00:21:53,399 at math. And there was a Python library 576 00:21:53,400 --> 00:21:55,409 already available to do that. 577 00:21:55,410 --> 00:21:56,460 Yeah, open source. 578 00:21:58,600 --> 00:22:00,759 And then encode this into into 579 00:22:00,760 --> 00:22:03,339 the Matrix playset, 580 00:22:03,340 --> 00:22:05,229 and this is the code that would result. 581 00:22:06,410 --> 00:22:08,809 One of the possible causes that results 582 00:22:08,810 --> 00:22:11,089 turns out that you can 583 00:22:11,090 --> 00:22:13,549 create quite a lot of different 584 00:22:13,550 --> 00:22:17,059 chords that are semantically equivalent, 585 00:22:17,060 --> 00:22:18,739 but look nothing like each other, 586 00:22:20,390 --> 00:22:23,359 which is the entire reason why I'm here. 587 00:22:23,360 --> 00:22:25,249 All of these chords and chord, you can 588 00:22:25,250 --> 00:22:27,319 try that with your guitar and code, the 589 00:22:27,320 --> 00:22:29,049 exact same sequence. 590 00:22:29,050 --> 00:22:30,949 Hello, 30 591 00:22:32,030 --> 00:22:33,140 to see at three. 592 00:22:36,470 --> 00:22:39,079 But they don't look anywhere near 593 00:22:39,080 --> 00:22:41,299 close to each other and the encoded 594 00:22:41,300 --> 00:22:44,449 version and they also 595 00:22:44,450 --> 00:22:46,519 don't look particularly similar 596 00:22:46,520 --> 00:22:48,139 in the dbag version. 597 00:22:48,140 --> 00:22:50,119 So this at the top is with masking 598 00:22:50,120 --> 00:22:51,889 applied and this is the bottom is without 599 00:22:51,890 --> 00:22:52,890 masking applied. 600 00:22:56,240 --> 00:22:58,309 Now, if you could control 601 00:22:58,310 --> 00:23:00,529 all of these elements, you could make 602 00:23:00,530 --> 00:23:02,380 the code look like whatever you want, 603 00:23:03,620 --> 00:23:05,779 my grand 604 00:23:05,780 --> 00:23:08,329 plan for the future is to have a 605 00:23:08,330 --> 00:23:09,829 graphical user interface where you can 606 00:23:09,830 --> 00:23:11,509 just click at a module and we'll tell you 607 00:23:11,510 --> 00:23:12,739 what you have to change in order to 608 00:23:12,740 --> 00:23:14,029 change this module. 609 00:23:14,030 --> 00:23:16,129 I'm not not there yet, 610 00:23:16,130 --> 00:23:18,619 but I have most of the 611 00:23:18,620 --> 00:23:20,899 infrastructure behind that that is able 612 00:23:20,900 --> 00:23:23,269 to tell you which of these modules 613 00:23:23,270 --> 00:23:25,909 has a watch function and 614 00:23:25,910 --> 00:23:28,340 can help you with decoding and encoding. 615 00:23:31,790 --> 00:23:33,590 So that you can get your desired result 616 00:23:34,910 --> 00:23:36,979 with this in 617 00:23:36,980 --> 00:23:38,929 order to do this, you need something like 618 00:23:38,930 --> 00:23:40,009 an assembler. 619 00:23:40,010 --> 00:23:41,839 The interface for the assembly is not 620 00:23:41,840 --> 00:23:44,509 quite ready yet, but 621 00:23:44,510 --> 00:23:46,909 as you would do with a software assembly, 622 00:23:46,910 --> 00:23:48,439 you would give it very low level 623 00:23:48,440 --> 00:23:50,049 information about what it should do. 624 00:23:51,910 --> 00:23:54,009 And then it will assemble the code 625 00:23:54,010 --> 00:23:56,229 for you and you can 626 00:23:56,230 --> 00:23:57,750 modify it on a very low level. 627 00:23:59,450 --> 00:24:02,179 For this, those are the nonstandard 628 00:24:02,180 --> 00:24:04,159 dimensions which you can customize, that 629 00:24:04,160 --> 00:24:06,289 you can play with the encoding modes, you 630 00:24:06,290 --> 00:24:08,899 can split 631 00:24:08,900 --> 00:24:11,869 encoding modes within the text, 632 00:24:11,870 --> 00:24:14,149 which will be semantically girland 633 00:24:14,150 --> 00:24:15,829 you can insert extended channel 634 00:24:15,830 --> 00:24:18,079 interpretation into it at 635 00:24:18,080 --> 00:24:20,299 random points if you want to. 636 00:24:20,300 --> 00:24:22,519 Um, what you also can do, I haven't 637 00:24:22,520 --> 00:24:25,009 tried that before, is to add padding. 638 00:24:25,010 --> 00:24:27,109 If you notice 639 00:24:27,110 --> 00:24:29,300 before that a Terminator, the last 640 00:24:30,950 --> 00:24:33,049 mode indicator is zero, which 641 00:24:33,050 --> 00:24:34,999 means this is the end of the mode 642 00:24:35,000 --> 00:24:36,799 indicators and afterwards comes panning 643 00:24:38,030 --> 00:24:40,309 instead of encoding all the data, 644 00:24:40,310 --> 00:24:42,529 all the picture as rusted into 645 00:24:42,530 --> 00:24:44,659 the data, you could just encode 646 00:24:44,660 --> 00:24:46,489 it into the padding. And I'm guessing 647 00:24:46,490 --> 00:24:48,739 most decoders would 648 00:24:48,740 --> 00:24:50,439 decode that just fine. 649 00:24:51,980 --> 00:24:54,049 What you can also do this 650 00:24:54,050 --> 00:24:56,149 is where rather standard would be 651 00:24:56,150 --> 00:24:58,369 changing something non semantically 652 00:24:58,370 --> 00:25:00,589 equivalent like 653 00:25:00,590 --> 00:25:02,149 for you or else you can just try 654 00:25:02,150 --> 00:25:04,429 lowercase and uppercase. 655 00:25:04,430 --> 00:25:06,949 And the, uh, 656 00:25:06,950 --> 00:25:10,099 cutest way, I think would be to just 657 00:25:10,100 --> 00:25:12,439 paint what you want into the code, 658 00:25:12,440 --> 00:25:14,899 see what it decodes tool, maybe fixing 659 00:25:14,900 --> 00:25:16,249 the error correction. 660 00:25:16,250 --> 00:25:18,649 And if it 661 00:25:18,650 --> 00:25:20,929 decodes to something that is a valid 662 00:25:20,930 --> 00:25:23,299 domain name, you can just read that 663 00:25:23,300 --> 00:25:25,789 and have a redirect to your 664 00:25:25,790 --> 00:25:27,439 actual site. 665 00:25:27,440 --> 00:25:28,979 That's what I'm doing next. 666 00:25:28,980 --> 00:25:31,819 Currently, my business card is a 667 00:25:31,820 --> 00:25:34,579 pretty standard code, but I'm guessing 668 00:25:34,580 --> 00:25:35,789 I will change that soon. 669 00:25:37,800 --> 00:25:39,959 And you can combine all those 670 00:25:39,960 --> 00:25:41,969 techniques with the existing techniques 671 00:25:41,970 --> 00:25:44,369 by Russell, and 672 00:25:44,370 --> 00:25:46,529 if you are close, as close as possible to 673 00:25:46,530 --> 00:25:48,869 your desired code, you can just overpaint 674 00:25:48,870 --> 00:25:49,979 what has left. 675 00:25:49,980 --> 00:25:51,929 Everything has error correction. 676 00:25:51,930 --> 00:25:54,179 Like I said, the data has 677 00:25:54,180 --> 00:25:56,549 you can choose that 10 to 30 percent 678 00:25:56,550 --> 00:25:57,869 error correction. 679 00:25:57,870 --> 00:26:00,059 The function information 680 00:26:00,060 --> 00:26:02,729 has that 681 00:26:02,730 --> 00:26:03,959 30 percent error correction. 682 00:26:03,960 --> 00:26:05,909 So there are five bits and code into 15 683 00:26:05,910 --> 00:26:06,939 bits. 684 00:26:06,940 --> 00:26:09,149 The information has a 30 percent 685 00:26:09,150 --> 00:26:11,459 error correction. Those are six 686 00:26:11,460 --> 00:26:13,470 bits and coded into 18 bits. 687 00:26:15,600 --> 00:26:17,789 So you can change basically everything as 688 00:26:17,790 --> 00:26:20,249 long as you don't change too much 689 00:26:20,250 --> 00:26:22,139 and it will be just fine. 690 00:26:22,140 --> 00:26:23,759 The code I've just pushed into GitHub, 691 00:26:23,760 --> 00:26:25,619 it's not like I said, it's not very 692 00:26:25,620 --> 00:26:26,679 useful yet. 693 00:26:26,680 --> 00:26:28,409 I'm still working on it. 694 00:26:28,410 --> 00:26:30,689 And that's I think 695 00:26:30,690 --> 00:26:32,729 most of the time we have are four minutes 696 00:26:32,730 --> 00:26:33,730 left. 697 00:26:36,330 --> 00:26:37,739 Oh, yeah, you can try to scan that. 698 00:26:44,480 --> 00:26:46,069 Thank you so much, Eric, that we still 699 00:26:46,070 --> 00:26:48,259 have time for questions, 700 00:26:48,260 --> 00:26:50,659 so if you have any questions, 701 00:26:50,660 --> 00:26:52,099 please come to the microphones. 702 00:26:52,100 --> 00:26:54,439 We have them here and 703 00:26:54,440 --> 00:26:56,119 also in the back. 704 00:26:56,120 --> 00:26:58,189 And we also have a signal angel. 705 00:26:58,190 --> 00:27:00,139 And I'm checking whether we have some 706 00:27:00,140 --> 00:27:01,459 questions from the Internet. 707 00:27:01,460 --> 00:27:03,499 We have one. So please signal Angel. 708 00:27:03,500 --> 00:27:04,969 Thank you. 709 00:27:04,970 --> 00:27:07,339 So, one, you send the ISC 710 00:27:07,340 --> 00:27:09,529 states that according to 711 00:27:09,530 --> 00:27:11,779 Denso Wave and they 712 00:27:11,780 --> 00:27:14,149 have an HQ on QR 713 00:27:14,150 --> 00:27:16,489 code dot com, and it states that they may 714 00:27:16,490 --> 00:27:18,859 decide to exercise patent rights 715 00:27:18,860 --> 00:27:21,079 against Coatsworth 716 00:27:21,080 --> 00:27:22,759 colors or illustrations. 717 00:27:24,190 --> 00:27:26,559 I know that there is a variant of QR 718 00:27:26,560 --> 00:27:29,469 codes that users can ask for information. 719 00:27:29,470 --> 00:27:31,749 I'm not sure if they refer to that. 720 00:27:31,750 --> 00:27:33,849 Um, but yeah, fake 721 00:27:33,850 --> 00:27:35,990 patent law. I mean, it's Germany. 722 00:27:38,050 --> 00:27:39,009 Thank you. 723 00:27:39,010 --> 00:27:41,260 We have one question, a microphone, too. 724 00:27:42,280 --> 00:27:43,779 I'm not exactly sure you talked about 725 00:27:43,780 --> 00:27:45,909 them asking how can we decode the 726 00:27:45,910 --> 00:27:46,239 message? 727 00:27:46,240 --> 00:27:47,799 I mean, you said encoding works by 728 00:27:47,800 --> 00:27:49,659 choosing the best, but how does it work 729 00:27:49,660 --> 00:27:51,759 for decoding, for 730 00:27:51,760 --> 00:27:54,159 sort of masking is encoded 731 00:27:54,160 --> 00:27:55,599 into the function modules, 732 00:27:57,190 --> 00:27:59,019 uh, over here. 733 00:27:59,020 --> 00:28:01,839 So the first two bits and code, which 734 00:28:01,840 --> 00:28:03,130 error correction ever we have, 735 00:28:04,150 --> 00:28:06,039 I forgot what the mapping is, but those 736 00:28:06,040 --> 00:28:07,389 first two bits and called the error 737 00:28:07,390 --> 00:28:09,729 correct. And the next three bits 738 00:28:09,730 --> 00:28:11,649 and code, which I'm asking is use those 739 00:28:11,650 --> 00:28:13,539 bits are not masked. 740 00:28:13,540 --> 00:28:15,639 So you just read these bits all as a 741 00:28:15,640 --> 00:28:17,829 mirror. I think over here 742 00:28:17,830 --> 00:28:20,289 you just read these bits and then 743 00:28:20,290 --> 00:28:22,479 see what Meskin was used and unmask 744 00:28:22,480 --> 00:28:24,809 it. It's all so you can just do it again. 745 00:28:26,410 --> 00:28:28,479 Thank you. So I don't see 746 00:28:28,480 --> 00:28:29,649 any further questions. 747 00:28:29,650 --> 00:28:31,599 So thank you again, Hendrickx. 748 00:28:31,600 --> 00:28:33,879 I hope you are activated to help 749 00:28:33,880 --> 00:28:36,819 him with the project and make 750 00:28:36,820 --> 00:28:38,019 Couleur Kuriakose.