diff --git a/internal/view/js/component/dialog.js b/internal/view/js/component/dialog.js index bb140b7..ed6a16b 100644 --- a/internal/view/js/component/dialog.js +++ b/internal/view/js/component/dialog.js @@ -152,6 +152,7 @@ export default { var value = field.value; if (field.type === 'number') value = parseInt(value, 10) || 0; else if (field.type === 'float') value = parseFloat(value) || 0.0; + else if (field.type === 'check') value = value !== ''; data[field.name] = value; }) diff --git a/internal/webserver/assets-prod.go b/internal/webserver/assets-prod.go index e2cec90..d915ee5 100644 --- a/internal/webserver/assets-prod.go +++ b/internal/webserver/assets-prod.go @@ -239,10 +239,10 @@ var assets = func() http.FileSystem { }, "/js/component/dialog.js": &vfsgen۰CompressedFileInfo{ name: "dialog.js", - modTime: time.Date(2019, 8, 8, 11, 30, 37, 273303992, time.UTC), - uncompressedSize: 8146, + modTime: time.Date(2019, 8, 12, 1, 47, 14, 240538060, time.UTC), + uncompressedSize: 8217, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x59\x5f\x6f\xdb\x38\x12\x7f\xf7\xa7\x98\x35\x8a\xc8\x46\x62\x39\xbd\x47\x27\xca\x76\x9b\x6b\x81\xe2\x76\x71\x87\x6b\x81\x7d\x08\x0a\x2c\x2d\x8d\x6c\x6e\x69\x52\x47\x52\x4e\x8c\xac\xbe\xfb\x81\xd4\x3f\x4a\xa2\xe4\xa4\xb8\xdb\xa7\xf5\x43\xac\x50\x33\xbf\x19\x0e\x7f\xf3\x47\xf2\x91\x48\xd0\x78\xc8\x18\xd1\x08\x11\xfc\x36\xbb\x4d\xe8\x11\x8e\x2b\x9a\x46\xf3\x23\x55\x74\xcb\x70\x0e\x31\x23\x4a\x45\xf3\x38\x57\x5a\x1c\x56\x09\x25\x4c\xec\x56\xe2\x88\x92\x91\xd3\x1c\xde\x7d\xc3\x53\x9e\x85\xa8\xe2\x68\xbe\x27\x3c\x61\xf8\x41\xc5\xff\x92\xa8\x14\x26\xf3\xbb\x19\x00\x80\x05\xf5\xa1\x54\xf7\xad\x4c\xe6\xb7\xb3\x47\x92\xa0\x9c\xdf\x3d\x3f\x6b\xaa\x19\x16\xc5\xed\x3a\x73\xb4\xc6\x90\x57\x5b\x91\x9c\x1c\x78\x2b\xac\x98\xd0\xdd\xa5\x29\xcb\xb1\xe0\x1a\xb9\x36\xa6\xab\xcb\x9e\xf1\x06\xa0\x89\xe0\x71\x95\x0a\x19\xcd\x17\x29\x45\x96\x5c\x51\x9e\xe0\xd3\x12\x28\x87\x54\xc8\xc3\x47\xb3\xa6\xe6\x43\x75\x0b\xc1\xc8\x16\x59\x15\x78\xb5\x17\x8f\x3f\xdb\xff\x2f\x2e\xc0\x42\x85\xfa\x94\x21\xfc\x10\x45\x10\xc4\x7b\x8c\xbf\x05\xc6\xa9\xf2\x8e\x55\x2c\x0a\xd8\xdc\xae\xed\xe5\x08\xbe\xc6\x27\x4d\x24\x92\xca\x84\x83\x1a\x19\x54\x73\x2b\x98\x7b\x55\xcd\x67\xa3\xf4\x89\x61\x34\x7f\xde\x49\x9a\xdc\x0b\x96\x1f\xf8\x07\x9e\x6c\xa0\xf5\xf4\x47\xe0\x39\x63\xb0\x81\x40\x65\x84\xc3\xdf\x82\x62\x0e\xe3\x70\x19\x23\x31\xee\x05\x4b\x50\xd6\xbe\x58\xe7\xa7\x74\x34\xd9\xda\x80\x46\x73\xfb\x75\xf9\x76\xdc\x5d\x89\xa9\x91\xca\x72\x3d\x2e\x73\x5c\x1d\x44\x82\xac\x36\x7f\x24\x2c\xc7\x09\xf3\xef\x52\x11\xe7\x2a\x9a\xbf\xc1\x23\x72\x1d\x6a\x22\x77\xa8\x43\x85\x0c\x63\xbd\x58\x8e\x9b\x29\xb3\xa3\xce\x8c\x4f\xc6\xa7\x45\xc9\x8b\x31\x26\xac\xeb\xa3\x3a\xc3\x14\x64\x0a\xbd\x67\x59\x31\xa4\x21\xb5\xf9\x77\x2b\x9e\x56\x56\x6e\xc4\xaa\x45\xb6\x11\x03\x03\xd4\x6a\x4d\x84\xe4\x3b\xa2\x08\xfe\x83\xec\x93\x79\x24\x30\x53\xfc\x2e\x7d\x2f\xa3\xf2\xa7\xd1\xb8\x0c\x95\x75\xfd\xcb\x29\xc3\x32\xed\x97\x7f\x11\x1f\xa6\x89\x7f\x46\x27\x44\xae\x4d\x78\x1c\xcd\x0f\x66\xe5\x4c\xde\xd8\x03\xdb\xd8\x08\x04\x2a\xdf\xed\x50\x69\x2a\xf8\x2a\xb8\xb4\x6a\x13\x3b\x74\x2b\x62\xab\x38\xa1\x50\x25\x96\x23\xdb\x10\xb8\x5d\x33\xbd\xc2\xb8\xe4\x69\x17\xeb\xba\x5f\xf4\xda\xd3\xba\xdb\x9f\x6e\xd7\x09\x3d\xbe\xa4\xd5\xa5\x42\x68\xd3\x22\xbb\x68\xb4\xda\x18\x13\x24\xa1\x7c\xd7\xd4\x83\x94\x28\x48\xc9\x2a\x7d\x34\x7f\x55\x46\x39\x47\x59\x5f\xce\xef\x6e\xd7\xd4\xd3\x34\xab\xc4\x02\x4e\x0e\xd8\x58\xf7\x9a\xb5\x2a\x75\x97\x51\x18\x0b\x9e\x7c\xc1\x27\x3d\x12\x4d\x87\xdb\x5b\xcd\xbf\x90\xed\xa7\x8a\xe1\x7e\xf1\x77\x31\xa3\xf1\xb7\x9a\x19\x9f\x2d\xfa\xbd\x59\x1a\x93\xf7\xf0\xe9\xbc\x96\x7f\x9c\xc8\xb5\x2e\x0f\xba\xdd\x94\xa7\x50\xdd\xae\x3d\x65\xfb\x96\x8c\x6c\x74\xc4\x01\xcb\xe1\x03\xa1\xfc\x7d\x69\xf4\x05\xb1\xf8\x85\x50\xfe\xda\x48\x9c\xd3\x99\x88\x03\x18\xef\x4c\x30\xcc\xf7\x4b\x43\x31\xc1\xef\xea\xb2\xfc\xfa\xed\x66\x36\xc3\xa7\x4c\x48\x0d\x09\xa6\x24\x67\x1a\x9e\xad\x54\x9d\x36\x9b\xe6\xea\xca\xae\x67\x52\x64\x6a\x53\x09\x59\x41\x33\x29\x6e\xe0\xb3\x96\x94\xef\xae\x9a\xe5\x2a\x13\x36\xf0\x5e\x08\x86\x84\xb7\x77\xaa\x51\xd7\x73\xa7\x9a\xfc\x5c\x74\x6b\xe1\x94\x79\x0c\x98\x4f\xe5\xf2\x06\x82\xa0\x59\x2f\x5a\x11\x5b\x26\x94\x1f\xee\x27\x29\xc9\xc9\x8b\x06\x8b\x65\x4f\x03\x2c\x4f\x74\x2e\x39\x3c\x7c\xed\xdc\x29\x7c\x66\x9b\x0e\xe7\xb7\x3c\xd8\x76\x67\x27\x29\x71\x9b\xaa\x83\x5a\x9f\xfe\xf7\x44\xe7\x9f\xff\xf0\xc6\xa7\xcd\xae\x21\xc0\xa1\x26\xac\xdf\xde\xc7\x9c\xc7\xa6\xf2\x8e\x47\x10\xf4\x9e\xaa\xb0\x3a\x6c\x88\xca\x8d\xdd\x8c\x44\xac\xad\x13\x7f\x86\x39\x6c\x9e\x99\xfe\x7f\xd6\x66\x8e\xcd\x84\x68\xd2\x21\x55\x45\xa6\xae\xed\xf6\xb9\x65\xe3\xd2\xac\xb8\x71\xa1\x62\x71\xc8\x72\xdd\x75\xdc\x29\x72\x03\xea\x56\x96\xac\xbb\x65\x3a\x84\x0c\xf9\x4e\xef\xe1\x12\xde\xde\xf8\xdd\x7d\x24\x3a\xde\xbb\x06\xfc\x79\x44\x0f\x07\x4c\x68\x59\x22\x64\x8e\xdd\x60\x95\x55\x4f\x7a\x53\xa9\x74\xa6\xd9\x2d\x44\x1d\xf7\x0e\x24\x2b\x67\x3b\x88\xee\x3c\xca\xd6\x72\x0a\x0b\x73\x52\x22\x85\x4a\xd2\x8c\xe2\xca\x32\x38\x58\xfa\xa3\xeb\x7e\x4c\x67\xdd\x94\xaa\x57\xa3\x42\xac\xcc\xe0\x33\x52\x76\xa2\x33\xf5\x67\x5c\xa4\xe4\x54\x60\x9e\x34\x26\xa4\x12\x6a\x29\x47\xe4\xc9\x9c\xfe\xb8\x9c\xc2\x8c\x48\xa2\x85\xdc\x40\x00\x13\x78\xed\x70\xb4\x81\x9c\x27\x98\x52\x8e\x89\x57\xba\x98\xbd\x22\xc8\x62\xfb\x3b\xc6\xfa\x95\x41\x0e\xcd\x35\xfc\xf1\xc7\x64\x98\xdc\x78\x97\x73\xfa\x39\x8d\x2a\xf6\xce\x68\x7d\x4e\xa3\x3c\x0a\xe7\x19\xce\xc8\xbf\xe2\x60\x4a\xcd\x76\x05\x28\x57\x9a\xf0\xd8\x04\xc9\x36\x14\xf8\x71\x28\xf3\xe2\xf3\xac\xa6\xda\x7a\xc1\x3a\xf7\xbf\x3a\xe2\xc1\xca\xf2\xe6\x7c\x23\x0b\x3a\x15\x23\x18\x24\x73\x95\xc8\x71\xae\x16\x0e\x5c\xe1\x69\xf5\xdf\x57\x39\x3a\x06\xc6\x8a\xeb\x01\xf5\x5e\x74\xab\x93\xf3\x90\xd8\x77\xd9\xbe\x83\xb3\x4f\xef\x90\xf6\x28\xd0\x0d\x48\x4d\xff\xf2\x45\x90\x15\x80\x8b\x0b\x68\x97\x32\xa2\xd4\xa3\x90\x49\x9b\x0b\x3e\x18\x3b\xc9\xd7\x45\xf8\x94\xa1\x37\x4c\xbd\x11\x71\x10\x67\xe3\xb4\xe9\x21\x10\xc1\x73\x71\xe3\x3b\x82\xba\x96\x9a\xcb\x0f\x24\xde\x4f\x55\x50\x83\x56\x66\x4b\xe4\xe6\xce\xcd\x40\xd0\x84\xa0\xff\xbe\x83\xe7\x87\x2d\xca\x60\xd9\x20\x64\x44\x2a\xfc\xc4\xf5\xc2\x2e\x5c\xc1\xdb\xeb\xa5\x09\xe9\xf5\x10\xce\x86\xc2\x87\x99\x32\x41\x74\x1f\xf2\xa3\x59\x2c\x41\x4b\xc0\xd0\x03\x69\x82\xf2\xd0\x96\x98\xaf\x10\x81\x67\x2f\xc5\x72\x36\x8c\x59\x33\xdf\x2c\x0c\x88\x9f\xbe\x83\x87\x18\x7f\x06\x28\x57\x60\x02\xa8\x7d\x55\xeb\xc7\x41\xe7\xfe\x04\x8c\xfb\x78\xdf\x83\x59\xaf\xe1\x5e\x22\xd1\x08\x94\x53\x4d\x09\x33\x87\x4d\xc9\x96\xe1\x80\x4f\x15\x41\xfa\x04\x7a\xb0\xb8\x9e\x7a\xe5\x14\xb4\x68\x50\xe3\x6e\x66\x7d\x37\x7e\x21\xdf\x10\x54\x2e\xd1\x55\xa4\x0a\xb8\xd0\x80\x87\x4c\x9f\x06\xc9\xd6\xca\xd5\x13\x8a\x21\xc7\x75\x9d\x5d\x43\x13\x1f\x51\xc7\x7b\xa7\x08\x42\x2a\xc5\xc1\x31\x37\xd8\xb2\xc9\x56\xd5\x25\x7d\xa8\x32\x46\xf5\xa2\x57\x79\x97\xc3\xed\x33\xa2\xf4\xaf\x42\x9a\x88\x59\x98\x07\xfb\xb7\xf6\x74\x05\x6f\xbf\x86\x5a\xfc\x2c\x1e\x51\xde\x13\x85\x0b\x0f\x42\xeb\x68\x6f\x2b\x66\xf3\x0d\xbc\x2d\x2d\x81\x6f\x6a\x72\x36\x1a\x39\xbb\x0c\x53\xca\x93\xc5\xa3\x75\x6d\x6c\x5e\xaa\xea\x8f\x11\xea\x7a\x19\x2a\x4d\xa4\x56\xbf\x52\xbd\x6f\x5c\x58\xbe\xa0\x57\x4c\x95\xa0\x8a\x41\x61\xc7\xdf\xd1\xcd\x77\xa8\xe2\xa8\xe0\x13\x55\x7a\x10\x26\x17\x33\xb2\x6f\x0f\xc7\xe9\xf1\x77\xaa\x32\x46\x4e\x0e\xe8\xd0\xeb\x37\x1c\x9f\xf4\x17\x93\xb7\x8b\xe5\x78\xb1\x2c\x5f\x77\x56\xa9\xf2\x46\x62\xaa\x42\xbb\x34\x9a\x2b\xf6\xb8\x32\xc2\x3b\x3a\x0f\x9d\x17\x65\x70\x09\xa5\xf6\xc3\xf5\x08\x80\x35\xf1\x6f\x8c\x8d\x65\x7b\x1d\xee\x50\xbf\x17\x39\x37\x8f\xd5\xf7\x8c\x22\xb7\x77\x4d\xa9\x18\x72\x25\x23\x3c\xb4\xef\x5f\x43\x2d\x32\x88\x60\xd1\xa0\x85\x5b\xa1\xb5\x38\x18\xca\x2e\xe1\x12\x82\xec\x29\x18\xd6\x55\x47\x9f\x61\xda\x78\x60\xf5\xed\x82\x4f\xb1\x38\x5b\xb4\xdc\x37\x8b\x9e\x16\xd7\x61\xcc\x59\x56\x79\xb2\xc8\x47\x8f\x91\xc7\x8f\x41\xcb\x1d\x06\xa1\x26\x56\x67\x8f\xb3\xa1\xd7\xcd\xbc\x36\xee\x74\x2d\x32\x3c\xe9\xba\x26\x8d\x68\xba\x45\xaa\x2d\x4f\xbd\xad\x97\xa5\x28\x13\x59\x7f\x17\xd5\x8d\x5c\xed\x9d\xd0\xf4\xb5\xa7\x2c\xd7\xd5\x2e\xfc\x5d\x50\xee\x38\x00\x97\xed\xb6\x27\xe7\x11\x6f\x31\x68\x66\x55\x2f\x5f\xea\x71\xcf\xd3\x20\xcf\xa7\xab\x61\xc1\x0f\xee\xb3\xf9\x48\x7d\x00\xb7\x0b\x2a\x4f\x6e\xfb\x73\x52\xe8\x3d\xca\x4f\x9d\x72\x80\x2c\xfc\x4f\x8e\xf2\xf4\xd9\xbe\xa4\x17\xf2\x27\xc6\x16\x81\x85\x08\x3c\x4d\xc0\x7c\xaa\xb7\x7a\x1d\x9b\xed\x0b\x48\x8f\xa3\xcd\xcc\xa4\x9a\xdf\x28\x9b\xce\x73\x67\x3a\xa4\xbf\xea\x0f\xca\xd5\xf5\xd7\xe1\xb0\x7e\x4e\xa1\xfe\xed\x61\xa8\x51\xb4\x03\x9d\x13\x96\x8b\x0b\x27\x48\x2f\x70\xb2\x15\x3e\xeb\x5e\x57\xf4\x45\x8e\x95\xa1\x1e\xb3\x5d\xde\x1d\x37\x5a\xf4\xa7\xc8\xee\x8d\x62\x56\xfc\x37\x00\x00\xff\xff\x20\xba\x72\x09\xd2\x1f\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x59\x5f\x6f\xdb\x38\x12\x7f\xf7\xa7\x98\x35\x8a\xc8\x46\x62\x39\xbd\x47\x27\xca\x76\x9b\x6b\x81\xe2\x76\x71\x87\x6b\x81\x7d\x08\x0a\x2c\x2d\x8d\x6c\x6e\x29\x52\x47\x52\x4e\x8c\xac\xbf\xfb\x81\xd4\x3f\x4a\xa2\xe4\xa4\xb8\xdb\xa7\xf5\x43\xac\x90\x33\xbf\x19\x0e\x7f\x33\x1c\xd1\x07\x22\x41\x63\x96\x33\xa2\x11\x22\xf8\x6d\x76\x9b\xd0\x03\x1c\x56\x34\x8d\xe6\x07\xaa\xe8\x96\xe1\x1c\x62\x46\x94\x8a\xe6\x71\xa1\xb4\xc8\x56\x09\x25\x4c\xec\x56\xe2\x80\x92\x91\xe3\x1c\xde\x7d\xc3\x63\x91\x87\xa8\xe2\x68\xbe\x27\x3c\x61\xf8\x41\xc5\xff\x92\xa8\x14\x26\xf3\xbb\x19\x00\x80\x05\xf5\xa1\x54\xf3\x56\x26\xf7\xdb\xd9\x23\x49\x50\xce\xef\x9e\x9f\x35\xd5\x0c\x4f\xa7\xdb\x75\xee\x68\x8d\x21\xaf\xb6\x22\x39\x3a\xf0\x56\x58\x31\xa1\xbb\x43\x53\x96\x63\xc1\x35\x72\x6d\x4c\x57\x8f\x3d\xe3\x0d\x40\x13\xc1\xc3\x2a\x15\x32\x9a\x2f\x52\x8a\x2c\xb9\xa2\x3c\xc1\xa7\x25\x50\x0e\xa9\x90\xd9\x47\x33\xa6\xe6\x43\x75\x0b\xc1\xc8\x16\x59\x15\x78\xb5\x17\x8f\x3f\xdb\xff\x2f\x2e\xc0\x42\x85\xfa\x98\x23\xfc\x10\x45\x10\xc4\x7b\x8c\xbf\x05\xc6\xa9\x72\xc6\x2a\x9e\x4e\xb0\xb9\x5d\xdb\xc7\x11\x7c\x8d\x4f\x9a\x48\x24\x95\x09\x07\x35\x32\xa8\x66\x2a\x98\x7b\x55\xcd\x67\xa3\xf4\x91\x61\x34\x7f\xde\x49\x9a\xdc\x0b\x56\x64\xfc\x03\x4f\x36\xd0\x7a\xfa\x23\xf0\x82\x31\xd8\x40\xa0\x72\xc2\xe1\x6f\xc1\x69\x0e\xe3\x70\x39\x23\x31\xee\x05\x4b\x50\xd6\xbe\x58\xe7\xa7\x74\x34\xd9\xda\x80\x46\x73\xfb\x75\xf9\x76\xdc\x5d\x89\xa9\x91\xca\x0b\x3d\x2e\x73\x58\x65\x22\x41\x56\x9b\x3f\x10\x56\xe0\x84\xf9\x77\xa9\x88\x0b\x15\xcd\xdf\xe0\x01\xb9\x0e\x35\x91\x3b\xd4\xa1\x42\x86\xb1\x5e\x2c\xc7\xcd\x94\xd9\x51\x67\xc6\x27\xe3\xd3\xa2\xe4\xc5\x18\x13\xd6\xf5\x56\x9d\x61\x0a\x32\x85\xde\xbd\xac\x18\xd2\x90\xda\xfc\xbb\x15\x4f\x2b\x2b\x37\x62\xd5\x22\xdb\x88\x81\x01\x6a\xb5\x26\x42\xf2\x1d\x51\x04\xff\x46\xf6\xc9\x3c\x12\x98\x29\x7e\x97\xbe\x97\x51\xf9\xd3\x68\x5c\x86\xca\xba\xfe\xe5\x98\x63\x99\xf6\xcb\xbf\x88\x0f\xd3\xc4\x3f\xa3\x13\x22\xd7\x26\x3c\x8e\xe6\x07\x33\x72\x26\x6f\xec\x86\x6d\x6c\x04\x02\x55\xec\x76\xa8\x34\x15\x7c\x15\x5c\x5a\xb5\x89\x15\xba\x15\xb1\x55\x9c\x50\xa8\x12\xcb\x91\x6d\x08\xdc\x8e\x99\xb3\xc2\xb8\xe4\x39\x2e\xd6\xf5\x79\xd1\x3b\x9e\xd6\xdd\xf3\xe9\x76\x9d\xd0\xc3\x4b\x8e\xba\x54\x08\x6d\x8e\xc8\x2e\x1a\xad\x16\xc6\x04\x49\x28\xdf\x35\xf5\x20\x25\x0a\x52\xb2\x4a\x1f\xcd\x5f\x95\x53\xce\x51\xd6\x8f\xf3\xbb\xdb\x35\xf5\x1c\x9a\x55\x62\x01\x27\x19\x36\xd6\xbd\x66\xad\x4a\x7d\xca\x28\x8c\x05\x4f\xbe\xe0\x93\x1e\x89\xa6\xc3\xed\xad\xe6\x5f\xc8\xf6\x53\xc5\x70\xbf\xf8\xbb\x98\xd1\xf8\x5b\xcd\x8c\xcf\x16\xfd\xde\x0c\x8d\xc9\x7b\xf8\x74\x5e\xcb\xdf\x4e\x14\x5a\x97\x1b\xdd\x2e\xca\x53\xa8\x6e\xd7\x9e\xb2\x7d\x4b\x46\x16\x3a\xe2\x80\xe5\x70\x46\x28\x7f\x5f\x1a\x7d\x41\x2c\x7e\x21\x94\xbf\x36\x12\xe7\x74\x26\xe2\x00\xc6\x3b\x13\x0c\xf3\xfd\xd2\x50\x4c\xf0\xbb\x7a\x2c\xbf\x7e\xbb\x99\xcd\xf0\x29\x17\x52\x43\x82\x29\x29\x98\x86\x67\x2b\x55\xa7\xcd\xa6\x79\xba\xb2\xe3\xb9\x14\xb9\xda\x54\x42\x56\xd0\x74\x8a\x1b\xf8\xac\x25\xe5\xbb\xab\x66\xb8\xca\x84\x0d\xbc\x17\x82\x21\xe1\xed\x4c\xd5\xea\x7a\x66\xaa\xce\xcf\x45\xb7\x16\x8e\xb9\xc7\x80\xf9\x54\x2e\x6f\x20\x08\x9a\xf1\x53\x2b\x62\xcb\x84\xf2\xc3\xfd\x24\x25\x39\x7a\xd1\x60\xb1\xec\x69\x80\xe5\x89\x2e\x24\x87\x87\xaf\x9d\x99\x93\xcf\x6c\x73\xc2\xf9\x2d\x0f\x96\xdd\x59\x49\x4a\xdc\x43\xd5\x41\xad\x77\xff\x7b\xa2\xf3\xcf\x7f\x78\xe3\xd3\x66\xd7\x10\x20\xab\x09\xeb\xb7\xf7\xb1\xe0\xb1\xa9\xbc\xe3\x11\x04\xbd\xa7\x2a\xac\x36\x1b\xa2\x72\x61\x37\x23\x11\x6b\xeb\xc4\x9f\x61\x0e\x9b\x77\xa6\xff\x9f\xb5\x99\x63\x33\x21\x9a\x74\x48\x55\x91\xa9\x6b\xbb\x7d\x6f\xd9\xb8\x34\x3b\xdd\xb8\x50\xb1\xc8\xf2\x42\x77\x1d\x77\x8a\xdc\x80\xba\x95\x25\xeb\x6e\x99\x0e\x21\x43\xbe\xd3\x7b\xb8\x84\xb7\x37\x7e\x77\x1f\x89\x8e\xf7\xae\x01\x7f\x1e\xd1\x2c\xc3\x84\x96\x25\x42\x16\xd8\x0d\x56\x59\xf5\xa4\x37\x95\x4a\x67\x9a\xd5\x42\xd4\x71\x2f\x23\x79\xd9\xdb\x41\x74\xe7\x51\xb6\x96\x53\x58\x98\x9d\x12\x29\x54\x92\xa6\x15\x57\x96\xc1\xc1\xd2\x1f\x5d\xf7\x63\x4e\xd6\x4d\xa9\x7a\x35\x2a\xc4\xca\x0c\x3e\x23\x65\x3b\x3a\x53\x7f\xc6\x45\x4a\x4e\x05\xe6\x4d\x63\x42\x2a\xa1\x96\x72\x44\x1e\xcd\xee\x8f\xcb\x29\xcc\x89\x24\x5a\xc8\x0d\x04\x30\x81\xd7\x36\x47\x1b\x28\x78\x82\x29\xe5\x98\x78\xa5\x4f\xb3\x57\x04\x59\x6c\x7f\xc7\x58\xbf\x32\xc8\xa1\x79\x86\x3f\xfe\x98\x0c\x93\x1b\xef\xb2\x4f\x3f\xa7\x51\xc5\xde\x69\xad\xcf\x69\x94\x5b\xe1\xbc\xc3\x19\xf9\x57\x6c\x4c\xa9\xd9\x8e\x00\xe5\x4a\x13\x1e\x9b\x20\xd9\x03\x05\x7e\x1c\xca\xbc\x78\x3f\xab\xae\xb6\x1e\xb0\xce\xfd\xaf\xb6\x78\x30\xb2\xbc\x39\x7f\x90\x05\x9d\x8a\x11\x0c\x92\xb9\x4a\xe4\xb8\x50\x0b\x07\xee\xe4\x39\xea\xbf\xaf\x72\x74\x0c\x8c\x15\xd7\x0c\xf5\x5e\x74\xab\x93\xf3\x92\xd8\x77\xd9\xde\xc1\xd9\xb7\x77\x48\x7b\x14\xe8\x06\xa4\xa6\x7f\x79\x11\x64\x05\xe0\xe2\x02\xda\xa1\x9c\x28\xf5\x28\x64\xd2\xe6\x82\x0f\xc6\x76\xf2\x75\x11\x3e\xe6\xe8\x0d\x53\xaf\x45\x1c\xc4\xd9\x38\x6d\xce\x10\x88\xe0\xf9\x74\xe3\xdb\x82\xba\x96\x9a\xc7\x0f\x24\xde\x4f\x55\x50\x83\x56\x66\x4b\xe4\xe6\xce\xcd\x40\xd0\x84\xa0\x7f\xdf\xc1\x8b\x6c\x8b\x32\x58\x36\x08\x39\x91\x0a\x3f\x71\xbd\xb0\x03\x57\xf0\xf6\x7a\x69\x42\x7a\x3d\x84\xb3\xa1\xf0\x61\xa6\x4c\x10\xdd\x87\xfc\x68\x06\x4b\xd0\x12\x30\x7c\x0d\x64\x79\x2d\xd3\x42\x96\xdf\x76\xdf\x82\x21\x8c\x89\xed\x43\x5b\xa9\xbe\xd6\x0a\xbd\x14\x59\xce\x86\xa1\x6f\xda\xa4\x85\x01\xf1\x67\xc1\xe0\x5d\xc8\x9f\x48\xca\x15\x98\x00\x6a\x6f\x7c\xfd\x38\xe8\xcc\x4f\xc0\xb8\xb7\x04\x3d\x98\xf5\x1a\xee\x25\x12\x8d\x40\x39\xd5\x94\x30\xc3\x19\x4a\xb6\x0c\x07\xb4\xac\x78\xd6\xe7\xe1\x83\xc5\xf5\x94\x3d\xa7\x2e\x46\x83\x52\x79\x33\xeb\xbb\xf1\x0b\xf9\x86\xa0\x0a\x89\xae\x22\x55\xc0\x85\x06\xcc\x72\x7d\x1c\xe4\x6c\x2b\x57\x37\x3a\x86\x10\xd7\x75\x92\x0e\x4d\x7c\x44\x1d\xef\x9d\x5a\x0a\xa9\x14\x99\x63\x6e\xb0\x64\x93\xf4\xaa\x9b\x3b\xa1\xca\x19\xd5\x8b\x5e\x01\x5f\x0e\x97\xcf\x88\xd2\xbf\x0a\x69\x22\x66\x61\x1e\xec\xdf\xda\xd3\x15\xbc\xfd\x1a\x6a\xf1\xb3\x78\x44\x79\x4f\x14\x2e\x3c\x08\xad\xa3\xbd\xa5\x98\xc5\x37\xf0\x25\xd3\x7d\xcd\x97\xb3\xd0\xc8\x59\x65\x98\x52\x9e\x2c\x1e\xad\x6b\x63\x6d\x57\x55\xc6\x8c\x50\xd7\xcb\x50\x69\x22\xb5\xfa\x95\xea\x7d\xe3\xc2\xf2\x05\x47\xce\x54\x25\xab\x18\x14\x76\xfc\x1d\x5d\x7c\x87\x2a\x8e\x0a\x3e\x51\xa5\x07\x61\x72\x31\x23\x7b\x09\x39\x4e\x8f\xbf\x53\x95\x33\x72\x74\x40\x87\x5e\xbf\xe1\xf8\xa4\xbf\x98\xbc\x5d\x2c\xc7\x6b\x6e\x79\x6b\x5a\xa5\xca\x1b\x89\xa9\x0a\xed\xd0\x68\xae\xd8\xed\xca\x09\xef\xe8\x3c\x74\xee\xdb\xe0\x12\x4a\xed\x87\xeb\x11\x00\x6b\xe2\xdf\x18\x1b\xcb\xf6\x39\xdc\xa1\x7e\x2f\x0a\x6e\xde\xce\xef\x19\x45\x6e\x67\x4d\xa9\x18\x72\x25\x27\x3c\xb4\xd7\xb8\xa1\x16\x39\x44\xb0\x68\xd0\xc2\xad\xd0\x5a\x64\x86\xb2\x4b\xb8\x84\x20\x7f\xf2\xd4\x55\x47\x9f\x61\xda\x78\x60\xf5\xed\x80\x4f\xf1\x74\xb6\x68\xb9\x17\x94\x9e\x93\xb2\xc3\x98\xb3\xac\xf2\x64\x91\x8f\x1e\x23\x6f\x31\x83\x93\x7b\x18\x84\x9a\x58\x9d\x35\xce\x86\x5e\x37\x6d\xdf\xb8\xd3\xb5\xc8\x70\xa7\xeb\x9a\x34\xa2\xe9\x16\xa9\xb6\x3c\xf5\x96\x5e\x96\xa2\x5c\xe4\xfd\x55\x54\x13\x85\xda\x3b\xa1\xe9\x6b\x4f\x59\xae\xab\x5d\xf8\xbb\xa0\xdc\x71\x00\x2e\xdb\x65\x4f\xb6\x35\xde\x62\xd0\xb4\xbc\x5e\xbe\xd4\x5d\xa3\xe7\x80\x3c\x9f\xae\x86\x05\x3f\xb8\xaf\xf8\x23\xf5\x01\xdc\x53\x50\x79\x72\xdb\x9f\x93\x42\xef\x51\x7e\xea\x94\x03\x64\xe1\x7f\x0a\x94\xc7\xcf\xf6\xae\x5f\xc8\x9f\x18\x5b\x04\x16\x22\xf0\x1c\x02\xe6\x53\x5d\x0e\x76\x6c\xb6\xf7\x98\x1e\x47\x9b\x3e\x49\x35\x3f\x75\x36\x27\xcf\x9d\x39\x21\xfd\x55\x7f\x50\xae\xae\xbf\x0e\x7b\xfe\x73\x0a\xf5\x4f\x18\x43\x8d\x53\xdb\xc4\x39\x61\xb9\xb8\x70\x82\xf4\x02\x27\x5b\xe1\xb3\xee\x75\x45\x5f\xe4\x58\x19\xea\x31\xdb\xe5\xec\xb8\xd1\x53\xbf\x8b\xec\x4e\x9c\x66\xa7\xff\x06\x00\x00\xff\xff\x69\x34\x6d\x10\x19\x20\x00\x00"), }, "/js/component/pagination.js": &vfsgen۰CompressedFileInfo{ name: "pagination.js", @@ -271,7 +271,7 @@ var assets = func() http.FileSystem { }, "/js/page/home.js": &vfsgen۰CompressedFileInfo{ name: "home.js", - modTime: time.Date(2019, 8, 11, 8, 53, 6, 204947425, time.UTC), + modTime: time.Date(2019, 8, 12, 1, 50, 18, 367196767, time.UTC), uncompressedSize: 32704, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\xef\x77\xd3\xb8\xb2\xdf\xf9\x2b\x06\x5f\x0e\x75\x20\x71\xe8\x7e\xcc\x36\x65\x81\xe5\xee\xe3\x2d\xcb\x72\xa1\xbc\x77\xde\x01\xf6\x54\xb5\x95\x44\x5b\xc7\xf6\x95\xe4\xa6\x39\x25\xff\xfb\x3b\xfa\x65\xcb\xb6\xfc\x23\x2d\x65\x7f\xdc\xfa\x03\xb8\x92\x66\x34\x92\x46\xa3\x99\xd1\x78\x72\x81\x28\x70\xbc\xce\x62\xc4\x31\xcc\xe1\xf4\xde\x51\x44\x2e\x80\x44\x73\x2f\x43\x4b\x3c\x59\xa5\x6b\xec\x1d\xdf\x03\x00\x90\x15\x61\x8c\x18\x33\x75\x18\x45\x98\xea\x5a\xd9\x82\x24\x59\xce\x81\x6f\x33\x3c\xf7\x38\xbe\xe4\x1e\x64\x31\x0a\xf1\x2a\x8d\x23\x4c\xe7\xde\x7b\x8c\x68\xb8\x82\x9c\xc6\x63\x38\xc7\xdb\x4d\x4a\x23\x48\x29\x70\xb4\x64\x1e\x5c\x4c\xd6\x69\x84\xe3\x80\x53\xb2\x9e\x7b\x4c\x36\xf5\xe0\x87\x45\x1a\xe6\x6c\xee\x3d\xc0\x17\x38\xe1\x01\x47\x74\x89\x79\xc0\x70\x8c\x43\xee\x8f\x3c\xf8\xe1\x1c\x6f\xf3\x2c\xc0\x09\x17\x1d\x28\xa8\xe7\x69\x7a\xbe\x46\xf4\x9c\x79\x53\x8b\x36\x04\x9c\xf0\x18\xcf\xbd\x77\x78\x41\x31\x5b\x01\xe3\x29\x45\x4b\xec\xc1\x0f\x61\x4c\xc2\xf3\xb9\x47\x71\x9c\xa2\xe8\x47\xc4\x91\x35\x26\x35\x2e\x33\xee\x05\x62\xb0\x40\x93\xc5\x46\xfc\xcb\xb6\x49\x38\x41\x31\xf7\x60\xa6\xab\x05\x3c\x49\x96\xf0\xf0\x21\x1c\x88\x06\x19\x49\x0e\xbc\xe3\xa3\x29\xb1\xe8\x98\x22\x17\x51\xcf\xa2\x08\x12\xbc\x81\x33\x4d\x7b\x49\x15\x5b\xa5\x9b\x1f\x09\x8a\xd3\xe5\xb3\x28\x1a\x46\x58\x16\xe7\x6c\x12\x12\x1a\xc6\xb8\xa7\xf7\x8b\x09\x59\xcc\x3d\xb1\x00\x41\x8c\x93\x25\x5f\xc1\x31\x3c\xf1\x0c\x51\xef\x57\xe9\x46\xaf\x4e\x93\x9a\x13\x51\x3e\x88\x1c\x89\x61\xd0\x2c\x3c\x47\x3c\x5c\x01\x8e\x08\x2f\x7b\xe4\xe9\x72\x19\xe3\x97\x11\xe1\xbf\xa4\x11\x1e\x38\x01\x38\x09\x49\x2c\xd7\xa6\xa5\xdf\xa3\x69\x44\x2e\xba\xf9\x5a\x6e\x02\x41\xcb\xe4\x2c\xbd\xf4\xf4\x54\xe1\x26\x1d\x47\xd9\xf1\xd5\x95\xe2\x48\x92\x26\x7a\x1e\x77\x3b\x20\x1c\xaf\x19\xa8\x0a\x1c\x1d\x4d\x33\xd7\x88\x7f\xc4\x31\xe6\xb8\x73\xd9\x55\x13\xbf\xe8\x61\x34\x70\xd6\x29\x62\xab\xae\x29\x68\x32\x60\xdb\x52\x3f\x8b\x22\xb1\xda\xfb\x93\x30\x78\xe1\x3f\x64\x91\x90\x3f\x62\xf7\x92\x0b\xec\x24\x42\x35\x79\x81\xc2\xd5\xfe\x73\x11\xc6\x69\x1e\x4d\xa2\x74\x93\x88\x1d\x3a\x7c\x52\x5e\xa0\x24\xc4\xf1\xcd\x78\x91\x93\x35\x6e\x9d\x85\x3a\x1b\x0a\x96\x33\xbc\xc0\x26\x4b\x4a\x22\x0f\x28\x5e\x58\x85\x3f\xc9\x32\x23\x70\xae\x62\xc2\xf8\x0c\x22\xc2\xb2\x18\x6d\x7f\xcd\xc4\x9c\xb0\x40\x14\x0a\x02\x77\x15\x2e\x45\x4b\x92\x20\xd1\x40\xf0\xb3\x66\xe7\x35\xba\x7c\x8b\x96\x18\x8e\xe1\xd0\x83\xca\x68\x66\x62\x2b\xa8\x0d\x51\xaf\xd1\x40\x05\x74\xbd\xde\xec\x11\x6b\xb7\x54\x1a\xfc\x10\xae\x50\x22\xe0\xd5\xff\x12\x85\x3d\x37\x55\x4a\xad\x1a\x33\x09\x13\xb1\xb5\xe0\x62\xb2\x48\xe9\xdc\xf3\x45\xe9\x18\x48\x12\xe1\xcb\x11\x90\xa4\xd8\x4b\xac\x4e\x97\x99\xdc\x80\x44\x55\x82\x66\x39\x8d\x75\x55\x4e\xe3\x5a\x9d\x66\x05\x59\x2b\xdf\x6b\xf5\xf8\x32\xc4\x34\xe3\xba\x85\xfe\xab\xd6\x26\xcb\xcf\x62\x12\xea\x26\xea\x8f\x5a\x0b\xb2\x46\x4b\xfc\xe1\xdd\x6b\x43\xa1\xfe\xb3\xd6\x6a\x85\xd8\x8b\x34\xe1\x38\x31\xdd\x95\x05\xcd\x96\xcf\xd4\x66\x2a\x5b\xea\x82\xfa\xf8\xd0\x92\x99\xe1\x89\xfd\x5a\xa3\x4b\x4c\xeb\xdc\x93\xff\xd5\xaa\xce\xf1\xb6\x9c\xcf\x3d\x59\x60\x26\xf6\xf5\xab\x68\xee\xd5\x38\x57\x15\xd7\xda\x1a\x76\x6e\xb4\x36\x15\x75\xdc\x5a\xe4\xce\x3d\xc2\xde\xeb\x77\x5f\x13\x3a\xaa\xb1\xa2\x6a\x6b\x76\xf6\x7b\x23\x57\x6a\xad\x38\x5a\x4e\xa4\x08\xc0\xd6\xfe\x3c\x41\xcb\x17\xaa\xac\xd6\x5a\x0c\xd9\x96\x5c\x42\x5e\xd4\x9a\x44\x52\xa6\x37\xa5\x7c\xad\x59\x2e\x65\x5e\x8b\x14\xac\xec\x99\xca\xd6\xf8\xdb\xec\x7a\x5b\x3c\x66\x46\xba\xe2\x75\xc6\xb7\x93\x35\x66\x4c\x52\xa1\x86\x74\xdf\x52\xbd\x04\x5b\xbc\x62\x2f\x45\x33\xef\xf8\x4d\x0a\x0c\x5d\xe0\xa8\x14\x0b\xb0\xc5\x1c\x66\x7e\x71\x20\xdb\xe7\xbf\xc6\x32\x49\x2f\x30\x8d\xd1\xd6\x60\xd7\xc5\xde\x71\x9b\x26\x98\x91\xc4\xfc\x9f\x08\x95\x58\x48\x7b\x9b\xf8\x30\x67\x3c\x5d\x4f\x22\xb9\x86\x52\xca\xab\xd7\x89\xd1\x7d\xcf\x48\x52\x14\xd6\x34\xab\x23\x54\x9c\x3f\x0b\x12\x73\x4c\x4f\xd0\xd2\x3f\x78\x74\x30\xf2\x8e\x7d\x14\xc7\xe2\xd4\x5e\xe2\x68\x54\x3f\xc2\x9c\x30\x63\xe0\x34\xc7\x06\x32\x4f\x5a\x60\x8d\x68\xe5\x68\x39\x06\x12\x29\xb9\x5a\xd5\x0e\x0a\x52\xf5\x1e\xf0\x95\x86\x2e\x9b\x8f\x45\xdb\xfa\xd1\xfc\x8f\xab\x2b\x8e\x96\x41\x82\xd6\x78\xb7\x3b\x62\x19\x4a\x8e\x75\x49\xa1\xaf\xef\x76\x47\x53\x59\xe1\x3a\x28\x2b\x53\xe8\x9c\xd6\xea\x2c\x0a\xe5\x5f\x2d\xc1\xe9\xbd\x7b\x64\x9d\xa5\x94\x43\xc9\x63\xcf\xd3\x4b\x58\xd0\x74\x0d\x5e\x10\x4c\xc3\x74\x9d\xa5\x09\x4e\xb8\xc5\x84\xc1\xef\xcc\xfb\xde\xc0\x19\xde\x79\x25\xce\x1d\x07\x98\xa9\xaf\x00\x29\xe2\xd4\xb6\x75\x01\x29\x32\xab\xfd\x20\x26\x37\x86\x69\x3e\x15\x05\xaa\xc5\x3d\x7c\x29\x9b\x44\x78\x81\xf2\x98\xc3\x95\x9c\x01\x63\xb9\xcd\x8a\xb7\xb1\x2c\x5f\x93\x4b\x92\xb0\x19\x7c\x34\x18\x3f\xab\xf2\xa2\x77\x36\xd3\x18\xc4\x63\x0f\x6f\x5c\x94\x56\x26\xab\x2c\xb6\x87\x25\x0b\x77\xaa\x2e\x42\x1c\xf9\x23\x0b\x2b\xc5\x3c\xa7\x89\x55\x20\x1e\xbd\x93\x66\xb0\x40\x31\xc3\xe3\x4a\x9d\x91\x1b\xce\xca\x42\xe5\x9b\xc1\xc7\xcf\xe3\x7b\xb5\x3a\xa1\x38\xce\xc0\xf3\xaa\x30\x42\x8c\xcd\xe0\x49\xb5\x50\x8b\xaf\x46\x79\x21\x1f\x54\x07\x76\x95\xe0\x7c\x47\xb7\xe5\x6e\x9d\xd5\x46\x29\x9e\x0b\xc2\xc8\x59\xec\x1e\x4c\xef\x68\x65\xaf\x42\xd9\x98\xc1\xc1\xcb\x4b\xc2\xb8\x10\x6d\xa2\xa7\x83\x66\xbb\x35\x22\xc9\x09\xbe\xe4\x33\x38\xf8\xf5\x67\x47\x3d\xc3\x61\x9a\x44\xba\xc5\x3b\x2c\x36\x60\x17\x2a\xb9\x9f\x67\xe0\x8f\x60\x7e\xec\x18\x96\x78\xc8\x02\x7c\xbe\x22\x2c\x28\x67\x20\x30\xc3\x19\xb5\xc0\xc8\x11\xb5\xc0\xc0\x5c\xcd\xc1\xf7\x4e\xc8\x1d\xe0\x98\xe1\x3d\xd0\xea\x99\xef\xc1\xda\x28\xdd\xb5\x4d\xdd\x80\x19\xe9\x18\x99\x10\xb8\x4d\x12\x1c\x9d\x61\x16\xbe\xa5\x98\x31\x1c\xed\xd7\xd7\xa0\xe1\xee\x3f\xf5\xd5\x09\xb2\xe8\xdd\xd9\xbb\x5e\x08\x94\x9c\x0b\x92\x4b\x62\xad\xf3\xd7\xaf\xb3\x83\x16\x0a\x92\x9c\x62\xc7\x19\xdf\xc3\xd1\x1c\x9e\x7c\xef\xee\x67\x83\xb8\xd8\xe1\x25\x32\xcf\x31\x18\xcf\x6f\xe3\x42\xc1\xb1\x5d\x1c\x5a\x9f\x1e\xb9\xf7\x60\x0e\x9e\xb5\x5f\xbc\xe6\x1c\xd5\xc1\xcc\x56\x14\x90\xda\x76\xec\x07\x2a\xf7\xa7\x00\xab\x01\xb4\x32\x7f\x2b\xc5\x15\x71\xb1\x27\xcd\xbf\xfe\xbc\x37\xbd\xed\x13\xb4\x73\xaf\xe4\x1a\xf3\x55\x1a\x55\x44\x66\xe9\x78\x6b\xf0\x4b\x21\x6a\xf4\xc1\x31\xd2\x1c\x54\xed\x4a\xb6\x10\xd2\x1e\xe6\x70\xe8\xa8\x52\x07\x84\x63\x7a\x0b\xd4\xb2\x73\xb1\x55\xb5\x86\x64\xb1\x61\xc9\xf9\x45\x43\xa1\x51\xbe\xe7\xe2\xb4\x85\x05\xe6\xe1\x4a\x8c\x7e\x38\xe5\x95\x66\xd3\x29\xbc\xc7\xe5\xb1\x8e\xe8\x92\x55\xcf\x36\xd3\x15\xcc\xc1\xe7\xdb\x0c\xa7\x0b\xbb\x6c\x3e\x07\x61\x90\xc4\x18\x25\xde\x08\x9e\x5a\x55\x33\x87\xe4\x29\x88\xb5\x90\x59\x65\x75\x64\x65\xd5\xcc\x48\x89\x3a\xed\x6f\x11\x65\x58\x1f\xc0\xf0\xef\x1c\xd3\x6d\xa5\xc5\x05\xa2\x85\xa7\x77\x6e\xaf\x45\x53\xfc\xd1\xcb\x97\x97\x61\x9c\x47\xf8\x04\x2d\x9f\xc1\x1c\xa6\xfe\x6f\x5f\x3e\xb1\x91\xd0\x90\x67\x1f\xbd\x83\xcf\xfe\xc7\xdf\xbc\x83\xcf\x8f\x47\xe2\x7d\x4a\xc6\xa2\x73\x59\xe7\x6d\x08\x5f\x01\xcb\x50\x58\x33\x38\xea\x48\x9f\xd7\x90\xfa\x9f\xde\x3f\x1e\xd9\x98\x04\xa2\x34\xe7\x13\x89\xcb\x81\xea\x55\xe2\xa0\xaf\x83\xbc\x01\xd4\x95\x28\x9f\x57\x51\xda\xc4\xf5\xd3\xc6\xd5\x92\xd6\xf5\x16\xf1\x60\x35\xfe\xe8\xa4\xbd\x09\xbd\x7c\x87\x59\x1e\xf3\xe6\xea\xfe\x84\x79\x81\x40\x74\x02\x0b\x42\x19\x1f\xc3\x66\x45\x62\x0c\x28\x66\x29\x50\xbc\x4e\x2f\x84\xb8\x21\x5c\x69\xad\x7a\xb9\x2b\xa8\x54\x7b\xdf\x74\x04\xf3\xea\x6a\x07\xf8\x12\x87\xbe\x06\x1c\xb9\xe4\x73\xc9\x43\xfa\x2d\xa0\x58\x5e\x2d\x14\x38\x3f\x3e\xf9\x3c\x06\xcf\x1b\x35\xe5\x97\x3d\x03\x41\x96\xb3\x55\x09\xf3\xdd\xe7\x51\x5d\x66\xed\x41\xf7\xf3\x3f\x2d\xdd\x7a\xe9\x48\x52\x2e\x1d\xeb\x1d\x98\xc5\xde\xb7\x3b\x30\xfe\x75\x16\xc2\xda\x3b\x7f\x3a\x7a\xa7\x53\x38\xa1\xc4\xbd\x19\x9a\xa4\x70\x4a\xd6\xfe\xa8\xa0\x68\xfa\x89\x3d\x9e\x2e\xc7\xe0\x81\xa0\xa6\x21\x71\x29\xce\x10\xc5\xf0\xe1\xdd\x6b\x58\xa4\x14\x9e\xbd\x7d\xd5\x10\xb9\x39\x8d\x61\x2e\xef\x93\x3e\xbc\x7b\xed\x7b\x53\x94\x91\x69\xe9\x16\x1d\x43\x94\x86\xf9\x1a\x27\x3c\xf8\xf0\xee\x75\x6d\x20\x39\x8d\xcb\xe3\x52\x63\x50\xf7\x76\x6f\x11\x45\x6b\xe6\xb7\xce\xed\xcc\xbc\x38\x4c\x19\x69\x23\xc9\x79\xfc\x3d\x25\x89\xef\x8d\xbd\x51\xab\xa8\x9a\x55\x39\xbf\x03\x40\xd9\x77\xc5\xe1\x5f\x5d\x10\xc7\xd4\xfd\x53\x9c\x67\xd2\x50\x55\xa2\xca\x35\x75\xec\x9c\x64\xff\xb4\x8e\xc9\x97\x94\xa6\xd4\xf7\x44\xb1\x3a\x0f\x85\xac\x93\xae\x90\x7a\x07\xf6\x61\xef\xd4\xfb\x25\xb8\x9f\xd3\x78\xd4\x18\x49\xc0\x57\x38\xf1\x29\x66\x59\x9a\x30\xdc\x6d\x79\xdd\x37\xcd\x82\xf4\x7c\x04\x7c\x45\xd3\x0d\x98\x22\xb7\xf2\xaf\x95\xee\x02\xee\x77\x96\x26\xbe\x83\xd1\x77\x6d\x84\x09\x80\x76\xa2\x8c\x0a\x83\x38\x6a\xb7\x3d\xb4\x76\x26\x30\xc9\xf7\x0e\x33\xc5\xb8\x27\x75\x6b\xfd\x67\x07\x40\xe9\xda\xd3\x20\x45\x41\x6d\x89\x6c\x8a\xd1\x05\x06\x26\x35\x25\x94\x44\xa0\x9c\x92\x72\x53\x91\x05\x24\x18\x47\x38\x6a\x5d\x81\x42\xc9\xea\x32\x76\x05\x33\xad\x08\xe3\x29\xdd\xc2\xbc\xa3\x9d\x78\x50\xc8\xc9\x05\x56\x6e\x09\xeb\xde\xbd\xc9\xf1\xf6\x63\xbc\x1e\x9d\x5a\x95\xfd\x74\x6d\x17\xfb\xd9\xb5\xcc\x1a\x94\xd2\xe5\x5f\x39\xa6\x04\x2b\x85\xc2\xbd\x30\x60\xab\xc0\x99\xf6\x36\x8f\x2c\x58\x25\x51\x4f\xa5\xc3\xf9\xc1\x55\xd1\x6c\x77\xea\x60\xcc\x06\x42\x2d\xa1\xee\x0b\x8d\xd5\x73\x60\x55\xf5\x06\xaf\xfa\x4b\x62\xee\x1b\x98\xb0\x11\xfe\x21\x27\xbf\x93\x08\xab\xc3\xf2\xde\xbc\x8b\x1b\x40\x89\x56\x78\x3c\x87\xd3\xa7\x0f\xae\x2c\x78\x25\xdf\x1e\x7a\xa3\xdd\x69\xfb\xc0\x77\xed\x84\x6f\x48\x12\xa5\x9b\x40\xb3\x9a\x1c\xbf\xe4\x4d\x5f\x97\x8c\x2b\x1c\x25\x88\x68\x99\xe0\x96\x3e\x0a\xb9\x29\x95\x4c\xb2\x00\x8a\xff\x9d\x63\xc6\x3b\xf6\x47\xab\x4d\x64\x3f\x5a\x28\x29\xa1\xa8\x8e\x28\x23\x56\x9d\xd4\x0d\xf2\x02\x95\xe2\xb7\xc3\x17\xa2\x5a\x0b\xb1\x59\x11\xf6\x83\xfd\x44\x7f\x33\xf1\x2d\x27\x4e\x5b\x10\xa2\x65\x87\xa0\xed\x9d\x5e\x17\x09\x21\x12\x2b\x8c\x29\xed\x21\xa1\x81\xbc\x75\x0a\x05\x2e\xb1\xf5\x2b\xcb\xd7\xc5\x6b\x98\xd2\x80\xe3\x4b\xee\x8f\xd4\x84\xac\xd9\xb2\x9d\x98\x0a\x51\x6c\x95\x6e\xa4\x0a\xa0\x1c\xde\x02\x72\x2c\xd1\x89\xa3\x23\x67\x1d\xb2\xca\x31\x15\xd0\xc2\x4f\x4e\x67\x43\x2d\x96\xa9\xe1\x19\xe9\xf3\x79\x94\x2e\x15\x27\xfa\xf2\x16\xce\x17\x48\xba\xb0\x37\x8f\x6b\x59\xfb\x80\xe2\x85\x75\xf6\xfe\x44\x49\x14\xb0\x90\xa6\x71\x7c\x92\x66\x50\x71\xe5\x0d\x25\xaa\x1a\x5f\xe1\x1e\x72\x71\x11\xe0\x38\x7c\x64\x03\xcb\xb5\x79\xbf\x52\xd0\xd1\x65\x71\xf1\xeb\x13\x8e\xd7\xf5\x7e\xc5\xd9\x40\xa2\xcb\xd2\x83\x61\x62\x7d\x16\x24\x89\x5e\x25\x11\xbe\xf4\x71\x2c\x18\x0a\xc7\x01\x89\xa4\x1f\x45\xa0\x09\x48\x54\xe3\x0f\xc1\xbc\x12\xd1\x7c\x0e\x93\xc3\x51\x1d\x9d\x3c\xbb\x24\x01\x55\x30\x29\xf9\x6a\x6d\x59\x16\x93\x10\xfb\xf2\xb6\xed\xd0\x3d\x9b\xb5\xdb\xef\x57\x51\x97\x33\x76\xc8\xa0\x0c\x96\x63\x98\x1c\x3a\x7b\x6c\x5c\x0a\xd6\xef\x04\x1d\x3e\xb2\xfb\xfb\xdc\x24\xc8\xb6\xe5\x8d\xa6\xb9\x50\x1c\x83\x0a\x0f\x44\x31\xff\x19\x6f\xeb\xa6\xd9\x50\x17\x6a\xaf\x23\xbd\x90\x08\x4a\x18\x28\xd7\xa7\xa0\xa3\x18\x5f\xab\x07\xb4\x9c\xa3\x66\xf8\x80\x99\x25\x8e\x96\x6f\xd0\xda\xbd\x15\x2b\x63\x7e\xd3\x35\x64\xab\x2b\x17\x90\x32\xad\x5c\xf3\x5b\xf3\x44\x66\xc2\xdc\xc3\x1c\xd3\x2a\x2b\x96\xf0\x96\x0f\xb1\x52\x5a\xf7\x22\xda\x95\x6e\x3f\xa2\x54\xeb\x14\x85\x0a\xfc\x91\xd7\xba\xf8\x85\x6d\x6a\xa3\x7d\x0a\x9e\xf4\xe0\x3d\xf2\x60\x06\x9e\x7a\x6b\x59\x3e\x97\x04\x32\x8f\xcb\xb5\x5c\xd3\x8a\x84\x28\xa0\x97\xef\x33\x14\x8a\xf1\x6b\x4b\xbd\x81\x88\x14\xae\x09\xe9\xa9\x90\xcd\x03\x8e\x19\xf7\x8b\x35\x7e\x0a\xa7\xd2\x3f\xf8\xe0\x4a\x17\xed\xbc\x53\x98\xa9\xc2\xb2\xec\xb4\xd5\x4a\x56\xb8\xbd\x89\x07\x8f\xad\xee\x5c\xce\xbd\x57\x36\x31\xc2\xa2\x7f\x87\x97\x2f\x2f\x33\xff\xd4\xff\xed\xcb\xa7\x4f\x6c\xf4\xe0\xaa\x84\xdf\x9d\x8e\xc1\x23\x4b\x97\xb1\x6d\x7b\xbe\xda\x10\x95\xb4\x75\x20\x2a\x56\xd0\x5a\x4f\x07\x43\x74\x70\xaa\x69\x62\x93\xa4\xa6\x57\x61\x73\x7a\x80\xda\x16\xd8\xb1\xc8\x25\xfe\x72\xee\x06\xe1\xaf\x72\xa8\x7a\xb1\x1c\x4d\x25\xb6\x31\x78\x0f\x0e\xc5\xd2\x95\x33\xe6\x52\xe8\xba\x74\x5e\xdd\x8d\x30\x28\xa0\x3a\xf3\x1d\x0a\x5c\x9d\x36\xe5\x79\xea\xbd\xfc\x6b\xa3\xe3\x5a\x93\xb4\xf7\x22\xec\xb9\xc8\x3d\x8b\x50\x62\x2b\x16\xa1\xe4\xff\x9b\x2d\x82\xbd\x8f\xbe\xfe\x22\xb4\x78\x9b\x3a\xd4\xa9\x4a\x04\x6f\x8b\x36\x55\x34\x71\x38\xf6\x74\x04\x82\xf7\x06\x6f\xc0\x28\xa2\x0e\xa7\x44\xa8\x22\x10\x67\xe0\xbd\xa0\x58\x3a\x54\xaa\xa1\xec\x4d\x88\x05\xc1\x71\xc4\x66\xf0\xd1\x3d\xab\xe2\x58\x9d\x81\x97\xd3\xb8\xc5\x05\x12\xa3\x33\x1c\xcf\xc0\xfb\x40\xe3\x31\x30\x8e\x28\x07\x79\xcf\xb2\xe2\x3c\x9b\x4d\xa7\x41\x10\x38\x00\x77\xe3\x96\x45\xd4\xdd\xa9\xe0\xce\xee\x0e\x5f\xc8\xe0\x17\x35\x31\xe0\xa7\x32\x0e\x11\xc5\xa3\xa6\xb3\xa0\xaf\x33\x13\x27\x3a\xa8\x3b\xdd\xd8\xee\xd0\x0d\x27\x8e\xe3\x19\x78\x88\x62\xb4\x3f\x49\xd2\xfa\xee\xa1\x27\x5d\xaf\x11\x30\x2c\x74\x03\xae\xef\x15\xfa\xa9\xd2\xed\x53\x3a\x03\x6f\xdc\xd2\x26\x22\x52\xf9\x44\x74\x3b\x2b\x0d\xd2\x60\x8d\x32\x71\x62\x0a\x2d\xd4\xa8\x7a\x4d\xab\xaa\x6f\x5c\xa1\x64\x4a\x13\xfc\xda\x33\x40\xcd\xc0\x9d\x8d\xf5\x2c\x87\x2b\x1c\xba\x98\x1b\xa4\x9a\x10\xe7\xc6\xd7\x56\x0b\x5a\xcd\x99\xa1\x65\x7f\x16\x5d\xa3\x73\xfc\x56\x85\x0f\x77\x8f\xe3\x17\x74\x5e\x8c\x02\x54\xc0\x71\xbc\x05\x74\x81\x48\x8c\xce\x5a\xb9\xfc\x66\x03\x2b\x89\x73\x0c\xcc\x71\xed\x58\xc6\x2d\x79\xbf\xfe\xec\xe8\xce\x8e\x5b\x32\xd1\x14\xdd\x21\x4b\x11\xe2\xa8\x23\x70\x66\x3a\x05\x39\x2f\x2c\xd7\xd7\x27\x84\x41\x92\x72\x90\x01\xa5\xad\xce\x06\x81\x34\xc8\x69\xac\xc5\xb4\x52\x50\x9d\xfa\x69\x31\x8d\x2e\xc7\x81\x27\x3a\x5c\xe7\x8c\x97\x5d\xb6\xb9\xba\xa0\xe3\x90\x84\x4e\x47\x9d\xb9\x1b\x6a\xdc\xf7\x99\x47\x7e\xed\xa5\x5c\x3d\x72\x5c\xad\x0d\x41\x3a\x8f\xd2\xd7\xe9\x06\xd3\x17\x88\x61\xdf\xed\xcd\x90\xcd\x5c\xf7\x56\xed\xad\x85\xe1\xca\x45\xdb\x47\xe3\x4f\xec\xd1\x74\xd9\xd1\x54\xd9\x2f\xb6\x04\xd0\x6b\xa0\xfd\xbe\xed\x90\x96\xe0\xe8\x76\xf2\x38\x83\x14\x5d\x8f\xda\x81\x25\x0d\x9d\x00\xbb\x2e\xb7\x50\xc7\x9d\x04\x4e\xa2\xf6\x6b\x14\xb1\x76\xf2\xee\xaa\xeb\x36\x21\xa7\xf1\x0c\x6a\x2c\xdb\x7e\x2b\xa0\x0f\x78\xc5\x0a\xe2\xbd\x17\x42\x1f\x45\x1a\x46\xff\xd5\x0b\xa5\x24\x90\x06\x2a\xe5\x04\x3c\x85\x43\x68\x04\x62\x56\x08\x2c\x2e\x0e\xdb\xdb\x54\xe4\xbb\xee\xa3\x52\xe6\x06\x6d\xbb\xe5\xb0\xbc\x02\x9d\xb7\x79\xe6\xb1\x1d\xd8\xf6\x1d\x6b\x37\x4b\xa9\x28\xa8\x19\x78\x59\xca\xda\xb4\x00\xf3\x9c\xa5\xd1\x76\x06\xff\xfd\xfe\xd7\x37\x01\xe3\x94\x24\x4b\xb2\xd8\x2a\x59\xd7\x0d\xa7\xbe\x63\x73\x06\xa7\xd6\x1f\x4f\x7f\x45\x32\x39\xd9\x66\xd8\x13\x2a\x44\x96\xc5\x24\x94\xd1\xbf\xd3\xdf\x59\x9a\xf4\x90\xe8\x08\x67\x2c\xaa\x3a\xb6\xe9\x40\xb7\xb9\x79\xae\xe7\x3e\x37\xcf\x50\x37\xfa\x60\xc2\xbb\xdd\xea\xe6\x71\xf3\x53\xcf\xf5\x44\x1d\x70\x50\x8c\x67\x05\xb0\x0c\xae\xd4\x9e\xc2\x27\x63\x78\x32\x96\x0e\xfe\x6b\x8e\x79\x80\x1f\xff\xc6\x63\xbe\x96\xa3\x1e\x6e\xee\xac\xef\x19\xfb\xae\xdf\x3a\xeb\xb3\xc0\x5e\x46\x84\x3b\x9d\xcb\xd3\x29\xbc\x10\x0a\x17\xf0\x15\x96\x6e\xe3\xa6\x6b\x4c\x39\xd9\xe4\x47\x6f\xf2\xe4\x4b\xcf\x7e\xc7\x21\xf7\x5a\x22\x0a\x95\xb7\xda\xf2\xce\x69\x5f\xb4\xd2\x5c\x92\x7c\x7d\x86\xa9\x74\xcc\x99\x72\xa7\x04\x96\x5f\x7c\x35\x90\xa8\x42\x27\x1e\x59\x35\x93\x9e\xe1\xc6\x08\x48\x04\x47\x70\x08\x5f\xbe\x68\xb4\x47\xf0\xa4\x3d\x1c\xf2\x27\xcc\xe5\x5c\x60\x13\xc8\x6a\x58\x59\x29\x9f\x8d\xb1\x8a\x6a\x98\x2b\xf9\x98\x21\xca\xb0\x5f\x13\x95\xd5\xfd\xf0\x51\x92\xf0\x79\xe4\xf2\x4c\x71\xaa\xa3\x3e\x8a\xcf\xe1\x9c\x26\x88\x89\x49\x69\xc6\xe7\x0c\xb7\xa9\x05\x3f\x0c\x33\xaa\x65\x4b\x31\x21\x66\x08\x07\x4c\x1e\x72\x2e\x95\x79\x95\x6e\x5e\x2b\x13\x40\xc6\xb2\xde\xa6\xe1\xdd\x6d\x20\x98\x8f\x29\x6f\xc7\x0c\x3f\xe9\x68\x63\x13\x20\x71\xed\x4f\xc2\x30\xe3\xfc\x65\x67\x2b\xdb\x14\xef\x27\x54\xf7\x78\x8d\xd9\xea\x37\xda\x4f\xda\x9b\x68\x12\x34\xdf\xff\x29\xad\xf7\x3f\x8d\xc9\x6b\x7d\xbb\x0b\xc7\x73\x38\xfc\xf3\x1a\xb9\xff\x83\x62\x22\x3f\xa7\x97\xe9\x38\xba\x0d\x5b\x5b\xeb\x2f\x4c\x5b\xa7\x64\xb6\x3a\xb8\x33\x33\x35\xe4\x5f\xd5\xcc\xe4\xd2\x41\xdb\x6a\x69\x1a\xe1\x6d\x96\xaf\x34\x25\xdd\x1d\x96\xb2\xb6\x58\x70\x8b\xad\x3a\x60\x8c\x63\x73\xee\x32\x27\x3b\xe0\xf4\x36\x9c\xb7\x19\x94\x5d\x64\x2a\xb6\xe4\x32\xe0\xe7\x7a\x86\xf8\xb7\xb6\x10\xf3\x6b\x19\x88\xa2\xa7\x3b\x03\xf1\xce\x40\x6c\x03\x6c\x18\x88\x52\x2f\x1e\xc3\xe1\x9d\x91\xd8\xf1\xdc\xae\x91\xa8\x53\xfd\xc8\xcc\x41\xad\x76\x22\x4a\x22\x1d\xd9\xa1\x52\x0c\x75\xd9\x8b\xac\xc5\x60\xac\x83\xdc\x7f\x46\x29\xda\x06\x84\xc9\xff\x35\x01\x23\x8d\x62\x0e\x1f\xe5\xcb\xe7\xba\x65\xa7\x6b\xe5\xff\xe6\x14\x95\x56\xaa\x73\x35\xbe\x8e\x5d\x0a\x5f\xd3\x36\x85\x72\xd7\x93\x08\x8e\xe1\x09\x3c\x7c\xa8\xb1\x57\x63\x9c\xc0\x75\xa4\x4a\xcb\x56\x8e\x5d\xc7\x00\x8b\xce\x3b\x0c\xdb\xf7\x42\x25\x01\x12\x31\xb9\x84\x24\x89\x48\x88\x99\xc3\x74\x2f\xe7\x54\xe8\x17\x66\x42\x4d\x44\x99\xd3\x54\x17\x98\x3a\xa0\x64\x6e\x9c\x80\xa5\x94\xfb\x3e\x1a\xc3\x99\xd4\x1f\xcf\x60\x02\xc8\xf1\x95\x84\xbe\x03\x53\xe7\xb9\x8c\x8d\x57\xa2\xbf\x41\x69\xf1\xc9\xa9\x4e\x62\x55\xe6\x5d\x6b\x35\x67\xad\xd6\xc2\xa2\x35\x99\x5a\xac\xe4\x1c\x4f\xe1\x64\x45\x98\x8c\x88\x4f\x13\x20\x0c\x08\xa5\xf8\x02\x53\x29\xde\x02\x6f\xc8\x12\x1c\x3a\x83\x87\x5a\x88\x75\xc4\x09\x59\xb4\x3e\xa3\x18\xb6\x69\xae\xae\x8c\x7a\x49\xab\x70\x4b\x73\xf9\x57\xe9\x46\x47\xc8\x5d\xcf\x67\xd0\x62\xcd\x16\x9e\x02\xfd\xd2\x69\x84\xfc\x1f\x76\xad\x4e\xc5\x0a\x79\x93\xf6\x58\x20\xc3\xbe\x4d\xff\x16\xaa\x91\x4a\xa3\x73\x1d\xed\x88\x44\xec\x4e\x39\xba\x81\x72\x74\x03\xad\xa8\x8b\x7f\xcc\xd3\x1b\xe9\xeb\x04\x18\x96\x4f\xa2\x02\xf2\x4d\xf5\x2e\x2d\xa8\x83\x45\x4a\x5f\xa2\x70\xe5\xeb\x23\xeb\xb8\x47\x21\x1b\x8d\xda\xbf\xfe\x00\xfb\xab\x98\x66\x42\x05\xf8\xae\xf7\xab\x14\x68\x04\x13\xc9\x91\xf4\xe9\x41\xdf\x44\x3b\xfc\x23\x39\xe0\x3f\x54\x05\xb5\xd3\x2c\xde\xe9\xa1\x7f\x4f\x3d\xb4\x45\x11\x19\xa2\x7d\x5e\xfb\xbe\x43\x67\xf8\x54\x99\xeb\xba\xae\x3b\x74\xc3\x50\x34\x94\x1f\x38\xef\xaf\x24\x5e\xf7\xde\xe3\x1c\xe3\xec\x17\xcc\x51\xcb\xed\x0a\x58\xde\xe6\x9f\x31\xce\xa4\x0a\x9b\xc6\x91\xa5\x2a\x77\xdf\x1c\xdc\x2c\xbe\xca\xa6\x6e\xff\x8b\x82\x7d\xa2\xe0\xaa\xd9\x58\x01\x31\xd8\xe0\xb8\xed\xc2\xe7\x16\xa3\xe1\xba\xfd\xe9\x5f\x43\x95\xed\x71\xa6\x0f\x0a\xb9\x21\x82\xb1\x48\xf4\xf5\x23\x54\x40\x7e\x5b\x5f\x2e\xba\x86\xec\xe6\x03\xb8\xa5\xd0\x96\x50\x6d\xdc\x5b\x76\x5a\xde\x45\xb5\xfc\x95\x9c\x96\x7f\x49\x05\xbd\x13\x52\x66\x0f\x30\xea\xb9\x0a\x2c\x18\xa2\xd5\xc9\x93\x53\x9e\x94\x85\x12\x92\x44\xce\xcf\xe7\x9a\xdf\x04\xb6\x0e\xa0\x69\x0f\x14\x3a\x84\xf4\xd2\x4a\x07\x7f\x9f\xaa\xf8\x6d\xbc\xb8\x77\x7a\xba\xe3\xb9\x5d\x3d\xdd\xe4\x64\xbf\xd3\xd1\xff\xa3\x74\xf4\xe1\x0a\xf7\xb3\x28\x82\x37\x78\x03\x2d\xe1\x1f\xa5\xc2\x6d\x7e\x7a\x42\xde\x8c\xf2\xd4\xa1\x6f\x5f\x5b\xa1\xbe\xe6\x27\x25\xdd\x6a\x64\x3d\xcb\xab\x79\x6e\x3b\x50\xa5\x53\x1b\x1d\x90\x7a\x55\x45\x77\xf4\x64\x5d\xfd\x2a\xd1\x1d\xdf\x24\xfc\xe2\x00\x0e\xbe\x41\xf8\xc5\x41\x57\x27\x7f\xc1\xf0\x0b\xfd\xa9\xf3\x20\x31\x60\x9e\x41\x5f\x06\xe8\xac\x2c\x03\x2c\x95\x3d\x6e\x96\xcc\x53\x86\xe1\xbb\xed\x8d\x5b\x8c\xa4\x57\x49\x61\x6e\xdb\xee\xd0\xb3\x77\x67\x7a\xdc\x99\x1e\x25\xc8\x9d\xe9\x71\x67\x7a\xdc\x99\x1e\xe6\xb5\xfa\xcb\x5f\xee\xaf\xc9\x07\x27\x18\x6f\x4f\xbd\x52\x3d\x1e\x9c\xfd\x3b\xf2\xae\x5c\xfb\xd3\xf6\x32\x7d\x75\x97\x8e\x7c\xfa\x42\xa5\x07\xe4\x2b\x2c\x55\x04\xe9\x97\x16\x9a\x87\xf7\x8f\x07\xe5\xaf\x5a\x78\x8e\x6c\x1d\xc3\xf4\xe4\x04\x6f\xde\xa0\xd6\x84\x7f\x46\x55\x7e\xa3\x94\x74\x09\xd4\xe3\x69\x35\x79\x71\xf6\xf5\xa9\xde\x20\x46\xf9\x3a\xb9\xf2\xaf\x97\xbb\xbe\x8d\x59\x8a\x31\x3a\x92\xa6\xec\x9f\x5b\xff\x9b\xd1\xb6\x9f\xfa\x2f\xf3\x56\x9a\x8b\x87\x66\xc2\x6d\xf3\x0c\xcb\x53\x63\x9e\x34\x8e\x4e\xd0\xf2\x5f\x02\x9b\x23\x61\x8d\x32\x88\xe0\x29\x9c\xd6\xd8\x1d\x66\x70\x6a\x97\x38\xf8\xdf\x3c\x09\xde\xb4\xf5\x20\x4d\x14\xbd\x03\x8a\x5e\xec\xc2\xb2\xa7\x4a\xe9\xe9\x4d\xd4\xe5\x04\x6f\x7e\xec\x77\xec\xab\x9d\x44\x1c\x19\x6d\x8b\x71\xc9\x0d\x6c\xd3\xf5\xed\x5c\xf2\x5c\x08\xad\xa1\x8a\xf1\xdb\x0f\x27\xd7\x51\x8c\xf5\x3c\xdd\x29\xc6\x7f\xa8\x62\x3c\x28\x64\x46\xef\x42\x63\xf4\x6b\x76\xec\xd1\x52\xfe\xa0\xe0\xe3\x3d\x24\x66\x17\xec\x35\x74\x39\x69\x7c\xd7\x22\x21\x87\x69\xd9\x48\xe5\x27\x03\x24\xa7\xb9\xea\x36\xe9\xe6\x59\xf3\x9c\x69\x0c\x67\x0e\x0c\x3d\xeb\x04\x9a\x29\x15\x11\x47\x0a\x95\xf1\x1b\x34\xdc\x8f\xae\x47\x66\x31\x2a\x51\x1c\xd7\x50\x0c\xc5\xa0\x9b\xb7\x7c\x62\x61\x9e\x56\xff\x87\x3d\x16\x2b\x19\x52\xa0\x53\x27\x31\xdf\x3a\x8a\x5a\x33\x3c\xd9\x4f\x35\xa3\x92\x8d\xd2\x38\xac\x2c\x8c\x63\xfb\x1c\x1a\x6a\x0c\x75\x65\x8c\xab\x8c\xf9\x9b\xd8\x3b\x37\xdc\xab\xc3\x7f\x31\xa8\x0d\x78\xbf\x3d\xf7\x57\xb2\x82\xc6\x7d\x66\x90\xf9\x05\x9b\x34\x4f\x38\xae\x26\xd4\xb2\xbe\x8a\x33\x49\xbf\x55\x72\x71\xf9\xc3\x45\x56\x12\x45\x99\x63\x5e\xd4\xfc\xaf\xaa\x80\x39\xf8\xd8\x21\x85\x8a\x76\x30\x07\x1c\xa8\xb7\x2f\x5f\xe0\xca\x71\xfe\x95\xd9\xc3\x61\xae\x60\x02\xab\xe8\xcb\x97\xee\x94\xe2\x65\x36\x32\x09\xa9\xff\x14\x50\x8e\xc6\x99\xdd\x49\xa6\xd1\xbb\xbe\xf8\xb6\x08\x90\xb7\x4a\x25\x05\x2d\xce\xce\x01\x09\x67\x6b\x79\xd3\xba\xd2\xcb\xd6\x43\x18\x2d\x0f\xa5\xce\x97\x8d\xa2\xe8\xe5\x05\x4e\xf8\x6b\xc2\x38\x4e\x30\xf5\x0f\xb2\x34\x93\xe3\x3a\x18\x57\x16\xc8\xc2\xa2\xd2\xde\xa6\x49\x88\xfd\x83\x55\x9a\x9e\xcf\xce\xf0\x22\xa5\xf8\x47\xcc\x38\x4d\xb7\x07\x63\x58\xe4\x89\xca\x22\x5b\x97\x5c\xba\x53\xf9\x63\x29\x78\xef\x7e\x77\x56\x00\xa8\xfe\x7e\x8f\x24\x84\x13\x14\x3b\xb2\x74\xd6\x7e\xff\xa1\xfe\x09\xb6\x06\xd4\xdc\x92\xd3\x38\x58\x21\x56\x0a\xcb\xe9\x6f\xfe\xc7\xdf\x9e\x7e\x7e\x3c\x0a\x1e\x3d\x98\xaa\x04\x79\xb6\x28\x97\xd7\x58\x36\x06\xb1\xb6\x7a\x59\x9b\xfc\x9b\xd3\xf8\xbf\x10\x5b\xb9\xfa\xb1\x90\xc8\x5f\xdd\xe8\xe0\x4b\x8d\xc5\x22\x31\x78\xe4\x7f\x7a\xfa\xe5\xe1\x48\x67\x79\x17\x14\x3f\xfc\xfc\xa8\x20\xf9\xbb\xb6\xdf\x8a\xe8\x44\x26\x13\xd1\xfb\x9f\xa2\xc7\x36\x1e\x67\xb8\x9b\x21\x2c\xc2\x61\x1a\xe1\x0f\xef\x5e\xbd\x30\xbf\xaa\x68\x52\x13\xaa\xed\xe3\x60\xd0\x82\xc1\x29\xc3\xaf\x12\xae\x53\x2f\xab\x3d\xe4\xe0\x55\x07\x53\x57\x7e\x9f\x6a\x77\x6f\xf7\xff\x01\x00\x00\xff\xff\xb6\x05\xd8\xd6\xc0\x7f\x00\x00"), diff --git a/internal/webserver/handler-ui.go b/internal/webserver/handler-ui.go index da5ed14..f1bd0ba 100644 --- a/internal/webserver/handler-ui.go +++ b/internal/webserver/handler-ui.go @@ -98,10 +98,72 @@ func (h *handler) serveBookmarkContent(w http.ResponseWriter, r *http.Request, p } } - // Check if it has archive + // Check if it has archive. archivePath := fp.Join(h.DataDir, "archive", strID) if fileExists(archivePath) { bookmark.HasArchive = true + + // Open archive, look in cache first + var archive *warc.Archive + cacheData, found := h.ArchiveCache.Get(strID) + + if found { + archive = cacheData.(*warc.Archive) + } else { + archivePath := fp.Join(h.DataDir, "archive", strID) + archive, err = warc.Open(archivePath) + checkError(err) + + h.ArchiveCache.Set(strID, archive, 0) + } + + // Find all image and convert its source to use the archive URL. + createArchivalURL := func(archivalName string) string { + archivalURL := *r.URL + archivalURL.Path = path.Join("/", "bookmark", strID, "archive", archivalName) + return archivalURL.String() + } + + buffer := strings.NewReader(bookmark.HTML) + doc, err := goquery.NewDocumentFromReader(buffer) + checkError(err) + + doc.Find("img, picture, figure, source").Each(func(_ int, node *goquery.Selection) { + // Get the needed attributes + src, _ := node.Attr("src") + strSrcSets, _ := node.Attr("srcset") + + // Convert `src` attributes + if src != "" { + archivalName := getArchivalName(src) + if archivalName != "" && archive.HasResource(archivalName) { + node.SetAttr("src", createArchivalURL(archivalName)) + } + } + + // Split srcset by comma, then process it like any URLs + srcSets := strings.Split(strSrcSets, ",") + for i, srcSet := range srcSets { + srcSet = strings.TrimSpace(srcSet) + parts := strings.SplitN(srcSet, " ", 2) + if parts[0] == "" { + continue + } + + archivalName := getArchivalName(parts[0]) + if archivalName != "" && archive.HasResource(archivalName) { + archivalURL := createArchivalURL(archivalName) + srcSets[i] = strings.Replace(srcSets[i], parts[0], archivalURL, 1) + } + } + + if len(srcSets) > 0 { + node.SetAttr("srcset", strings.Join(srcSets, ",")) + } + }) + + bookmark.HTML, err = goquery.OuterHtml(doc.Selection) + checkError(err) } // Create template diff --git a/internal/webserver/utils.go b/internal/webserver/utils.go index ce6815b..8f0e903 100644 --- a/internal/webserver/utils.go +++ b/internal/webserver/utils.go @@ -16,6 +16,7 @@ import ( nurl "net/url" "os" fp "path/filepath" + "regexp" "strings" "syscall" "time" @@ -23,6 +24,8 @@ import ( "github.com/disintegration/imaging" ) +var rxRepeatedStrip = regexp.MustCompile(`(?i)-+`) + func serveFile(w http.ResponseWriter, filePath string, cache bool) error { // Open file src, err := assets.Open(filePath) @@ -184,6 +187,37 @@ func createTemplate(filename string, funcMap template.FuncMap) (*template.Templa return template.New(filename).Delims("$$", "$$").Funcs(funcMap).Parse(string(srcContent)) } +// getArchivalName converts an URL into an archival name. +func getArchivalName(src string) string { + archivalURL := src + + // Some URL have its query or path escaped, e.g. Wikipedia and Dev.to. + // For example, Wikipedia's stylesheet looks like this : + // load.php?lang=en&modules=ext.3d.styles%7Cext.cite.styles%7Cext.uls.interlanguage + // However, when browser download it, it will be registered as unescaped query : + // load.php?lang=en&modules=ext.3d.styles|ext.cite.styles|ext.uls.interlanguage + // So, for archival URL, we need to unescape the query and path first. + tmp, err := nurl.Parse(src) + if err == nil { + unescapedQuery, _ := nurl.QueryUnescape(tmp.RawQuery) + if unescapedQuery != "" { + tmp.RawQuery = unescapedQuery + } + + archivalURL = tmp.String() + archivalURL = strings.Replace(archivalURL, tmp.EscapedPath(), tmp.Path, 1) + } + + archivalURL = strings.ReplaceAll(archivalURL, "://", "/") + archivalURL = strings.ReplaceAll(archivalURL, "?", "-") + archivalURL = strings.ReplaceAll(archivalURL, "#", "-") + archivalURL = strings.ReplaceAll(archivalURL, "/", "-") + archivalURL = strings.ReplaceAll(archivalURL, " ", "-") + archivalURL = rxRepeatedStrip.ReplaceAllString(archivalURL, "-") + + return archivalURL +} + func checkError(err error) { if err == nil { return diff --git a/pkg/warc/reader.go b/pkg/warc/reader.go index 9cb2d3e..e1abe27 100644 --- a/pkg/warc/reader.go +++ b/pkg/warc/reader.go @@ -74,3 +74,20 @@ func (arc *Archive) Read(name string) ([]byte, string, error) { return content, strContentType, nil } + +// HasResource checks if the resource exists in archive. +func (arc *Archive) HasResource(name string) bool { + // Make sure name exists + if name == "" { + name = "archive-root" + } + + var exists bool + arc.db.View(func(tx *bbolt.Tx) error { + bucket := tx.Bucket([]byte(name)) + exists = bucket != nil + return nil + }) + + return exists +}