From 95cbe554bd24fe224e4bd3385f9c17ba5638762a Mon Sep 17 00:00:00 2001 From: Tankred Hase Date: Wed, 13 Mar 2013 16:58:46 +0100 Subject: [PATCH] initial commit --- LICENSE.txt | 1 + dev_server.js | 28 + res/Glyphicons License.txt | 21 + res/glyphicons/glyphicons_000_glass.png | Bin 0 -> 1358 bytes res/glyphicons/glyphicons_001_leaf.png | Bin 0 -> 1427 bytes res/glyphicons/glyphicons_002_dog.png | Bin 0 -> 1374 bytes res/glyphicons/glyphicons_003_user.png | Bin 0 -> 1283 bytes res/glyphicons/glyphicons_004_girl.png | Bin 0 -> 1339 bytes res/glyphicons/glyphicons_005_car.png | Bin 0 -> 1348 bytes res/glyphicons/glyphicons_006_user_add.png | Bin 0 -> 1335 bytes res/glyphicons/glyphicons_007_user_remove.png | Bin 0 -> 1302 bytes res/glyphicons/glyphicons_008_film.png | Bin 0 -> 1210 bytes res/glyphicons/glyphicons_009_magic.png | Bin 0 -> 1412 bytes res/glyphicons/glyphicons_010_envelope.png | Bin 0 -> 1236 bytes res/glyphicons/glyphicons_011_camera.png | Bin 0 -> 1299 bytes res/glyphicons/glyphicons_012_heart.png | Bin 0 -> 1363 bytes .../glyphicons_013_beach_umbrella.png | Bin 0 -> 1618 bytes res/glyphicons/glyphicons_014_train.png | Bin 0 -> 1472 bytes res/glyphicons/glyphicons_015_print.png | Bin 0 -> 1295 bytes res/glyphicons/glyphicons_016_bin.png | Bin 0 -> 1256 bytes res/glyphicons/glyphicons_017_music.png | Bin 0 -> 1344 bytes res/glyphicons/glyphicons_018_note.png | Bin 0 -> 1347 bytes res/glyphicons/glyphicons_019_heart_empty.png | Bin 0 -> 1429 bytes res/glyphicons/glyphicons_020_home.png | Bin 0 -> 1245 bytes res/glyphicons/glyphicons_021_snowflake.png | Bin 0 -> 1433 bytes res/glyphicons/glyphicons_022_fire.png | Bin 0 -> 1446 bytes res/glyphicons/glyphicons_023_magnet.png | Bin 0 -> 1316 bytes res/glyphicons/glyphicons_024_parents.png | Bin 0 -> 1386 bytes res/glyphicons/glyphicons_025_binoculars.png | Bin 0 -> 1345 bytes res/glyphicons/glyphicons_026_road.png | Bin 0 -> 1398 bytes res/glyphicons/glyphicons_027_search.png | Bin 0 -> 1421 bytes res/glyphicons/glyphicons_028_cars.png | Bin 0 -> 1526 bytes res/glyphicons/glyphicons_029_notes_2.png | Bin 0 -> 1255 bytes res/glyphicons/glyphicons_030_pencil.png | Bin 0 -> 1316 bytes res/glyphicons/glyphicons_031_bus.png | Bin 0 -> 1378 bytes res/glyphicons/glyphicons_032_wifi_alt.png | Bin 0 -> 1493 bytes res/glyphicons/glyphicons_033_luggage.png | Bin 0 -> 1256 bytes res/glyphicons/glyphicons_034_old_man.png | Bin 0 -> 1341 bytes res/glyphicons/glyphicons_035_woman.png | Bin 0 -> 1326 bytes res/glyphicons/glyphicons_036_file.png | Bin 0 -> 1213 bytes res/glyphicons/glyphicons_037_coins.png | Bin 0 -> 1536 bytes res/glyphicons/glyphicons_038_airplane.png | Bin 0 -> 1380 bytes res/glyphicons/glyphicons_039_notes.png | Bin 0 -> 1205 bytes res/glyphicons/glyphicons_040_stats.png | Bin 0 -> 1473 bytes res/glyphicons/glyphicons_041_charts.png | Bin 0 -> 1218 bytes res/glyphicons/glyphicons_042_pie_chart.png | Bin 0 -> 1459 bytes res/glyphicons/glyphicons_043_group.png | Bin 0 -> 1392 bytes res/glyphicons/glyphicons_044_keys.png | Bin 0 -> 1480 bytes res/glyphicons/glyphicons_045_calendar.png | Bin 0 -> 1215 bytes res/glyphicons/glyphicons_046_router.png | Bin 0 -> 1472 bytes .../glyphicons_047_camera_small.png | Bin 0 -> 1365 bytes res/glyphicons/glyphicons_048_dislikes.png | Bin 0 -> 1422 bytes res/glyphicons/glyphicons_049_star.png | Bin 0 -> 1369 bytes res/glyphicons/glyphicons_050_link.png | Bin 0 -> 1410 bytes res/glyphicons/glyphicons_051_eye_open.png | Bin 0 -> 1449 bytes res/glyphicons/glyphicons_052_eye_close.png | Bin 0 -> 1523 bytes res/glyphicons/glyphicons_053_alarm.png | Bin 0 -> 1493 bytes res/glyphicons/glyphicons_054_clock.png | Bin 0 -> 1376 bytes res/glyphicons/glyphicons_055_stopwatch.png | Bin 0 -> 1486 bytes res/glyphicons/glyphicons_056_projector.png | Bin 0 -> 1469 bytes res/glyphicons/glyphicons_057_history.png | Bin 0 -> 1491 bytes res/glyphicons/glyphicons_058_truck.png | Bin 0 -> 1428 bytes res/glyphicons/glyphicons_059_cargo.png | Bin 0 -> 1381 bytes res/glyphicons/glyphicons_060_compass.png | Bin 0 -> 1388 bytes res/glyphicons/glyphicons_061_keynote.png | Bin 0 -> 1395 bytes res/glyphicons/glyphicons_062_paperclip.png | Bin 0 -> 1391 bytes res/glyphicons/glyphicons_063_power.png | Bin 0 -> 1390 bytes res/glyphicons/glyphicons_064_lightbulb.png | Bin 0 -> 1553 bytes res/glyphicons/glyphicons_065_tag.png | Bin 0 -> 1300 bytes res/glyphicons/glyphicons_066_tags.png | Bin 0 -> 1318 bytes res/glyphicons/glyphicons_067_cleaning.png | Bin 0 -> 1330 bytes res/glyphicons/glyphicons_068_ruller.png | Bin 0 -> 1167 bytes res/glyphicons/glyphicons_069_gift.png | Bin 0 -> 1330 bytes res/glyphicons/glyphicons_070_umbrella.png | Bin 0 -> 1396 bytes res/glyphicons/glyphicons_071_book.png | Bin 0 -> 1254 bytes res/glyphicons/glyphicons_072_bookmark.png | Bin 0 -> 1210 bytes res/glyphicons/glyphicons_073_wifi.png | Bin 0 -> 1512 bytes res/glyphicons/glyphicons_074_cup.png | Bin 0 -> 1368 bytes res/glyphicons/glyphicons_075_stroller.png | Bin 0 -> 1410 bytes res/glyphicons/glyphicons_076_headphones.png | Bin 0 -> 1404 bytes res/glyphicons/glyphicons_077_headset.png | Bin 0 -> 1459 bytes .../glyphicons_078_warning_sign.png | Bin 0 -> 1407 bytes res/glyphicons/glyphicons_079_signal.png | Bin 0 -> 1216 bytes res/glyphicons/glyphicons_080_retweet.png | Bin 0 -> 1309 bytes res/glyphicons/glyphicons_081_refresh.png | Bin 0 -> 1445 bytes res/glyphicons/glyphicons_082_roundabout.png | Bin 0 -> 1492 bytes res/glyphicons/glyphicons_083_random.png | Bin 0 -> 1296 bytes res/glyphicons/glyphicons_084_heat.png | Bin 0 -> 1350 bytes res/glyphicons/glyphicons_085_repeat.png | Bin 0 -> 1421 bytes res/glyphicons/glyphicons_086_display.png | Bin 0 -> 1229 bytes res/glyphicons/glyphicons_087_log_book.png | Bin 0 -> 1322 bytes res/glyphicons/glyphicons_088_adress_book.png | Bin 0 -> 1328 bytes res/glyphicons/glyphicons_089_building.png | Bin 0 -> 1224 bytes res/glyphicons/glyphicons_090_eyedropper.png | Bin 0 -> 1413 bytes res/glyphicons/glyphicons_091_adjust.png | Bin 0 -> 1347 bytes res/glyphicons/glyphicons_092_tint.png | Bin 0 -> 1447 bytes res/glyphicons/glyphicons_093_crop.png | Bin 0 -> 1302 bytes .../glyphicons_094_vector_path_square.png | Bin 0 -> 1202 bytes .../glyphicons_095_vector_path_circle.png | Bin 0 -> 1479 bytes .../glyphicons_096_vector_path_polygon.png | Bin 0 -> 1508 bytes .../glyphicons_097_vector_path_line.png | Bin 0 -> 1274 bytes .../glyphicons_098_vector_path_curve.png | Bin 0 -> 1343 bytes .../glyphicons_099_vector_path_all.png | Bin 0 -> 1223 bytes res/glyphicons/glyphicons_100_font.png | Bin 0 -> 1501 bytes res/glyphicons/glyphicons_101_italic.png | Bin 0 -> 1306 bytes res/glyphicons/glyphicons_102_bold.png | Bin 0 -> 1344 bytes .../glyphicons_103_text_underline.png | Bin 0 -> 1241 bytes res/glyphicons/glyphicons_104_text_strike.png | Bin 0 -> 1233 bytes res/glyphicons/glyphicons_105_text_height.png | Bin 0 -> 1288 bytes res/glyphicons/glyphicons_106_text_width.png | Bin 0 -> 1296 bytes res/glyphicons/glyphicons_107_text_resize.png | Bin 0 -> 1289 bytes res/glyphicons/glyphicons_108_left_indent.png | Bin 0 -> 1280 bytes .../glyphicons_109_right_indent.png | Bin 0 -> 1283 bytes res/glyphicons/glyphicons_110_align_left.png | Bin 0 -> 1232 bytes .../glyphicons_111_align_center.png | Bin 0 -> 1225 bytes res/glyphicons/glyphicons_112_align_right.png | Bin 0 -> 1217 bytes res/glyphicons/glyphicons_113_justify.png | Bin 0 -> 1176 bytes res/glyphicons/glyphicons_114_list.png | Bin 0 -> 1194 bytes .../glyphicons_115_text_smaller.png | Bin 0 -> 1244 bytes res/glyphicons/glyphicons_116_text_bigger.png | Bin 0 -> 1268 bytes res/glyphicons/glyphicons_117_embed.png | Bin 0 -> 1330 bytes res/glyphicons/glyphicons_118_embed_close.png | Bin 0 -> 1477 bytes res/glyphicons/glyphicons_119_table.png | Bin 0 -> 1205 bytes .../glyphicons_120_message_full.png | Bin 0 -> 1344 bytes .../glyphicons_121_message_empty.png | Bin 0 -> 1279 bytes res/glyphicons/glyphicons_122_message_in.png | Bin 0 -> 1351 bytes res/glyphicons/glyphicons_123_message_out.png | Bin 0 -> 1337 bytes .../glyphicons_124_message_plus.png | Bin 0 -> 1380 bytes .../glyphicons_125_message_minus.png | Bin 0 -> 1371 bytes res/glyphicons/glyphicons_126_message_ban.png | Bin 0 -> 1400 bytes .../glyphicons_127_message_flag.png | Bin 0 -> 1312 bytes .../glyphicons_128_message_lock.png | Bin 0 -> 1310 bytes res/glyphicons/glyphicons_129_message_new.png | Bin 0 -> 1340 bytes res/glyphicons/glyphicons_130_inbox.png | Bin 0 -> 1316 bytes res/glyphicons/glyphicons_131_inbox_plus.png | Bin 0 -> 1397 bytes res/glyphicons/glyphicons_132_inbox_minus.png | Bin 0 -> 1395 bytes res/glyphicons/glyphicons_133_inbox_lock.png | Bin 0 -> 1353 bytes res/glyphicons/glyphicons_134_inbox_in.png | Bin 0 -> 1403 bytes res/glyphicons/glyphicons_135_inbox_out.png | Bin 0 -> 1368 bytes res/glyphicons/glyphicons_136_cogwheel.png | Bin 0 -> 1417 bytes res/glyphicons/glyphicons_137_cogwheels.png | Bin 0 -> 1514 bytes res/glyphicons/glyphicons_138_picture.png | Bin 0 -> 1318 bytes res/glyphicons/glyphicons_139_adjust_alt.png | Bin 0 -> 1258 bytes .../glyphicons_140_database_lock.png | Bin 0 -> 1310 bytes .../glyphicons_141_database_plus.png | Bin 0 -> 1348 bytes .../glyphicons_142_database_minus.png | Bin 0 -> 1336 bytes .../glyphicons_143_database_ban.png | Bin 0 -> 1373 bytes res/glyphicons/glyphicons_144_folder_open.png | Bin 0 -> 1330 bytes res/glyphicons/glyphicons_145_folder_plus.png | Bin 0 -> 1308 bytes .../glyphicons_146_folder_minus.png | Bin 0 -> 1298 bytes res/glyphicons/glyphicons_147_folder_lock.png | Bin 0 -> 1271 bytes res/glyphicons/glyphicons_148_folder_flag.png | Bin 0 -> 1267 bytes res/glyphicons/glyphicons_149_folder_new.png | Bin 0 -> 1293 bytes res/glyphicons/glyphicons_150_edit.png | Bin 0 -> 1343 bytes res/glyphicons/glyphicons_151_new_window.png | Bin 0 -> 1376 bytes res/glyphicons/glyphicons_152_check.png | Bin 0 -> 1298 bytes res/glyphicons/glyphicons_153_unchecked.png | Bin 0 -> 1203 bytes .../glyphicons_154_more_windows.png | Bin 0 -> 1283 bytes .../glyphicons_155_show_big_thumbnails.png | Bin 0 -> 1184 bytes .../glyphicons_156_show_thumbnails.png | Bin 0 -> 1192 bytes ...phicons_157_show_thumbnails_with_lines.png | Bin 0 -> 1190 bytes res/glyphicons/glyphicons_158_show_lines.png | Bin 0 -> 1171 bytes res/glyphicons/glyphicons_159_playlist.png | Bin 0 -> 1390 bytes res/glyphicons/glyphicons_160_imac.png | Bin 0 -> 1244 bytes res/glyphicons/glyphicons_161_macbook.png | Bin 0 -> 1197 bytes res/glyphicons/glyphicons_162_ipad.png | Bin 0 -> 1192 bytes res/glyphicons/glyphicons_163_iphone.png | Bin 0 -> 1200 bytes .../glyphicons_164_iphone_transfer.png | Bin 0 -> 1491 bytes .../glyphicons_165_iphone_exchange.png | Bin 0 -> 1553 bytes res/glyphicons/glyphicons_166_ipod.png | Bin 0 -> 1255 bytes .../glyphicons_167_ipod_shuffle.png | Bin 0 -> 1256 bytes res/glyphicons/glyphicons_168_ear_plugs.png | Bin 0 -> 1328 bytes res/glyphicons/glyphicons_169_phone.png | Bin 0 -> 1220 bytes .../glyphicons_170_step_backward.png | Bin 0 -> 1251 bytes .../glyphicons_171_fast_backward.png | Bin 0 -> 1280 bytes res/glyphicons/glyphicons_172_rewind.png | Bin 0 -> 1285 bytes res/glyphicons/glyphicons_173_play.png | Bin 0 -> 1216 bytes res/glyphicons/glyphicons_174_pause.png | Bin 0 -> 1168 bytes res/glyphicons/glyphicons_175_stop.png | Bin 0 -> 1148 bytes res/glyphicons/glyphicons_176_forward.png | Bin 0 -> 1278 bytes .../glyphicons_177_fast_forward.png | Bin 0 -> 1274 bytes .../glyphicons_178_step_forward.png | Bin 0 -> 1233 bytes res/glyphicons/glyphicons_179_eject.png | Bin 0 -> 1270 bytes .../glyphicons_180_facetime_video.png | Bin 0 -> 1228 bytes .../glyphicons_181_download_alt.png | Bin 0 -> 1289 bytes res/glyphicons/glyphicons_182_mute.png | Bin 0 -> 1263 bytes res/glyphicons/glyphicons_183_volume_down.png | Bin 0 -> 1269 bytes res/glyphicons/glyphicons_184_volume_up.png | Bin 0 -> 1411 bytes res/glyphicons/glyphicons_185_screenshot.png | Bin 0 -> 1457 bytes res/glyphicons/glyphicons_186_move.png | Bin 0 -> 1288 bytes res/glyphicons/glyphicons_187_more.png | Bin 0 -> 1213 bytes .../glyphicons_188_brightness_reduce.png | Bin 0 -> 1281 bytes .../glyphicons_189_brightness_increase.png | Bin 0 -> 1337 bytes res/glyphicons/glyphicons_190_circle_plus.png | Bin 0 -> 1346 bytes .../glyphicons_191_circle_minus.png | Bin 0 -> 1316 bytes .../glyphicons_192_circle_remove.png | Bin 0 -> 1374 bytes res/glyphicons/glyphicons_193_circle_ok.png | Bin 0 -> 1371 bytes .../glyphicons_194_circle_question_mark.png | Bin 0 -> 1427 bytes res/glyphicons/glyphicons_195_circle_info.png | Bin 0 -> 1364 bytes ...glyphicons_196_circle_exclamation_mark.png | Bin 0 -> 1364 bytes res/glyphicons/glyphicons_197_remove.png | Bin 0 -> 1410 bytes res/glyphicons/glyphicons_198_ok.png | Bin 0 -> 1432 bytes res/glyphicons/glyphicons_199_ban.png | Bin 0 -> 1413 bytes res/glyphicons/glyphicons_200_download.png | Bin 0 -> 1441 bytes res/glyphicons/glyphicons_201_upload.png | Bin 0 -> 1435 bytes .../glyphicons_202_shopping_cart.png | Bin 0 -> 1353 bytes res/glyphicons/glyphicons_203_lock.png | Bin 0 -> 1301 bytes res/glyphicons/glyphicons_204_unlock.png | Bin 0 -> 1306 bytes res/glyphicons/glyphicons_205_electricity.png | Bin 0 -> 1300 bytes res/glyphicons/glyphicons_206_ok_2.png | Bin 0 -> 1285 bytes res/glyphicons/glyphicons_207_remove_2.png | Bin 0 -> 1238 bytes res/glyphicons/glyphicons_208_cart_out.png | Bin 0 -> 1431 bytes res/glyphicons/glyphicons_209_cart_in.png | Bin 0 -> 1422 bytes res/glyphicons/glyphicons_210_left_arrow.png | Bin 0 -> 1227 bytes res/glyphicons/glyphicons_211_right_arrow.png | Bin 0 -> 1223 bytes res/glyphicons/glyphicons_212_down_arrow.png | Bin 0 -> 1275 bytes res/glyphicons/glyphicons_213_up_arrow.png | Bin 0 -> 1266 bytes .../glyphicons_214_resize_small.png | Bin 0 -> 1401 bytes res/glyphicons/glyphicons_215_resize_full.png | Bin 0 -> 1344 bytes .../glyphicons_216_circle_arrow_left.png | Bin 0 -> 1395 bytes .../glyphicons_217_circle_arrow_right.png | Bin 0 -> 1406 bytes .../glyphicons_218_circle_arrow_top.png | Bin 0 -> 1403 bytes .../glyphicons_219_circle_arrow_down.png | Bin 0 -> 1402 bytes res/glyphicons/glyphicons_220_play_button.png | Bin 0 -> 1393 bytes res/glyphicons/glyphicons_221_unshare.png | Bin 0 -> 1352 bytes res/glyphicons/glyphicons_222_share.png | Bin 0 -> 1342 bytes .../glyphicons_223_chevron-right.png | Bin 0 -> 1239 bytes .../glyphicons_224_chevron-left.png | Bin 0 -> 1231 bytes res/glyphicons/glyphicons_225_bluetooth.png | Bin 0 -> 1305 bytes res/glyphicons/glyphicons_226_euro.png | Bin 0 -> 1404 bytes res/glyphicons/glyphicons_227_usd.png | Bin 0 -> 1406 bytes res/glyphicons/glyphicons_228_gbp.png | Bin 0 -> 1391 bytes res/glyphicons/glyphicons_229_retweet_2.png | Bin 0 -> 1373 bytes res/glyphicons/glyphicons_230_moon.png | Bin 0 -> 1364 bytes res/glyphicons/glyphicons_231_sun.png | Bin 0 -> 1319 bytes res/glyphicons/glyphicons_232_cloud.png | Bin 0 -> 1296 bytes res/glyphicons/glyphicons_233_direction.png | Bin 0 -> 1353 bytes res/glyphicons/glyphicons_234_brush.png | Bin 0 -> 1349 bytes res/glyphicons/glyphicons_235_pen.png | Bin 0 -> 1319 bytes res/glyphicons/glyphicons_236_zoom_in.png | Bin 0 -> 1464 bytes res/glyphicons/glyphicons_237_zoom_out.png | Bin 0 -> 1444 bytes res/glyphicons/glyphicons_238_pin.png | Bin 0 -> 1310 bytes res/glyphicons/glyphicons_239_albums.png | Bin 0 -> 1327 bytes .../glyphicons_240_rotation_lock.png | Bin 0 -> 1455 bytes res/glyphicons/glyphicons_241_flash.png | Bin 0 -> 1308 bytes res/glyphicons/glyphicons_242_google_maps.png | Bin 0 -> 1353 bytes res/glyphicons/glyphicons_243_anchor.png | Bin 0 -> 1392 bytes .../glyphicons_244_conversation.png | Bin 0 -> 1384 bytes res/glyphicons/glyphicons_245_chat.png | Bin 0 -> 1325 bytes res/glyphicons/glyphicons_246_male.png | Bin 0 -> 1383 bytes res/glyphicons/glyphicons_247_female.png | Bin 0 -> 1351 bytes res/glyphicons/glyphicons_248_asterisk.png | Bin 0 -> 1281 bytes res/glyphicons/glyphicons_249_divide.png | Bin 0 -> 1210 bytes .../glyphicons_250_snorkel_diving.png | Bin 0 -> 1541 bytes .../glyphicons_251_scuba_diving.png | Bin 0 -> 1539 bytes .../glyphicons_252_oxygen_bottle.png | Bin 0 -> 1271 bytes res/glyphicons/glyphicons_253_fins.png | Bin 0 -> 1523 bytes res/glyphicons/glyphicons_254_fishes.png | Bin 0 -> 1431 bytes res/glyphicons/glyphicons_255_boat.png | Bin 0 -> 1461 bytes res/glyphicons/glyphicons_256_delete.png | Bin 0 -> 1284 bytes .../glyphicons_257_sheriffs_star.png | Bin 0 -> 1431 bytes res/glyphicons/glyphicons_258_qrcode.png | Bin 0 -> 1278 bytes res/glyphicons/glyphicons_259_barcode.png | Bin 0 -> 1179 bytes res/glyphicons/glyphicons_260_pool.png | Bin 0 -> 1376 bytes res/glyphicons/glyphicons_261_buoy.png | Bin 0 -> 1395 bytes res/glyphicons/glyphicons_262_spade.png | Bin 0 -> 1364 bytes res/glyphicons/glyphicons_263_bank.png | Bin 0 -> 1298 bytes res/glyphicons/glyphicons_264_vcard.png | Bin 0 -> 1310 bytes .../glyphicons_265_electrical_plug.png | Bin 0 -> 1322 bytes res/glyphicons/glyphicons_266_flag.png | Bin 0 -> 1280 bytes res/glyphicons/glyphicons_267_credit_card.png | Bin 0 -> 1201 bytes .../glyphicons_268_keyboard_wireless.png | Bin 0 -> 1221 bytes .../glyphicons_269_keyboard_wired.png | Bin 0 -> 1237 bytes res/glyphicons/glyphicons_270_shield.png | Bin 0 -> 1401 bytes res/glyphicons/glyphicons_271_ring.png | Bin 0 -> 1467 bytes res/glyphicons/glyphicons_272_cake.png | Bin 0 -> 1415 bytes res/glyphicons/glyphicons_273_drink.png | Bin 0 -> 1432 bytes res/glyphicons/glyphicons_274_beer.png | Bin 0 -> 1489 bytes res/glyphicons/glyphicons_275_fast_food.png | Bin 0 -> 1364 bytes res/glyphicons/glyphicons_276_cutlery.png | Bin 0 -> 1252 bytes res/glyphicons/glyphicons_277_pizza.png | Bin 0 -> 1526 bytes .../glyphicons_278_birthday_cake.png | Bin 0 -> 1584 bytes res/glyphicons/glyphicons_279_tablet.png | Bin 0 -> 1197 bytes res/glyphicons/glyphicons_280_settings.png | Bin 0 -> 1404 bytes res/glyphicons/glyphicons_281_bullets.png | Bin 0 -> 1303 bytes res/glyphicons/glyphicons_282_cardio.png | Bin 0 -> 1412 bytes res/glyphicons/glyphicons_283_t-shirt.png | Bin 0 -> 1312 bytes res/glyphicons/glyphicons_284_pants.png | Bin 0 -> 1296 bytes res/glyphicons/glyphicons_285_sweater.png | Bin 0 -> 1378 bytes res/glyphicons/glyphicons_286_fabric.png | Bin 0 -> 1204 bytes res/glyphicons/glyphicons_287_leather.png | Bin 0 -> 1368 bytes res/glyphicons/glyphicons_288_scissors.png | Bin 0 -> 1421 bytes res/glyphicons/glyphicons_289_bomb.png | Bin 0 -> 1410 bytes res/glyphicons/glyphicons_290_skull.png | Bin 0 -> 1407 bytes res/glyphicons/glyphicons_291_celebration.png | Bin 0 -> 1327 bytes res/glyphicons/glyphicons_292_tea_kettle.png | Bin 0 -> 1444 bytes .../glyphicons_293_french_press.png | Bin 0 -> 1343 bytes res/glyphicons/glyphicons_294_coffe_cup.png | Bin 0 -> 1350 bytes res/glyphicons/glyphicons_295_pot.png | Bin 0 -> 1290 bytes res/glyphicons/glyphicons_296_grater.png | Bin 0 -> 1249 bytes res/glyphicons/glyphicons_297_kettle.png | Bin 0 -> 1420 bytes res/glyphicons/glyphicons_298_hospital.png | Bin 0 -> 1213 bytes res/glyphicons/glyphicons_299_hospital_h.png | Bin 0 -> 1215 bytes res/glyphicons/glyphicons_300_microphone.png | Bin 0 -> 1360 bytes res/glyphicons/glyphicons_301_webcam.png | Bin 0 -> 1474 bytes ...phicons_302_temple_christianity_church.png | Bin 0 -> 1275 bytes .../glyphicons_303_temple_islam.png | Bin 0 -> 1343 bytes .../glyphicons_304_temple_hindu.png | Bin 0 -> 1295 bytes .../glyphicons_305_temple_buddhist.png | Bin 0 -> 1294 bytes res/glyphicons/glyphicons_306_bicycle.png | Bin 0 -> 1498 bytes .../glyphicons_307_life_preserver.png | Bin 0 -> 1400 bytes res/glyphicons/glyphicons_308_share_alt.png | Bin 0 -> 1302 bytes res/glyphicons/glyphicons_309_comments.png | Bin 0 -> 1210 bytes res/glyphicons/glyphicons_310_flower.png | Bin 0 -> 1427 bytes res/glyphicons/glyphicons_311_baseball.png | Bin 0 -> 1373 bytes res/glyphicons/glyphicons_312_rugby.png | Bin 0 -> 1577 bytes res/glyphicons/glyphicons_313_ax.png | Bin 0 -> 1356 bytes .../glyphicons_314_table_tennis.png | Bin 0 -> 1451 bytes res/glyphicons/glyphicons_315_bowling.png | Bin 0 -> 1345 bytes .../glyphicons_316_tree_conifer.png | Bin 0 -> 1252 bytes .../glyphicons_317_tree_deciduous.png | Bin 0 -> 1308 bytes res/glyphicons/glyphicons_318_more_items.png | Bin 0 -> 1208 bytes res/glyphicons/glyphicons_319_sort.png | Bin 0 -> 1251 bytes res/glyphicons/glyphicons_320_filter.png | Bin 0 -> 1345 bytes res/glyphicons/glyphicons_321_gamepad.png | Bin 0 -> 1396 bytes .../glyphicons_322_playing_dices.png | Bin 0 -> 1322 bytes res/glyphicons/glyphicons_323_calculator.png | Bin 0 -> 1256 bytes res/glyphicons/glyphicons_324_tie.png | Bin 0 -> 1306 bytes res/glyphicons/glyphicons_325_wallet.png | Bin 0 -> 1306 bytes res/glyphicons/glyphicons_326_piano.png | Bin 0 -> 1211 bytes res/glyphicons/glyphicons_327_sampler.png | Bin 0 -> 1720 bytes res/glyphicons/glyphicons_328_podium.png | Bin 0 -> 1338 bytes res/glyphicons/glyphicons_329_soccer_ball.png | Bin 0 -> 1502 bytes res/glyphicons/glyphicons_330_blog.png | Bin 0 -> 1271 bytes res/glyphicons/glyphicons_331_dashboard.png | Bin 0 -> 1570 bytes res/glyphicons/glyphicons_332_certificate.png | Bin 0 -> 1398 bytes res/glyphicons/glyphicons_333_bell.png | Bin 0 -> 1394 bytes res/glyphicons/glyphicons_334_candle.png | Bin 0 -> 1344 bytes res/glyphicons/glyphicons_335_pushpin.png | Bin 0 -> 1349 bytes .../glyphicons_336_iphone_shake.png | Bin 0 -> 1398 bytes res/glyphicons/glyphicons_337_pin_flag.png | Bin 0 -> 1308 bytes res/glyphicons/glyphicons_338_turtle.png | Bin 0 -> 1347 bytes res/glyphicons/glyphicons_339_rabbit.png | Bin 0 -> 1442 bytes res/glyphicons/glyphicons_340_globe.png | Bin 0 -> 1463 bytes res/glyphicons/glyphicons_341_briefcase.png | Bin 0 -> 1294 bytes res/glyphicons/glyphicons_342_hdd.png | Bin 0 -> 1334 bytes res/glyphicons/glyphicons_343_thumbs_up.png | Bin 0 -> 1434 bytes res/glyphicons/glyphicons_344_thumbs_down.png | Bin 0 -> 1439 bytes res/glyphicons/glyphicons_345_hand_right.png | Bin 0 -> 1386 bytes res/glyphicons/glyphicons_346_hand_left.png | Bin 0 -> 1407 bytes res/glyphicons/glyphicons_347_hand_up.png | Bin 0 -> 1469 bytes res/glyphicons/glyphicons_348_hand_down.png | Bin 0 -> 1462 bytes res/glyphicons/glyphicons_349_fullscreen.png | Bin 0 -> 1292 bytes .../glyphicons_350_shopping_bag.png | Bin 0 -> 1317 bytes res/glyphicons/glyphicons_351_book_open.png | Bin 0 -> 1362 bytes res/glyphicons/glyphicons_352_nameplate.png | Bin 0 -> 1326 bytes .../glyphicons_353_nameplate_alt.png | Bin 0 -> 1301 bytes res/glyphicons/glyphicons_354_vases.png | Bin 0 -> 1426 bytes res/glyphicons/glyphicons_355_bullhorn.png | Bin 0 -> 1390 bytes res/glyphicons/glyphicons_356_dumbbell.png | Bin 0 -> 1249 bytes res/glyphicons/glyphicons_357_suitcase.png | Bin 0 -> 1273 bytes res/glyphicons/glyphicons_358_file_import.png | Bin 0 -> 1324 bytes res/glyphicons/glyphicons_359_file_export.png | Bin 0 -> 1321 bytes res/glyphicons/glyphicons_360_bug.png | Bin 0 -> 1394 bytes res/glyphicons/glyphicons_361_crown.png | Bin 0 -> 1475 bytes res/glyphicons/glyphicons_362_smoking.png | Bin 0 -> 1449 bytes .../glyphicons_363_cloud_upload.png | Bin 0 -> 1381 bytes .../glyphicons_364_cloud_download.png | Bin 0 -> 1409 bytes res/glyphicons/glyphicons_365_restart.png | Bin 0 -> 1465 bytes .../glyphicons_366_security_camera.png | Bin 0 -> 1419 bytes res/glyphicons/glyphicons_367_expand.png | Bin 0 -> 1275 bytes res/glyphicons/glyphicons_368_collapse.png | Bin 0 -> 1273 bytes .../glyphicons_369_collapse_top.png | Bin 0 -> 1274 bytes res/glyphicons/glyphicons_370_globe_af.png | Bin 0 -> 1492 bytes res/glyphicons/glyphicons_371_global.png | Bin 0 -> 1390 bytes res/glyphicons/glyphicons_372_spray.png | Bin 0 -> 1272 bytes res/glyphicons/glyphicons_373_nails.png | Bin 0 -> 1393 bytes res/glyphicons/glyphicons_374_claw_hammer.png | Bin 0 -> 1370 bytes .../glyphicons_375_classic_hammer.png | Bin 0 -> 1355 bytes res/glyphicons/glyphicons_376_hand_saw.png | Bin 0 -> 1410 bytes res/glyphicons/glyphicons_377_riflescope.png | Bin 0 -> 1451 bytes .../glyphicons_378_electrical_socket_eu.png | Bin 0 -> 1376 bytes .../glyphicons_379_electrical_socket_us.png | Bin 0 -> 1377 bytes res/glyphicons/glyphicons_380_pinterest.png | Bin 0 -> 1379 bytes res/glyphicons/glyphicons_381_dropbox.png | Bin 0 -> 1396 bytes res/glyphicons/glyphicons_382_google_plus.png | Bin 0 -> 1425 bytes res/glyphicons/glyphicons_383_jolicloud.png | Bin 0 -> 1283 bytes res/glyphicons/glyphicons_384_yahoo.png | Bin 0 -> 1315 bytes res/glyphicons/glyphicons_385_blogger.png | Bin 0 -> 1351 bytes res/glyphicons/glyphicons_386_picasa.png | Bin 0 -> 1370 bytes res/glyphicons/glyphicons_387_amazon.png | Bin 0 -> 1421 bytes res/glyphicons/glyphicons_388_tumblr.png | Bin 0 -> 1302 bytes res/glyphicons/glyphicons_389_wordpress.png | Bin 0 -> 1459 bytes res/glyphicons/glyphicons_390_instapaper.png | Bin 0 -> 1210 bytes res/glyphicons/glyphicons_391_evernote.png | Bin 0 -> 1377 bytes res/glyphicons/glyphicons_392_xing.png | Bin 0 -> 1355 bytes res/glyphicons/glyphicons_393_zootool.png | Bin 0 -> 1358 bytes res/glyphicons/glyphicons_394_dribbble.png | Bin 0 -> 1490 bytes res/glyphicons/glyphicons_395_deviantart.png | Bin 0 -> 1298 bytes .../glyphicons_396_read_it_later.png | Bin 0 -> 1243 bytes res/glyphicons/glyphicons_397_linked_in.png | Bin 0 -> 1298 bytes res/glyphicons/glyphicons_398_forrst.png | Bin 0 -> 1363 bytes res/glyphicons/glyphicons_399_pinboard.png | Bin 0 -> 1278 bytes res/glyphicons/glyphicons_400_behance.png | Bin 0 -> 1329 bytes res/glyphicons/glyphicons_401_github.png | Bin 0 -> 1302 bytes res/glyphicons/glyphicons_402_youtube.png | Bin 0 -> 1405 bytes res/glyphicons/glyphicons_403_skitch.png | Bin 0 -> 1361 bytes res/glyphicons/glyphicons_404_4square.png | Bin 0 -> 1519 bytes res/glyphicons/glyphicons_405_quora.png | Bin 0 -> 1377 bytes res/glyphicons/glyphicons_406_badoo.png | Bin 0 -> 1390 bytes res/glyphicons/glyphicons_407_spotify.png | Bin 0 -> 1405 bytes res/glyphicons/glyphicons_408_stumbleupon.png | Bin 0 -> 1356 bytes res/glyphicons/glyphicons_409_readability.png | Bin 0 -> 1364 bytes res/glyphicons/glyphicons_410_facebook.png | Bin 0 -> 1242 bytes res/glyphicons/glyphicons_411_twitter.png | Bin 0 -> 1366 bytes res/glyphicons/glyphicons_412_instagram.png | Bin 0 -> 1469 bytes .../glyphicons_413_posterous_spaces.png | Bin 0 -> 1252 bytes res/glyphicons/glyphicons_414_vimeo.png | Bin 0 -> 1374 bytes res/glyphicons/glyphicons_415_flickr.png | Bin 0 -> 1333 bytes res/glyphicons/glyphicons_416_last_fm.png | Bin 0 -> 1400 bytes res/glyphicons/glyphicons_417_rss.png | Bin 0 -> 1394 bytes res/glyphicons/glyphicons_418_skype.png | Bin 0 -> 1430 bytes res/glyphicons/glyphicons_419_e-mail.png | Bin 0 -> 1422 bytes src/css/icons/glyphicons_003_user.png | Bin 0 -> 1283 bytes src/css/icons/glyphicons_010_envelope.png | Bin 0 -> 1236 bytes src/css/icons/glyphicons_016_bin.png | Bin 0 -> 1256 bytes src/css/icons/glyphicons_030_pencil.png | Bin 0 -> 1316 bytes src/css/icons/glyphicons_034_old_man.png | Bin 0 -> 1341 bytes src/css/icons/glyphicons_130_inbox.png | Bin 0 -> 1316 bytes src/css/icons/glyphicons_135_inbox_out.png | Bin 0 -> 1368 bytes src/css/images/ajax-loader.gif | Bin 0 -> 7825 bytes src/css/images/icons-18-black.png | Bin 0 -> 1767 bytes src/css/images/icons-18-white.png | Bin 0 -> 1806 bytes src/css/images/icons-36-black.png | Bin 0 -> 3611 bytes src/css/images/icons-36-white.png | Bin 0 -> 3648 bytes src/css/images/key-128.png | Bin 0 -> 15826 bytes src/css/jquery.mobile-1.2.0.min.css | 2 + src/css/styles.css | 37 + src/index.html | 69 + src/js/app-config.js | 23 + src/js/app-router.js | 86 + src/js/crypto/aes-batch-worker.js | 43 + src/js/crypto/aes-cbc.js | 48 + src/js/crypto/aes-ccm.js | 51 + src/js/crypto/aes-gcm.js | 51 + src/js/crypto/aes-worker.js | 41 + src/js/crypto/crypto.js | 223 + src/js/crypto/pbkdf2-worker.js | 36 + src/js/crypto/pbkdf2.js | 22 + src/js/crypto/pgp.js | 322 + src/js/crypto/util.js | 145 + src/js/dao/cloudstorage-dao.js | 110 + src/js/dao/devicestorage.js | 54 + src/js/dao/email-dao.js | 110 + src/js/dao/lawnchair-dao.js | 105 + src/js/dao/localstorage-dao.js | 56 + src/js/jqm-config.js | 15 + src/js/loader.js | 69 + src/js/model/account-model.js | 25 + src/js/model/email-model.js | 28 + src/js/model/folder-model.js | 22 + src/js/view/accounts-view.js | 13 + src/js/view/compose-view.js | 13 + src/js/view/folderlist-view.js | 13 + src/js/view/login-view.js | 41 + src/js/view/messagelist-view.js | 64 + src/js/view/messagelistitem-view.js | 20 + src/js/view/read-view.js | 31 + src/lib/SQLitePlugin.js | 309 + src/lib/backbone-0.9.10.min.js | 42 + src/lib/cordova-2.5.0.js | 6083 +++++++++++++++++ src/lib/crypto-js/aes.js | 213 + src/lib/crypto-js/cipher-core.js | 863 +++ src/lib/crypto-js/core.js | 712 ++ src/lib/crypto-js/enc-base64.js | 109 + src/lib/crypto-js/hmac.js | 131 + src/lib/crypto-js/pbkdf2.js | 131 + src/lib/crypto-js/sha1.js | 136 + src/lib/jquery-1.8.2.min.js | 2 + src/lib/jquery.mobile-1.2.0.min.js | 2 + src/lib/jsbn/LICENSE.txt | 40 + src/lib/jsbn/base64.js | 71 + src/lib/jsbn/ec.js | 316 + src/lib/jsbn/jsbn.js | 559 ++ src/lib/jsbn/jsbn2.js | 656 ++ src/lib/jsbn/prng4.js | 45 + src/lib/jsbn/rng.js | 68 + src/lib/jsbn/rsa.js | 112 + src/lib/jsbn/rsa2.js | 132 + src/lib/jsbn/sec.js | 157 + .../lawnchair-adapter-indexed-db-git.js | 379 + .../lawnchair-adapter-webkit-sqlite-git.js | 184 + src/lib/lawnchair/lawnchair-git.min.js | 14 + src/lib/openpgp.min.js | 470 ++ src/lib/sjcl/aes.js | 208 + src/lib/sjcl/bitArray.js | 187 + src/lib/sjcl/bn.js | 534 ++ src/lib/sjcl/cbc.js | 115 + src/lib/sjcl/ccm.js | 185 + src/lib/sjcl/codecBase64.js | 63 + src/lib/sjcl/codecBytes.js | 37 + src/lib/sjcl/codecHex.js | 30 + src/lib/sjcl/codecString.js | 39 + src/lib/sjcl/convenience.js | 279 + src/lib/sjcl/ecc.js | 380 + src/lib/sjcl/gcm.js | 183 + src/lib/sjcl/hmac.js | 39 + src/lib/sjcl/ocb2.js | 171 + src/lib/sjcl/pbkdf2.js | 54 + src/lib/sjcl/random.js | 400 ++ src/lib/sjcl/sha1.js | 165 + src/lib/sjcl/sha256.js | 216 + src/lib/sjcl/sha512.js | 348 + src/lib/sjcl/sjcl.js | 73 + src/lib/sjcl/srp.js | 113 + src/lib/underscore-1.4.4.min.js | 1 + src/lib/uuid.js | 253 + src/tpl/accounts.html | 40 + src/tpl/compose.html | 11 + src/tpl/folderlist.html | 39 + src/tpl/login.html | 15 + src/tpl/messagelist.html | 14 + src/tpl/messagelistitem.html | 6 + src/tpl/read.html | 25 + test/ecc-test.js | 21 + test/integration/cloudstorage-dao-test.js | 71 + test/integration/index.html | 74 + test/pgp-test.js | 70 + test/qunit-1.11.0.css | 244 + test/qunit-1.11.0.js | 2152 ++++++ test/test-data.js | 53 + test/unit/aes-test.js | 57 + test/unit/crypto-test.js | 114 + test/unit/devicestorage-test.js | 73 + test/unit/email-dao-test.js | 70 + test/unit/index.html | 81 + test/unit/lawnchair-dao-test.js | 62 + test/unit/localstorage-dao-test.js | 36 + test/unit/util-test.js | 50 + 539 files changed, 21425 insertions(+) create mode 100644 LICENSE.txt create mode 100644 dev_server.js create mode 100644 res/Glyphicons License.txt create mode 100644 res/glyphicons/glyphicons_000_glass.png create mode 100644 res/glyphicons/glyphicons_001_leaf.png create mode 100644 res/glyphicons/glyphicons_002_dog.png create mode 100644 res/glyphicons/glyphicons_003_user.png create mode 100644 res/glyphicons/glyphicons_004_girl.png create mode 100644 res/glyphicons/glyphicons_005_car.png create mode 100644 res/glyphicons/glyphicons_006_user_add.png create mode 100644 res/glyphicons/glyphicons_007_user_remove.png create mode 100644 res/glyphicons/glyphicons_008_film.png create mode 100644 res/glyphicons/glyphicons_009_magic.png create mode 100644 res/glyphicons/glyphicons_010_envelope.png create mode 100644 res/glyphicons/glyphicons_011_camera.png create mode 100644 res/glyphicons/glyphicons_012_heart.png create mode 100644 res/glyphicons/glyphicons_013_beach_umbrella.png create mode 100644 res/glyphicons/glyphicons_014_train.png create mode 100644 res/glyphicons/glyphicons_015_print.png create mode 100644 res/glyphicons/glyphicons_016_bin.png create mode 100644 res/glyphicons/glyphicons_017_music.png create mode 100644 res/glyphicons/glyphicons_018_note.png create mode 100644 res/glyphicons/glyphicons_019_heart_empty.png create mode 100644 res/glyphicons/glyphicons_020_home.png create mode 100644 res/glyphicons/glyphicons_021_snowflake.png create mode 100644 res/glyphicons/glyphicons_022_fire.png create mode 100644 res/glyphicons/glyphicons_023_magnet.png create mode 100644 res/glyphicons/glyphicons_024_parents.png create mode 100644 res/glyphicons/glyphicons_025_binoculars.png create mode 100644 res/glyphicons/glyphicons_026_road.png create mode 100644 res/glyphicons/glyphicons_027_search.png create mode 100644 res/glyphicons/glyphicons_028_cars.png create mode 100644 res/glyphicons/glyphicons_029_notes_2.png create mode 100644 res/glyphicons/glyphicons_030_pencil.png create mode 100644 res/glyphicons/glyphicons_031_bus.png create mode 100644 res/glyphicons/glyphicons_032_wifi_alt.png create mode 100644 res/glyphicons/glyphicons_033_luggage.png create mode 100644 res/glyphicons/glyphicons_034_old_man.png create mode 100644 res/glyphicons/glyphicons_035_woman.png create mode 100644 res/glyphicons/glyphicons_036_file.png create mode 100644 res/glyphicons/glyphicons_037_coins.png create mode 100644 res/glyphicons/glyphicons_038_airplane.png create mode 100644 res/glyphicons/glyphicons_039_notes.png create mode 100644 res/glyphicons/glyphicons_040_stats.png create mode 100644 res/glyphicons/glyphicons_041_charts.png create mode 100644 res/glyphicons/glyphicons_042_pie_chart.png create mode 100644 res/glyphicons/glyphicons_043_group.png create mode 100644 res/glyphicons/glyphicons_044_keys.png create mode 100644 res/glyphicons/glyphicons_045_calendar.png create mode 100644 res/glyphicons/glyphicons_046_router.png create mode 100644 res/glyphicons/glyphicons_047_camera_small.png create mode 100644 res/glyphicons/glyphicons_048_dislikes.png create mode 100644 res/glyphicons/glyphicons_049_star.png create mode 100644 res/glyphicons/glyphicons_050_link.png create mode 100644 res/glyphicons/glyphicons_051_eye_open.png create mode 100644 res/glyphicons/glyphicons_052_eye_close.png create mode 100644 res/glyphicons/glyphicons_053_alarm.png create mode 100644 res/glyphicons/glyphicons_054_clock.png create mode 100644 res/glyphicons/glyphicons_055_stopwatch.png create mode 100644 res/glyphicons/glyphicons_056_projector.png create mode 100644 res/glyphicons/glyphicons_057_history.png create mode 100644 res/glyphicons/glyphicons_058_truck.png create mode 100644 res/glyphicons/glyphicons_059_cargo.png create mode 100644 res/glyphicons/glyphicons_060_compass.png create mode 100644 res/glyphicons/glyphicons_061_keynote.png create mode 100644 res/glyphicons/glyphicons_062_paperclip.png create mode 100644 res/glyphicons/glyphicons_063_power.png create mode 100644 res/glyphicons/glyphicons_064_lightbulb.png create mode 100644 res/glyphicons/glyphicons_065_tag.png create mode 100644 res/glyphicons/glyphicons_066_tags.png create mode 100644 res/glyphicons/glyphicons_067_cleaning.png create mode 100644 res/glyphicons/glyphicons_068_ruller.png create mode 100644 res/glyphicons/glyphicons_069_gift.png create mode 100644 res/glyphicons/glyphicons_070_umbrella.png create mode 100644 res/glyphicons/glyphicons_071_book.png create mode 100644 res/glyphicons/glyphicons_072_bookmark.png create mode 100644 res/glyphicons/glyphicons_073_wifi.png create mode 100644 res/glyphicons/glyphicons_074_cup.png create mode 100644 res/glyphicons/glyphicons_075_stroller.png create mode 100644 res/glyphicons/glyphicons_076_headphones.png create mode 100644 res/glyphicons/glyphicons_077_headset.png create mode 100644 res/glyphicons/glyphicons_078_warning_sign.png create mode 100644 res/glyphicons/glyphicons_079_signal.png create mode 100644 res/glyphicons/glyphicons_080_retweet.png create mode 100644 res/glyphicons/glyphicons_081_refresh.png create mode 100644 res/glyphicons/glyphicons_082_roundabout.png create mode 100644 res/glyphicons/glyphicons_083_random.png create mode 100644 res/glyphicons/glyphicons_084_heat.png create mode 100644 res/glyphicons/glyphicons_085_repeat.png create mode 100644 res/glyphicons/glyphicons_086_display.png create mode 100644 res/glyphicons/glyphicons_087_log_book.png create mode 100644 res/glyphicons/glyphicons_088_adress_book.png create mode 100644 res/glyphicons/glyphicons_089_building.png create mode 100644 res/glyphicons/glyphicons_090_eyedropper.png create mode 100644 res/glyphicons/glyphicons_091_adjust.png create mode 100644 res/glyphicons/glyphicons_092_tint.png create mode 100644 res/glyphicons/glyphicons_093_crop.png create mode 100644 res/glyphicons/glyphicons_094_vector_path_square.png create mode 100644 res/glyphicons/glyphicons_095_vector_path_circle.png create mode 100644 res/glyphicons/glyphicons_096_vector_path_polygon.png create mode 100644 res/glyphicons/glyphicons_097_vector_path_line.png create mode 100644 res/glyphicons/glyphicons_098_vector_path_curve.png create mode 100644 res/glyphicons/glyphicons_099_vector_path_all.png create mode 100644 res/glyphicons/glyphicons_100_font.png create mode 100644 res/glyphicons/glyphicons_101_italic.png create mode 100644 res/glyphicons/glyphicons_102_bold.png create mode 100644 res/glyphicons/glyphicons_103_text_underline.png create mode 100644 res/glyphicons/glyphicons_104_text_strike.png create mode 100644 res/glyphicons/glyphicons_105_text_height.png create mode 100644 res/glyphicons/glyphicons_106_text_width.png create mode 100644 res/glyphicons/glyphicons_107_text_resize.png create mode 100644 res/glyphicons/glyphicons_108_left_indent.png create mode 100644 res/glyphicons/glyphicons_109_right_indent.png create mode 100644 res/glyphicons/glyphicons_110_align_left.png create mode 100644 res/glyphicons/glyphicons_111_align_center.png create mode 100644 res/glyphicons/glyphicons_112_align_right.png create mode 100644 res/glyphicons/glyphicons_113_justify.png create mode 100644 res/glyphicons/glyphicons_114_list.png create mode 100644 res/glyphicons/glyphicons_115_text_smaller.png create mode 100644 res/glyphicons/glyphicons_116_text_bigger.png create mode 100644 res/glyphicons/glyphicons_117_embed.png create mode 100644 res/glyphicons/glyphicons_118_embed_close.png create mode 100644 res/glyphicons/glyphicons_119_table.png create mode 100644 res/glyphicons/glyphicons_120_message_full.png create mode 100644 res/glyphicons/glyphicons_121_message_empty.png create mode 100644 res/glyphicons/glyphicons_122_message_in.png create mode 100644 res/glyphicons/glyphicons_123_message_out.png create mode 100644 res/glyphicons/glyphicons_124_message_plus.png create mode 100644 res/glyphicons/glyphicons_125_message_minus.png create mode 100644 res/glyphicons/glyphicons_126_message_ban.png create mode 100644 res/glyphicons/glyphicons_127_message_flag.png create mode 100644 res/glyphicons/glyphicons_128_message_lock.png create mode 100644 res/glyphicons/glyphicons_129_message_new.png create mode 100644 res/glyphicons/glyphicons_130_inbox.png create mode 100644 res/glyphicons/glyphicons_131_inbox_plus.png create mode 100644 res/glyphicons/glyphicons_132_inbox_minus.png create mode 100644 res/glyphicons/glyphicons_133_inbox_lock.png create mode 100644 res/glyphicons/glyphicons_134_inbox_in.png create mode 100644 res/glyphicons/glyphicons_135_inbox_out.png create mode 100644 res/glyphicons/glyphicons_136_cogwheel.png create mode 100644 res/glyphicons/glyphicons_137_cogwheels.png create mode 100644 res/glyphicons/glyphicons_138_picture.png create mode 100644 res/glyphicons/glyphicons_139_adjust_alt.png create mode 100644 res/glyphicons/glyphicons_140_database_lock.png create mode 100644 res/glyphicons/glyphicons_141_database_plus.png create mode 100644 res/glyphicons/glyphicons_142_database_minus.png create mode 100644 res/glyphicons/glyphicons_143_database_ban.png create mode 100644 res/glyphicons/glyphicons_144_folder_open.png create mode 100644 res/glyphicons/glyphicons_145_folder_plus.png create mode 100644 res/glyphicons/glyphicons_146_folder_minus.png create mode 100644 res/glyphicons/glyphicons_147_folder_lock.png create mode 100644 res/glyphicons/glyphicons_148_folder_flag.png create mode 100644 res/glyphicons/glyphicons_149_folder_new.png create mode 100644 res/glyphicons/glyphicons_150_edit.png create mode 100644 res/glyphicons/glyphicons_151_new_window.png create mode 100644 res/glyphicons/glyphicons_152_check.png create mode 100644 res/glyphicons/glyphicons_153_unchecked.png create mode 100644 res/glyphicons/glyphicons_154_more_windows.png create mode 100644 res/glyphicons/glyphicons_155_show_big_thumbnails.png create mode 100644 res/glyphicons/glyphicons_156_show_thumbnails.png create mode 100644 res/glyphicons/glyphicons_157_show_thumbnails_with_lines.png create mode 100644 res/glyphicons/glyphicons_158_show_lines.png create mode 100644 res/glyphicons/glyphicons_159_playlist.png create mode 100644 res/glyphicons/glyphicons_160_imac.png create mode 100644 res/glyphicons/glyphicons_161_macbook.png create mode 100644 res/glyphicons/glyphicons_162_ipad.png create mode 100644 res/glyphicons/glyphicons_163_iphone.png create mode 100644 res/glyphicons/glyphicons_164_iphone_transfer.png create mode 100644 res/glyphicons/glyphicons_165_iphone_exchange.png create mode 100644 res/glyphicons/glyphicons_166_ipod.png create mode 100644 res/glyphicons/glyphicons_167_ipod_shuffle.png create mode 100644 res/glyphicons/glyphicons_168_ear_plugs.png create mode 100644 res/glyphicons/glyphicons_169_phone.png create mode 100644 res/glyphicons/glyphicons_170_step_backward.png create mode 100644 res/glyphicons/glyphicons_171_fast_backward.png create mode 100644 res/glyphicons/glyphicons_172_rewind.png create mode 100644 res/glyphicons/glyphicons_173_play.png create mode 100644 res/glyphicons/glyphicons_174_pause.png create mode 100644 res/glyphicons/glyphicons_175_stop.png create mode 100644 res/glyphicons/glyphicons_176_forward.png create mode 100644 res/glyphicons/glyphicons_177_fast_forward.png create mode 100644 res/glyphicons/glyphicons_178_step_forward.png create mode 100644 res/glyphicons/glyphicons_179_eject.png create mode 100644 res/glyphicons/glyphicons_180_facetime_video.png create mode 100644 res/glyphicons/glyphicons_181_download_alt.png create mode 100644 res/glyphicons/glyphicons_182_mute.png create mode 100644 res/glyphicons/glyphicons_183_volume_down.png create mode 100644 res/glyphicons/glyphicons_184_volume_up.png create mode 100644 res/glyphicons/glyphicons_185_screenshot.png create mode 100644 res/glyphicons/glyphicons_186_move.png create mode 100644 res/glyphicons/glyphicons_187_more.png create mode 100644 res/glyphicons/glyphicons_188_brightness_reduce.png create mode 100644 res/glyphicons/glyphicons_189_brightness_increase.png create mode 100644 res/glyphicons/glyphicons_190_circle_plus.png create mode 100644 res/glyphicons/glyphicons_191_circle_minus.png create mode 100644 res/glyphicons/glyphicons_192_circle_remove.png create mode 100644 res/glyphicons/glyphicons_193_circle_ok.png create mode 100644 res/glyphicons/glyphicons_194_circle_question_mark.png create mode 100644 res/glyphicons/glyphicons_195_circle_info.png create mode 100644 res/glyphicons/glyphicons_196_circle_exclamation_mark.png create mode 100644 res/glyphicons/glyphicons_197_remove.png create mode 100644 res/glyphicons/glyphicons_198_ok.png create mode 100644 res/glyphicons/glyphicons_199_ban.png create mode 100644 res/glyphicons/glyphicons_200_download.png create mode 100644 res/glyphicons/glyphicons_201_upload.png create mode 100644 res/glyphicons/glyphicons_202_shopping_cart.png create mode 100644 res/glyphicons/glyphicons_203_lock.png create mode 100644 res/glyphicons/glyphicons_204_unlock.png create mode 100644 res/glyphicons/glyphicons_205_electricity.png create mode 100644 res/glyphicons/glyphicons_206_ok_2.png create mode 100644 res/glyphicons/glyphicons_207_remove_2.png create mode 100644 res/glyphicons/glyphicons_208_cart_out.png create mode 100644 res/glyphicons/glyphicons_209_cart_in.png create mode 100644 res/glyphicons/glyphicons_210_left_arrow.png create mode 100644 res/glyphicons/glyphicons_211_right_arrow.png create mode 100644 res/glyphicons/glyphicons_212_down_arrow.png create mode 100644 res/glyphicons/glyphicons_213_up_arrow.png create mode 100644 res/glyphicons/glyphicons_214_resize_small.png create mode 100644 res/glyphicons/glyphicons_215_resize_full.png create mode 100644 res/glyphicons/glyphicons_216_circle_arrow_left.png create mode 100644 res/glyphicons/glyphicons_217_circle_arrow_right.png create mode 100644 res/glyphicons/glyphicons_218_circle_arrow_top.png create mode 100644 res/glyphicons/glyphicons_219_circle_arrow_down.png create mode 100644 res/glyphicons/glyphicons_220_play_button.png create mode 100644 res/glyphicons/glyphicons_221_unshare.png create mode 100644 res/glyphicons/glyphicons_222_share.png create mode 100644 res/glyphicons/glyphicons_223_chevron-right.png create mode 100644 res/glyphicons/glyphicons_224_chevron-left.png create mode 100644 res/glyphicons/glyphicons_225_bluetooth.png create mode 100644 res/glyphicons/glyphicons_226_euro.png create mode 100644 res/glyphicons/glyphicons_227_usd.png create mode 100644 res/glyphicons/glyphicons_228_gbp.png create mode 100644 res/glyphicons/glyphicons_229_retweet_2.png create mode 100644 res/glyphicons/glyphicons_230_moon.png create mode 100644 res/glyphicons/glyphicons_231_sun.png create mode 100644 res/glyphicons/glyphicons_232_cloud.png create mode 100644 res/glyphicons/glyphicons_233_direction.png create mode 100644 res/glyphicons/glyphicons_234_brush.png create mode 100644 res/glyphicons/glyphicons_235_pen.png create mode 100644 res/glyphicons/glyphicons_236_zoom_in.png create mode 100644 res/glyphicons/glyphicons_237_zoom_out.png create mode 100644 res/glyphicons/glyphicons_238_pin.png create mode 100644 res/glyphicons/glyphicons_239_albums.png create mode 100644 res/glyphicons/glyphicons_240_rotation_lock.png create mode 100644 res/glyphicons/glyphicons_241_flash.png create mode 100644 res/glyphicons/glyphicons_242_google_maps.png create mode 100644 res/glyphicons/glyphicons_243_anchor.png create mode 100644 res/glyphicons/glyphicons_244_conversation.png create mode 100644 res/glyphicons/glyphicons_245_chat.png create mode 100644 res/glyphicons/glyphicons_246_male.png create mode 100644 res/glyphicons/glyphicons_247_female.png create mode 100644 res/glyphicons/glyphicons_248_asterisk.png create mode 100644 res/glyphicons/glyphicons_249_divide.png create mode 100644 res/glyphicons/glyphicons_250_snorkel_diving.png create mode 100644 res/glyphicons/glyphicons_251_scuba_diving.png create mode 100644 res/glyphicons/glyphicons_252_oxygen_bottle.png create mode 100644 res/glyphicons/glyphicons_253_fins.png create mode 100644 res/glyphicons/glyphicons_254_fishes.png create mode 100644 res/glyphicons/glyphicons_255_boat.png create mode 100644 res/glyphicons/glyphicons_256_delete.png create mode 100644 res/glyphicons/glyphicons_257_sheriffs_star.png create mode 100644 res/glyphicons/glyphicons_258_qrcode.png create mode 100644 res/glyphicons/glyphicons_259_barcode.png create mode 100644 res/glyphicons/glyphicons_260_pool.png create mode 100644 res/glyphicons/glyphicons_261_buoy.png create mode 100644 res/glyphicons/glyphicons_262_spade.png create mode 100644 res/glyphicons/glyphicons_263_bank.png create mode 100644 res/glyphicons/glyphicons_264_vcard.png create mode 100644 res/glyphicons/glyphicons_265_electrical_plug.png create mode 100644 res/glyphicons/glyphicons_266_flag.png create mode 100644 res/glyphicons/glyphicons_267_credit_card.png create mode 100644 res/glyphicons/glyphicons_268_keyboard_wireless.png create mode 100644 res/glyphicons/glyphicons_269_keyboard_wired.png create mode 100644 res/glyphicons/glyphicons_270_shield.png create mode 100644 res/glyphicons/glyphicons_271_ring.png create mode 100644 res/glyphicons/glyphicons_272_cake.png create mode 100644 res/glyphicons/glyphicons_273_drink.png create mode 100644 res/glyphicons/glyphicons_274_beer.png create mode 100644 res/glyphicons/glyphicons_275_fast_food.png create mode 100644 res/glyphicons/glyphicons_276_cutlery.png create mode 100644 res/glyphicons/glyphicons_277_pizza.png create mode 100644 res/glyphicons/glyphicons_278_birthday_cake.png create mode 100644 res/glyphicons/glyphicons_279_tablet.png create mode 100644 res/glyphicons/glyphicons_280_settings.png create mode 100644 res/glyphicons/glyphicons_281_bullets.png create mode 100644 res/glyphicons/glyphicons_282_cardio.png create mode 100644 res/glyphicons/glyphicons_283_t-shirt.png create mode 100644 res/glyphicons/glyphicons_284_pants.png create mode 100644 res/glyphicons/glyphicons_285_sweater.png create mode 100644 res/glyphicons/glyphicons_286_fabric.png create mode 100644 res/glyphicons/glyphicons_287_leather.png create mode 100644 res/glyphicons/glyphicons_288_scissors.png create mode 100644 res/glyphicons/glyphicons_289_bomb.png create mode 100644 res/glyphicons/glyphicons_290_skull.png create mode 100644 res/glyphicons/glyphicons_291_celebration.png create mode 100644 res/glyphicons/glyphicons_292_tea_kettle.png create mode 100644 res/glyphicons/glyphicons_293_french_press.png create mode 100644 res/glyphicons/glyphicons_294_coffe_cup.png create mode 100644 res/glyphicons/glyphicons_295_pot.png create mode 100644 res/glyphicons/glyphicons_296_grater.png create mode 100644 res/glyphicons/glyphicons_297_kettle.png create mode 100644 res/glyphicons/glyphicons_298_hospital.png create mode 100644 res/glyphicons/glyphicons_299_hospital_h.png create mode 100644 res/glyphicons/glyphicons_300_microphone.png create mode 100644 res/glyphicons/glyphicons_301_webcam.png create mode 100644 res/glyphicons/glyphicons_302_temple_christianity_church.png create mode 100644 res/glyphicons/glyphicons_303_temple_islam.png create mode 100644 res/glyphicons/glyphicons_304_temple_hindu.png create mode 100644 res/glyphicons/glyphicons_305_temple_buddhist.png create mode 100644 res/glyphicons/glyphicons_306_bicycle.png create mode 100644 res/glyphicons/glyphicons_307_life_preserver.png create mode 100644 res/glyphicons/glyphicons_308_share_alt.png create mode 100644 res/glyphicons/glyphicons_309_comments.png create mode 100644 res/glyphicons/glyphicons_310_flower.png create mode 100644 res/glyphicons/glyphicons_311_baseball.png create mode 100644 res/glyphicons/glyphicons_312_rugby.png create mode 100644 res/glyphicons/glyphicons_313_ax.png create mode 100644 res/glyphicons/glyphicons_314_table_tennis.png create mode 100644 res/glyphicons/glyphicons_315_bowling.png create mode 100644 res/glyphicons/glyphicons_316_tree_conifer.png create mode 100644 res/glyphicons/glyphicons_317_tree_deciduous.png create mode 100644 res/glyphicons/glyphicons_318_more_items.png create mode 100644 res/glyphicons/glyphicons_319_sort.png create mode 100644 res/glyphicons/glyphicons_320_filter.png create mode 100644 res/glyphicons/glyphicons_321_gamepad.png create mode 100644 res/glyphicons/glyphicons_322_playing_dices.png create mode 100644 res/glyphicons/glyphicons_323_calculator.png create mode 100644 res/glyphicons/glyphicons_324_tie.png create mode 100644 res/glyphicons/glyphicons_325_wallet.png create mode 100644 res/glyphicons/glyphicons_326_piano.png create mode 100644 res/glyphicons/glyphicons_327_sampler.png create mode 100644 res/glyphicons/glyphicons_328_podium.png create mode 100644 res/glyphicons/glyphicons_329_soccer_ball.png create mode 100644 res/glyphicons/glyphicons_330_blog.png create mode 100644 res/glyphicons/glyphicons_331_dashboard.png create mode 100644 res/glyphicons/glyphicons_332_certificate.png create mode 100644 res/glyphicons/glyphicons_333_bell.png create mode 100644 res/glyphicons/glyphicons_334_candle.png create mode 100644 res/glyphicons/glyphicons_335_pushpin.png create mode 100644 res/glyphicons/glyphicons_336_iphone_shake.png create mode 100644 res/glyphicons/glyphicons_337_pin_flag.png create mode 100644 res/glyphicons/glyphicons_338_turtle.png create mode 100644 res/glyphicons/glyphicons_339_rabbit.png create mode 100644 res/glyphicons/glyphicons_340_globe.png create mode 100644 res/glyphicons/glyphicons_341_briefcase.png create mode 100644 res/glyphicons/glyphicons_342_hdd.png create mode 100644 res/glyphicons/glyphicons_343_thumbs_up.png create mode 100644 res/glyphicons/glyphicons_344_thumbs_down.png create mode 100644 res/glyphicons/glyphicons_345_hand_right.png create mode 100644 res/glyphicons/glyphicons_346_hand_left.png create mode 100644 res/glyphicons/glyphicons_347_hand_up.png create mode 100644 res/glyphicons/glyphicons_348_hand_down.png create mode 100644 res/glyphicons/glyphicons_349_fullscreen.png create mode 100644 res/glyphicons/glyphicons_350_shopping_bag.png create mode 100644 res/glyphicons/glyphicons_351_book_open.png create mode 100644 res/glyphicons/glyphicons_352_nameplate.png create mode 100644 res/glyphicons/glyphicons_353_nameplate_alt.png create mode 100644 res/glyphicons/glyphicons_354_vases.png create mode 100644 res/glyphicons/glyphicons_355_bullhorn.png create mode 100644 res/glyphicons/glyphicons_356_dumbbell.png create mode 100644 res/glyphicons/glyphicons_357_suitcase.png create mode 100644 res/glyphicons/glyphicons_358_file_import.png create mode 100644 res/glyphicons/glyphicons_359_file_export.png create mode 100644 res/glyphicons/glyphicons_360_bug.png create mode 100644 res/glyphicons/glyphicons_361_crown.png create mode 100644 res/glyphicons/glyphicons_362_smoking.png create mode 100644 res/glyphicons/glyphicons_363_cloud_upload.png create mode 100644 res/glyphicons/glyphicons_364_cloud_download.png create mode 100644 res/glyphicons/glyphicons_365_restart.png create mode 100644 res/glyphicons/glyphicons_366_security_camera.png create mode 100644 res/glyphicons/glyphicons_367_expand.png create mode 100644 res/glyphicons/glyphicons_368_collapse.png create mode 100644 res/glyphicons/glyphicons_369_collapse_top.png create mode 100644 res/glyphicons/glyphicons_370_globe_af.png create mode 100644 res/glyphicons/glyphicons_371_global.png create mode 100644 res/glyphicons/glyphicons_372_spray.png create mode 100644 res/glyphicons/glyphicons_373_nails.png create mode 100644 res/glyphicons/glyphicons_374_claw_hammer.png create mode 100644 res/glyphicons/glyphicons_375_classic_hammer.png create mode 100644 res/glyphicons/glyphicons_376_hand_saw.png create mode 100644 res/glyphicons/glyphicons_377_riflescope.png create mode 100644 res/glyphicons/glyphicons_378_electrical_socket_eu.png create mode 100644 res/glyphicons/glyphicons_379_electrical_socket_us.png create mode 100644 res/glyphicons/glyphicons_380_pinterest.png create mode 100644 res/glyphicons/glyphicons_381_dropbox.png create mode 100644 res/glyphicons/glyphicons_382_google_plus.png create mode 100644 res/glyphicons/glyphicons_383_jolicloud.png create mode 100644 res/glyphicons/glyphicons_384_yahoo.png create mode 100644 res/glyphicons/glyphicons_385_blogger.png create mode 100644 res/glyphicons/glyphicons_386_picasa.png create mode 100644 res/glyphicons/glyphicons_387_amazon.png create mode 100644 res/glyphicons/glyphicons_388_tumblr.png create mode 100644 res/glyphicons/glyphicons_389_wordpress.png create mode 100644 res/glyphicons/glyphicons_390_instapaper.png create mode 100644 res/glyphicons/glyphicons_391_evernote.png create mode 100644 res/glyphicons/glyphicons_392_xing.png create mode 100644 res/glyphicons/glyphicons_393_zootool.png create mode 100644 res/glyphicons/glyphicons_394_dribbble.png create mode 100644 res/glyphicons/glyphicons_395_deviantart.png create mode 100644 res/glyphicons/glyphicons_396_read_it_later.png create mode 100644 res/glyphicons/glyphicons_397_linked_in.png create mode 100644 res/glyphicons/glyphicons_398_forrst.png create mode 100644 res/glyphicons/glyphicons_399_pinboard.png create mode 100644 res/glyphicons/glyphicons_400_behance.png create mode 100644 res/glyphicons/glyphicons_401_github.png create mode 100644 res/glyphicons/glyphicons_402_youtube.png create mode 100644 res/glyphicons/glyphicons_403_skitch.png create mode 100644 res/glyphicons/glyphicons_404_4square.png create mode 100644 res/glyphicons/glyphicons_405_quora.png create mode 100644 res/glyphicons/glyphicons_406_badoo.png create mode 100644 res/glyphicons/glyphicons_407_spotify.png create mode 100644 res/glyphicons/glyphicons_408_stumbleupon.png create mode 100644 res/glyphicons/glyphicons_409_readability.png create mode 100644 res/glyphicons/glyphicons_410_facebook.png create mode 100644 res/glyphicons/glyphicons_411_twitter.png create mode 100644 res/glyphicons/glyphicons_412_instagram.png create mode 100644 res/glyphicons/glyphicons_413_posterous_spaces.png create mode 100644 res/glyphicons/glyphicons_414_vimeo.png create mode 100644 res/glyphicons/glyphicons_415_flickr.png create mode 100644 res/glyphicons/glyphicons_416_last_fm.png create mode 100644 res/glyphicons/glyphicons_417_rss.png create mode 100644 res/glyphicons/glyphicons_418_skype.png create mode 100644 res/glyphicons/glyphicons_419_e-mail.png create mode 100644 src/css/icons/glyphicons_003_user.png create mode 100644 src/css/icons/glyphicons_010_envelope.png create mode 100644 src/css/icons/glyphicons_016_bin.png create mode 100644 src/css/icons/glyphicons_030_pencil.png create mode 100644 src/css/icons/glyphicons_034_old_man.png create mode 100644 src/css/icons/glyphicons_130_inbox.png create mode 100644 src/css/icons/glyphicons_135_inbox_out.png create mode 100644 src/css/images/ajax-loader.gif create mode 100644 src/css/images/icons-18-black.png create mode 100644 src/css/images/icons-18-white.png create mode 100644 src/css/images/icons-36-black.png create mode 100644 src/css/images/icons-36-white.png create mode 100755 src/css/images/key-128.png create mode 100644 src/css/jquery.mobile-1.2.0.min.css create mode 100644 src/css/styles.css create mode 100755 src/index.html create mode 100644 src/js/app-config.js create mode 100644 src/js/app-router.js create mode 100644 src/js/crypto/aes-batch-worker.js create mode 100644 src/js/crypto/aes-cbc.js create mode 100644 src/js/crypto/aes-ccm.js create mode 100644 src/js/crypto/aes-gcm.js create mode 100644 src/js/crypto/aes-worker.js create mode 100644 src/js/crypto/crypto.js create mode 100644 src/js/crypto/pbkdf2-worker.js create mode 100644 src/js/crypto/pbkdf2.js create mode 100644 src/js/crypto/pgp.js create mode 100644 src/js/crypto/util.js create mode 100644 src/js/dao/cloudstorage-dao.js create mode 100644 src/js/dao/devicestorage.js create mode 100644 src/js/dao/email-dao.js create mode 100644 src/js/dao/lawnchair-dao.js create mode 100644 src/js/dao/localstorage-dao.js create mode 100644 src/js/jqm-config.js create mode 100644 src/js/loader.js create mode 100644 src/js/model/account-model.js create mode 100644 src/js/model/email-model.js create mode 100644 src/js/model/folder-model.js create mode 100644 src/js/view/accounts-view.js create mode 100644 src/js/view/compose-view.js create mode 100644 src/js/view/folderlist-view.js create mode 100644 src/js/view/login-view.js create mode 100644 src/js/view/messagelist-view.js create mode 100644 src/js/view/messagelistitem-view.js create mode 100644 src/js/view/read-view.js create mode 100644 src/lib/SQLitePlugin.js create mode 100644 src/lib/backbone-0.9.10.min.js create mode 100755 src/lib/cordova-2.5.0.js create mode 100755 src/lib/crypto-js/aes.js create mode 100755 src/lib/crypto-js/cipher-core.js create mode 100755 src/lib/crypto-js/core.js create mode 100755 src/lib/crypto-js/enc-base64.js create mode 100755 src/lib/crypto-js/hmac.js create mode 100755 src/lib/crypto-js/pbkdf2.js create mode 100755 src/lib/crypto-js/sha1.js create mode 100644 src/lib/jquery-1.8.2.min.js create mode 100644 src/lib/jquery.mobile-1.2.0.min.js create mode 100644 src/lib/jsbn/LICENSE.txt create mode 100644 src/lib/jsbn/base64.js create mode 100644 src/lib/jsbn/ec.js create mode 100644 src/lib/jsbn/jsbn.js create mode 100644 src/lib/jsbn/jsbn2.js create mode 100644 src/lib/jsbn/prng4.js create mode 100644 src/lib/jsbn/rng.js create mode 100644 src/lib/jsbn/rsa.js create mode 100644 src/lib/jsbn/rsa2.js create mode 100644 src/lib/jsbn/sec.js create mode 100644 src/lib/lawnchair/lawnchair-adapter-indexed-db-git.js create mode 100644 src/lib/lawnchair/lawnchair-adapter-webkit-sqlite-git.js create mode 100644 src/lib/lawnchair/lawnchair-git.min.js create mode 100644 src/lib/openpgp.min.js create mode 100644 src/lib/sjcl/aes.js create mode 100644 src/lib/sjcl/bitArray.js create mode 100644 src/lib/sjcl/bn.js create mode 100644 src/lib/sjcl/cbc.js create mode 100644 src/lib/sjcl/ccm.js create mode 100644 src/lib/sjcl/codecBase64.js create mode 100644 src/lib/sjcl/codecBytes.js create mode 100644 src/lib/sjcl/codecHex.js create mode 100644 src/lib/sjcl/codecString.js create mode 100644 src/lib/sjcl/convenience.js create mode 100644 src/lib/sjcl/ecc.js create mode 100644 src/lib/sjcl/gcm.js create mode 100644 src/lib/sjcl/hmac.js create mode 100644 src/lib/sjcl/ocb2.js create mode 100644 src/lib/sjcl/pbkdf2.js create mode 100644 src/lib/sjcl/random.js create mode 100644 src/lib/sjcl/sha1.js create mode 100644 src/lib/sjcl/sha256.js create mode 100644 src/lib/sjcl/sha512.js create mode 100644 src/lib/sjcl/sjcl.js create mode 100644 src/lib/sjcl/srp.js create mode 100644 src/lib/underscore-1.4.4.min.js create mode 100644 src/lib/uuid.js create mode 100644 src/tpl/accounts.html create mode 100644 src/tpl/compose.html create mode 100644 src/tpl/folderlist.html create mode 100644 src/tpl/login.html create mode 100644 src/tpl/messagelist.html create mode 100644 src/tpl/messagelistitem.html create mode 100644 src/tpl/read.html create mode 100644 test/ecc-test.js create mode 100644 test/integration/cloudstorage-dao-test.js create mode 100644 test/integration/index.html create mode 100644 test/pgp-test.js create mode 100644 test/qunit-1.11.0.css create mode 100644 test/qunit-1.11.0.js create mode 100644 test/test-data.js create mode 100644 test/unit/aes-test.js create mode 100644 test/unit/crypto-test.js create mode 100644 test/unit/devicestorage-test.js create mode 100644 test/unit/email-dao-test.js create mode 100644 test/unit/index.html create mode 100644 test/unit/lawnchair-dao-test.js create mode 100644 test/unit/localstorage-dao-test.js create mode 100644 test/unit/util-test.js diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..a81871d --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1 @@ +Copyright © 2013, Whiteout Networks GmbH. All rights reserved. diff --git a/dev_server.js b/dev_server.js new file mode 100644 index 0000000..d59865e --- /dev/null +++ b/dev_server.js @@ -0,0 +1,28 @@ +/** + * A simple development server for serving static files using node.js + * Required packages: nodejs, npm + * 1. npm install express + * 2. node dev_server.js 8080 + * 3. browse to http://localhost:8080 + */ + +var express = require('express'), + port, app; + +// set port +if (process.argv[2]) { + port = process.argv[2]; +} else { + port = 8080; +} + +// Server setup +app = express(); +app.configure(function(){ + app.use(app.router); + app.use(express['static'](__dirname)); +}); + +// start server +app.listen(port); +console.log(' > listening on http://localhost:' + port); \ No newline at end of file diff --git a/res/Glyphicons License.txt b/res/Glyphicons License.txt new file mode 100644 index 0000000..e313377 --- /dev/null +++ b/res/Glyphicons License.txt @@ -0,0 +1,21 @@ +THANK YOU FOR USING GLYPHICONS! + +If you would like to be among the first ones to hear about all the news, follow @glyphicons on Twitter. + +LICENSE: +------------------- +GLYPHICONS FREE are released under the Creative Commons Attribution 3.0 Unported (CC BY 3.0). The Glyphicons FREE can be used both commercially and for personal use, but you must always add a link to www.glyphicons.com in a prominent place (e.g. the footer of a website), include the CC-BY license and the reference to www.glyphicons.com on every page using Glyphicons. + +Glyphicons Halflings are also a part of Bootstrap by Twitter, and are released under the same Apache 2.0 license as Bootstrap. While you are not required to include attribution on your Bootstrap-based projects, I'd certainly appreciate a visibile link back to glyphicons.com in any place you find appropriate (footer, docs, etc). + +All logos and trademarks in social icons are the property of the respective trademark owners.® + +CONTACT: +------------------- +Web: http://glyphicons.com/ +Email: glyphicons@gmail.com +Twitter: http://twitter.com/glyphicons + +If you want to use the icons without restrictions, please buy any version on www.glyphicons.com, thank you. + +Jan Kovařík \ No newline at end of file diff --git a/res/glyphicons/glyphicons_000_glass.png b/res/glyphicons/glyphicons_000_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..26fff92e6d0a64600c4fb24f983a4d99be5c2b2e GIT binary patch literal 1358 zcmaJ>TZ|J`7@jS1TWDOnCLlpFnKcAu+qraSI-Ru3b}nU`(6x4(SRYKB&YZU6&dr%q z+Fe6z$ogQ^>_XI_Bq%1vpavf>u7>CmA5b57FPohodq9>6lXQvrC+ zQfr_HRDJrHuR#jKR$VblWmwMd5j4k&sew+cWw{8AVX0j$SJkEf#4Dg?*lFVG$wdM; z^fd7}o2T-w1nS24j0YxXCQ91Ol$O+qU88uaB_IP9fGXayOxqV)X`*9SK>I*U5_m@i zPNj(@QssOBmmCk^Y%CttD4NDOE=G^A97hl13`H{}g>EiNj|eO$FbTYS5y+dTSB0XS z?fOEeG*O4p6-ct#Y{r`LnB&z*I+;ucHW(&~G@|~r4b@iE_J?{FWZ-L_;X=c)@xY>5 zaT+j9Af`(pSZ+SQY}od@i9#tOTdGUaF^aUTAg+$K4~yV7jXP@lrD+$CMc_LPPeb*n z4)wq&cXxNxQ`EI(J-6YRoj7%k1SYV64Sht4?l3~kg-1OD6;L&0M{5LMb8?z!Gz?wf zScQuxDURo)EKSQ|hEo`s=M$2Wk;D-y5jYDBtOO!SOh?#wLZrnw%TQc`rfG#qCbM#e z%kn%gCs;lq_OLnIhpMfCz-fRrZe!`YVg<B9tR-y?Kk~lIa6w# z{r%Oc@GLbjyYTK?k@>><@v%^3A{3c#-}4ZDH1bH_+H5L z?>nHL`QWDz`_b^tJ(pMieEzq~_qMN<50zPX{mkhPukP*pYIZ-@-gW?7x_|7%)+6U? zlMjykz3;oZUv93MkHQTXU952H#`A-jUx(U}Kbzm~5t~lf7fn(`sMoj18;0sk6zf_?!!KX&%U&AaexZ` Na5-f{J}y4B|35j`!s-A3 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_001_leaf.png b/res/glyphicons/glyphicons_001_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..c59381bd8df5d47ffdb26e8b13ca79a353be13cc GIT binary patch literal 1427 zcmaJ>Z)_7~7{5wF=FCtQwRD@mk1O=r7 zps_611rmT03NKE9Mg&=NLrkTObbL3%D_Iw3*|^NC3egDCxWiOAz8e^52j~*z0QTqD zISdtr0M<^$iMSdD8F5#S29iB3DZZzh_Y2sLCbZFHpo1(hIMmEavd)+Rtmv14vZcl` zv}j^<2e4&Q>3AC&Ry2T8E{~HZND`%K7gIgtzyh7uMAZ-# z8MQoe9ZJp!V36r@3RyKCUvVt!r9#1y;U=fzq>I3_Su3xiwQeN99U6DF)>8!);0d5B zIgN+?=-gZe!`j_DP}xx6SM1cBCKdA(cpOL|3uHrwq{t#8$ed}_MA$%1Vii7TeT}gJ zESD1nhNdF4$4}5cIvgcQHWZ{IZr11Xh9kjnsGjgz!7K->fl%WTAlBmzks%L76SS8k z$%xzUkFr5J>ht+nFXi)w%Gj8!8=TAoE2xDP?_jBWVwtc8I787=iXxRqr7fcvik?wa zG@PW-t#OVQWlOQm>ST#4(8T>fh-yj}Ew+LY@4|o}eQ?mcFh@5`pM)o$CmL~wf}SuH ziO>{Q!V0TOR?Zv({)dftX*NiBSb_?Z7!Jt@JY$H41WGd+l#G%jiPoGj5+`@Tf;a`x z$>k&iYwD5;YDVN0S#QLx8I(i_C`!v%e3i$ddezXDE#W3u;>rrb!^#o^8E&oySM-S) z^=AaJHN@Cp%A6T}=X&2E;-S~3j^2K2-LdM0iGFo|Z*|?l>Mz#S*&43Ye%9Yxy@2G0 zyxtAr%TG;x+u%T({(bM#?&;LH?%?;#)Lk7Iog24hY;Rtx3bJO~rd*1$M{^d`9*peXf ziR9tSfq|N}dk0TH;GE5j|Bjs<&V7ASK0EZ}{QH0J{blfxeWS?>&F9o5-;ojfj~{*K zm@NFd_{sFcw?Fv2V}d(e0JAfbb@Azqe;oM6_R^-s-k}fAR74}Erf2ufk@n73^S-9@ zUtPG__o{v5z_#hXjy!gK!dT!2PUwB1zo^KvlnqPml_omNo`>mCJ o{qze-vwp-e2#{NsqStCCkQ0@UichDHn%3WBEYiZB3O#@5Kd~V0Gynhq literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_002_dog.png b/res/glyphicons/glyphicons_002_dog.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d1059c93d75914e456170a46c699771f0070fb GIT binary patch literal 1374 zcmaJ>e`p(Z6hF6F%eJaRiteY!1*LW7ek9H1awct)yGt81wImU%AnWz++vMo|+TAzi zQo&&(WpgsrSs4By4ngW!!C-S@rk zz0Z4}_rCAlfx&^kwvF31Vi?wz=@)Zo-G-j6tu5$H{n$P1D^MDOd219_WCvhL)fxeK z#*m932V}Ln_Z*00*!sV;!VnzFKE^ASLCU@j=@~XcV_3Y$vt?xrKzsxgH8Vk6Iemt} zH8nvz8OhRFTL2}kf7}82@qvOeKBmM}qNf{=dpvSr04U?0p_?x6C5XCT9?AYTMc{Q4 zIF=w*NDXBNalvu`9wEa)g=QF>Wl5$h!m`Z6c!*{~6pd~+$aL`$mJdbo#zmlLjylTc z#B?JT(h@`oLYt?kN~J?r6w zMgvVSs@<&vH4Rl|)y^(EdOc57p@0qyU_uv>V(N?#bN+EhLkB49qNSAmuNg5xl*^jR zvk{36$7q&gg*3y6sU$0fM2?FJQc_5D(NRB`?_ezu?T{+Mrou5P%}656Mj3{YLa|s{ zOtNW?8{`jOjwzRDd7U$7(mQ!Y#49-~bs~PQkMDW~&UAENHnU%f^K~i+5yY zMKk@4PX8nuT!EuK3)Hk@8F>9Dcs=`AJ>Y&l1NgXyMUGw{d*JZPa3KCSos9e?|(OuN5 zc1cq#(~VPp59%5M)TI?HwZ>z8dri|eEzu0Ad+%b{Z7mrw zS@16YIknVQ!|$Fv`p3S7w+{W(y7N=XYjno>t)JZQ-G1>}A630) zzV>@J){af*KDh97BDHwv*elxcd-p%l4m*yVd-?pUr>5razOEBlwU#bNTh%rMbl`Ti&ca^~1lNAH&zKed3&*TRPR#v8ik3 f>S20MeEES{tgrpx{S#Zki2ujSNCV=D)bPZAAxYB? literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_003_user.png b/res/glyphicons/glyphicons_003_user.png new file mode 100644 index 0000000000000000000000000000000000000000..84a7cfde0d4b30246d844c4212a36c74bb5e1af3 GIT binary patch literal 1283 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_007_user_remove.png b/res/glyphicons/glyphicons_007_user_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..93701f0fd6f6acb1dee4580cf9d8476cc5950cd6 GIT binary patch literal 1302 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_011_camera.png b/res/glyphicons/glyphicons_011_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..f554fcae0ec95d06b795b7dd13ca2386ca88e962 GIT binary patch literal 1299 zcmaJ>U2NM_6!wxpY3bM`rcNC%mRqDDHU3NN*jBS9@ej?mbR`KQ{0P;xZxd77*Vs42 zsX%JSOL;*P2sBMd@GxE{G%-!uCWgd>m;?e|CbTC&h({0)ph-NG>on;qG0n1l?>#=> zIp6v7JIhPY9-KHfK@h~j>Y`T1>oNQsdF)aAe!rCc0x#1@Z=nWULp?JDMA?R`fUJ6E z8`Obm_g}va<_RMGhtq7KR_(N6L60^Q9Xj>`j3$Wrg*Y&+b%4lK(02SH_2>1Q6zSMS z>II?3)&doDoW+e0G&Yu+*2cOe+tk7daz0kD0S_RPj6K(nl(?(Mlh#86;sG#*C zwM(j1TP9T)0#cxJS&QX3QWR+}FNh*HNAfJkGc3NvESFaVQQ-^Z@S?D{&|XvOnlbc+ zPerPOP@phOuh*k{IU0s-hLdGEvBC3MtdWiSJ~HF1AI*#`XdtpeCqNGL$;6_$3cILC zVWztwctNeUXV{O1iNYykVl!Yknq@pMiEE%8p*pxv)47Y=weQ0 zMM+c*j?*e-QRg*DDyVu{t>oE4;w&++ABZKijj^(k&+B=aXT?H}<8)q@4XrF1k|b#b zK`K;6*s32P)3-q4G{HLevD`zkiW&kF!LSLTJ8G5X4n#2Oz<^X6B6+-KT8^Ixo=GY> zJK?@n(&vh~y1um3rH@#VKNhgXPKKl&B^eW%1Gzp1Leq+P14oc#~3uAM>v literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_012_heart.png b/res/glyphicons/glyphicons_012_heart.png new file mode 100644 index 0000000000000000000000000000000000000000..561ed95e5ee13f1fc7ef157a6654e837da56843b GIT binary patch literal 1363 zcmaJ>eQ4Zd7>}#eb!}ZOGIWYfGp9G*T|VxT%f-9Z+$GnZ^V)hnXa6YHGs>3#YByXN!y+n-iOi|sC=O(u{;@yCRuNPxV<5;F)G2~E*#=b{ir|~;T~}}{BzfQW z$@6=j-}9B(!T#R%OD~by+QM1PY zo-vgo$N@#0eEDk-$FQbrdVUxVXP*^R+YBkbPN-@+2#sO!o~om$;{f7gpr~63;`*7h z1g>id;srKKWt|i#>3vf!7@F$Ot5f4@Oe1=B;qj_~4442ac-1s4PpBq{nq2|yeKASk zH5E9XAXZ5YX9w|=?E;()g@YTY4=m^Vk^iG_iXojTF%?0U*z;Xf;#p@S=yt!II z$VutCFLX)}B?ujXBrBCls1gp@Zjq#8v6ydzVS-2_=uKKssRk`?Tf>3`Jk`}5sM{9q zTU5sEGE5MN>1qh3lg+Lfw!C_xP|C=v;*fNRB2CketETP29Joc}w%T5P(g9=+cy`%U zQ9TOV8eo*WJ3DG9YU-MvQ+AD7oSI4k1DL>q9wJ587$N4ufUBbdDu!gMW&dkNN)Y9; zt_d6~bKw}p@mwlR(^698WJcooXi64S$p{too%sgV1Cb=8A#5xiiO7){M{&_GP0LIy zmX<^=&GWnzW%+2bfz4PRR4f(vPJOI?3(MXSE2LbYK-VSf1Y7aq{vT>A4eQd||c&e?lC&**4h1w2opE$t_pr_Z^=5{zl-( zfxbw*C9wa|#Z%bk)r|H0 WWgq?E{KKF7zqyRuFP%)j^!k5U{KSg@ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_013_beach_umbrella.png b/res/glyphicons/glyphicons_013_beach_umbrella.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8e949991f6d5712d40a3a929ea24b0092edd6e GIT binary patch literal 1618 zcmaJ>eNfY87_TUTd`#rdolc!udb+vMCTVHfrWDsU1&g*IFvWQ~ViMXMZBvre7UrA` zQ1SGpGR4E;oTqL$uM_8PPC!La=f^zHKXmhBj-lrtb8ODt^v2M=sV#Ch&s>uCeV;tP z=lMNfX)JQ(r>DG>qEIN(9dpQHuuhVnN;CX~RGG5~vhe~7>C{>kjba#t<7zBhhvQflq(Lzaf`S`YVcCQZCp3B}cEP}# zz*G>$WM0e{IGJIOBn1cr357!HkXFqLZUi$Ljj|1mMg=rfVzpnQ!YaS0j9VaCkruds z#PNPewn#1GgOV8rOrM0{3pky_hW%nJQ6ObVm66$X*^R~EUgZ( zNHHt&L4gMKs8GhiAa~Dq6jx;EVZA_5@J8cgXoU5$KGrXZfD{&G1eg8EN%g$s2BY{AoW&l>F$55*g zCsACVjbV0;(U?bC@H~UTK4UH{L2m z9$w-_4R@k+6smy`R1 z@KSy^NQjDIE2yAXf^*&8>VSu%dB2#0$UW%g03f=1f<;DHjEYAzZCn#fg1j9bL2wuz zV%85PR{$gWXK(urg<{k{4$@K@zPfu$d%KUf4lI=WYTuD z*K{qN8CkUTcHim58T7u?go|Td_`L4LL$530gSD$uSFHQ1IOFQq^Hi@?hVNe5p0MWV zadS9n`qb^C?w3!T zsa^c{!tO}vv_sS0J-@49=6iz+hVU=YSJ_WCEUvv_LJbv5-%i_dy{RtwzPo>L-2TQc z-9X#gaZ4H#H><@GM*3+G1U7M>OUQXhK zlfj9Rwg<;fPrCeli2cAhw(^&>f`U%G(Qsv9($MaM9~C)|bZ=ZxfB3V`FI~#qgSGP$ qTe*`xk4N86RQ=np+u(aYAx&ZF+40BR3(5icFYmCs$cVN4gZ}_mWK8P- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_014_train.png b/res/glyphicons/glyphicons_014_train.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff2cff4bd69865e77de92305b291f4cfd9c965c GIT binary patch literal 1472 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_017_music.png b/res/glyphicons/glyphicons_017_music.png new file mode 100644 index 0000000000000000000000000000000000000000..1a6903e3c269e2c48fd388ffc856bf18cf6cea5a GIT binary patch literal 1344 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_021_snowflake.png b/res/glyphicons/glyphicons_021_snowflake.png new file mode 100644 index 0000000000000000000000000000000000000000..00e69f18e168693d0930ea8c9c5e341723904f24 GIT binary patch literal 1433 zcmaJ>eQeZZ7{AG)u#cc*|1hU^T^3~7UE900*K6*Wy=%|i=56zKvL#?buYGqb*N?O9 zZMQQfW**TAj%o0NNEoQZMbw}YnTRkAkPttJLX6JOL=eNsU@^p)Naowy-CQEtw0+GOM@-}BYc?#}zGD{3no4o7vQjf=sx&VE+j3g1TcPrKl<*5doD9=+ch5)9yAB|QO< zh$LYV3&b=Ta2Md zLB&c1&_z;x(QYK98vr3)9;b*C1VT|RqJ^X=q8V}Hgd4-*O*x4chNKv`7b#vS^kzu? zOpFT`eZf-z9k8r4gJDBML#`o@OE;1j;q&=y8*aA~YB2|Z&4P{?#K1T`IvE*aL$VxnNmu&j{A2p5j2svTEB+q7cf9~w8+Hsix-fW?5R zXABY6qrag9hPnHHMAakb6kYND@h1121{WZb` z&`d^_7>eX6j}ND4DikINF33{6o10N=2$9B(=_KLX>YKEjcBGNXda`dMM=Hs36LkEm&_?vd9$}@*t4HhOQ!oQZVvO7~ljA8_f%2bi?ooc%nUF z-W_B;A(H1Q5-nn-WhpB~4gvqd@?MH#aSw-+Ap*r98A)U;*-}8UM_I)x?iAVX6GjoV zBut1?0{ucpvCs`kWjH+`i@Ij|F}nv983GEsMJ%?=VnMvDX-k@L6722L2*ShC5CaWP zt^r51T6jfrILg=v$HucWpKbi|juE`-z}|(y^6=!HbnUB$MzwtnRvu^7t1;~K?YHDk z{djTu@Ucs?4UMh?=igfUg>M3T=le^^$Br0NWPW$^g^v0U5|?+JT_ao;K`^W5C?*N+C{G5^tc<4F4(_|JRR{rU9#{>|u)@+;4bj~{>h+s%oy z;mZ2nXY=INy$2^6FK`|0H5c`hn^u;UZSPufX7x*zGw)q~q3OFy&%WueCmTQc_=!{J z>KabJo2=?>+B)~*y8My4!0uV1chyHmU-{^@UnbmVb1d5xc<9RHbtXmad~iP3l9=9~ z3e>9dp5G6B-f`|&^Wgfw9v*xD*C+qj+1j;mqin3^o39dh@X_t{*^2hzYv!7%q<^gP z_3`t+b-uRg<*L~eTK>~1UCsY6v+eN5bB7%#!$al$g#RAgehk^#%SYkSA_?kWe~U0d#!9g^dWs3ESj??Iv0-r61< zxGZxq8QXMQNOYTX8e1*-d4A7V_ck{*7F)}$2!a%cLrfH|55lM1QUKqr{)dBbdBk8_jTSX-^zs@&{G!?p z&~Sq908zk;ecLBN9fIWlCdFEf*2q>`P!o3E)Ul@%Nr*;}x`uR;7rKFgwu25y@nJW{ z&SIz}`mkqQ5h9Wdf=(&auYs2SrkK#*EqFz&p&qSE)6hTy7(ALz$cj#QMAL2W-knS z)5JI(Ww@*_c=BPLhLNOkytlX4-s`lhS_e*gypeqF~DKG@rytJAo$>W?UI<-H3uaH14Xc$NG{0 zj{;pyX#%WAyfO!dxx2TcoT4Z!>m^f~oQYEua3F&OPz)WCA~TF2bNVSwf(7JdMio-# z*D&M5QYlHKDHlsQy#(c~ytWc|TFE#WqunFdw@p~NmitdrwN!tM4G zl$#<+*5UPXjGy8>9uMPodE9{-=mY3@`F zRqs@jXt0GsYa+ZLDW+hPS;;I{ph-PIvvkQ!O@_FFrK z_72WgtsnS2e(GrF`O^6^bmt+*)a{oxUYH<0Sn!N|X}`GRFV@;~VtDQJy5QMEyHoX_ zh3-F3T&X`Zd*kG-XXh6JV_em%Kd#wxt8w=F#~6LC@v&*TIzI8hs;aIa_f^rmg~wJ; z9er;8`AuDu!)r$q`ww0kxXFF-$F8rh>^HjB7mJVf7cR1krTZE-)=W2+PaZ!UdLmFx z=YLwV&i~}%YjYP%H@p|E*mCT!r}DJLS#YXv%xW}IBin6P)7IOkSCt`uE|h)8ayRG9 OKWCV2Vm=IP+x;IP!SC(> literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_023_magnet.png b/res/glyphicons/glyphicons_023_magnet.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd247d69ca88baf6d946e9e8a5f579bed1d89da GIT binary patch literal 1316 zcmaJ>U2NM_6!z#;jfzf86tN*5j5nqZn%LK=uN~90bz*x7B5jp~k%tP^wQmzs|6$*d zp9vui1{!bd2c*IT4@mq75WMg&F+f7vh7b?am_Qng!oxspXh?fPi0d@zDlyHnea}5U z-#Ono_Z%OZo7p=&bmtI7QNxA2S|aQ11pZWXlZ*nxZDAT7h9MBTO%%n(bwn%b$ME z(6*If9u|sRG0361o$rLG+?lDEonUgXa^(A`!JcY_t+yw6pI)MUffW0k(aQjy)QS zegkJ1!gMVKHz*d@9eYu)P^4sR%LrJIh*>F!a;_H`I=Kq8GMk{o%GJ|H_OrE7dvN#z7hg96jTS{q8%&zu1M zht))=DqKqCgdAX4LdG&>Y-0!YdQ@?6Pjc+IPh`jNYNQ|u3oRK92Q!m3rybO7)AynY zHts>kCV;NAhGjQ+?5a03ZQqhiLM*P2Ala-BG4jadhGay`ZzmKo-rp2drPBK0%u!?8 zSM)6hkK8-`D&G|Q8dw@t4vN5)fUVQ)jsVx`IoxT5~{ZHnvJb!raHp)5r%-@}- zZ@om1sbgnn4i*=#z6xe%|9V!~I`~JD_v#U?+xiIiLlkHI7J<@sa3i<<_i7luZf TAM(fUivL>$ZAN`JyKvw?-qN#W literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_024_parents.png b/res/glyphicons/glyphicons_024_parents.png new file mode 100644 index 0000000000000000000000000000000000000000..448d9d8e4618aa06af74245d0abf94c44a1fc664 GIT binary patch literal 1386 zcmaJ>Z)n_P7*E@qcEc9Bj^ZE2LRyF0y!^RqlDlx%E|=uoNz>K4)7`$Px#VpxG?!$_ zd%L?ju@o6-rz_iJ4s~=QD1I0NVJiEuQa7qFaiV@H>OSm)2+|@>`$g0@*SoIZSV;1| z?~~{EJiq5(UK<;Is%zV$+b|64${dihXvNXf*ZBZ?UpRbTM$02mDZrdF4y&36Fwt;| z0MC@Q36KSvQ9tq(NMKmUikUCKf;uATPMOpK9kNz-5gNl1!!=jaCjrEZV8XPM#Ojr+ z1a2Bh;t;FSsw;t#d0@%|xv9~-J~gSw4Ptl*Pt*itpbVgf*UFad3$-NCuq&W_Af^bs zp#mq9#5$>hI)+P*2XK~*hIN`@aE>FHL6+l~C-Df)L?{~FT$mXYSWbxWc=IBVH_sRs zvU0lV3!Rcg2|`z(sA{!JR->fjO;Aic9uI6pB4MNv_Uks(YGK>&Z&{FmuY0BoO~=Lq zi(1jCz$Af~u7^-|RdvI#?KcyJQbyG@mtshoDwl(}8rnY0g1a>CsqN?ME}*i&cPgHa z>M`Em0;AmB-%(4^&^Pqlif1+AG;|7BpbTv2BT`I*5n?VJ^h{Jh&5|9x5`4|bNup9Q z4S{17E*ht~7$>C}Mox*G5|LvuUQ$FUHAwS;v%tV+Ad-*rxvvm+S4Y1~2taM+jAbCK8j+b{FtJNxFB?mfw$#HQh$Kg+? znr_;GU{6rVCRgB@M}d*{oHE`hg<#%;0nNlvqwy%l2nwG;r&u(tL{ef@VikpBi6++A zl(JUj2=G6w!gI1nqinDeLr{o}p$pK27HIaUXu;;rGJ`%5EX|%k2?-luT&q}+7@Dx^ zZpqXg+fPtI4_YPyG)Khm9cyHkw=yjp+3=pDbZm+xCns z=4;E>o_(h03;dyQZu-^CN1=iI;y^z2%l!7eTeiMMZygc)rhdJ6dpgu@fBw?0{rKwQ zZ3bJI>o_j{*7@1O$*xZiwP%iexo~IqrD*7{pF`79@z#ucHZgls3DGNTh`ubZ>`T9I zK1io`ztTPVMxHIa(>s5q znra{JUVeSyxv{^O#M4CnY4h5t?@qq3R)=ekYp011j*?r#l{2eq>FdsKvmcIRJD&f+ zI5*Z-6?XP$|DK@Qyi3cA%s2e^JxeeD#I~O*&L-5yet(m^e(=OOa;LmQz2hA|Hn6w) l&mXr!-Meblk11iTe*xpj+|^v~4lVfmWt36*V(P`2{{YJ}%8~#8 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_025_binoculars.png b/res/glyphicons/glyphicons_025_binoculars.png new file mode 100644 index 0000000000000000000000000000000000000000..0c8ea24ab24c822dda28b2dbed3d64bd8de8ffe5 GIT binary patch literal 1345 zcmaJ>eQ4Zd7!TVRrR^~tf>u$p)J-d1zOMPW&|7zR$+=s-+Feg9L#1i*-d(tSnY`Eg z5az51EvOWw3Kp4EHxzaFSDl+s&_8sde>ke5ptRyv3$wPOAd2Xl>s?oHEF^i~_sR2n zp5OD8siDF9L+!V=V;B}nAC|Ldy(M_scBA)FCH5y;x}Y)whn+mEs2;%Lx-$mww51k6 z7N~md@e802!*;G2xe+*$c|g(}i&O(0vTC^qjbVNLRaezY0ODhyVAwI@*YgVmZs;-M zVJ<^w+$1O(hwB~~t`Fw4dP$4wME^m&uPPw}7Jw>VwM^TWsxhKrS3>(hOc8iP1(ssO zCaICk5T0~AfOBLdtkDdE^E}D)ay-x6hqE-pQZ%~xFw-k>yu=E4^CFNpPtQwPIo0%q zPBEegp({~TrBWd)5z_Gr6cdd`0~;(GMjBziW<#|aw*Bsw1sV97XSmRCY&@{2jyYu* zBM{Tg5G*&7*)nYV%|xM;QB~EY7?P$eD~PM1?ZYg%O5>W^ey-*MDhqt4>}jYT`R*1N z}ciSYg&#G<+7nmJg4xH zD9wv}GQ}`*BF-zUEQ&%>i6;}iv=BH83~UD?38^D&N)T8%-pkOuz%z`(Mx!Y?&Zk6C zlm$){5-n`n_MvKPAaELBjjLGtx>zac0Tnu4&T-6Es|*z#==ep)#goH4eosc#3_B3? z1eI)Z1)ebu^pxjVc%u}OaSaAEBcetVP>d`JpFt-vl2X`2Jd)%Th3AMSR^OJgR^$lq zKdd6~a-5FHG?!!u3X#z@2^!D@%^r=Lu(>mhpid-IwF@XAVIAbvvI&WU1+(TB4b8Fr zJ}T%z(?Ed6ZWBvwv)B-CYuc73nuK7xHG=4{HN?P1lk1@o%^fK%pz&T!%kfFAGO;;BnFa>s8TJyiRN-T%d-&z%0ld+yxK>guT{JKp;yyz=4t zmjfhdUooZAr!GI%F+cF`xBE`?h~%sDFCQ5FeQeZZ7_YD`=dx)I7J@ow(}9DzyS8`h$920cz3Uwua%0{mUigUX+IM%&`eobm zy7`A}(;$IFB+=#7Nf?*Kky@{F)%a0e=z#?b~lztXxhH- z`}Fxe&+qx_q28Wt^|cSzA_!8S+Ad_^+6bSGz8d)ced@$GTpn@~S*On!a*Cn_5MDM0 z0h-dp9LNAs9(isSbRx*wYf69C$)0kZ zj(QfwL8IVAG01c|1kFsRR}AZRIZ-fWxGS1C86bDjyMM$4cm~); z!IEG-hMFs2n7eyBswm3Rik?}p)KZ+XgaZ|5KzD3NiYzgL%(-2b0t+arf*}>WuPGsl z6$*;X(NuyCM+lmw<4KYfVmzG)2`tOR6MQ_@PB5M`&%kORlmumnO)^YK;M*yJW@wU3 zgd&loz|%>VWd(*}nOFsz(rri7CEz*ru*w~5`#rH-+ybIwSp9~fR$8SuZ#agXH%v6% zN26QPqNM1aV5?WjGFMC>6B|w@LNPuZrxFR8 z!pc~ARmv)nL%{#A35FJUA}kP8oWyWQMwU27aa2(5QC@Y*J5}-egi}R52NM#I!H`%` z9jq&-j+l8xGIYBW_j*uOAfU8c#^S3imc*-?wxS6q!P~BkAUv!LG0@@UT5v=gs(dFA z*w!o*|c~4;Ml3fmoJ{Dm#8n**Uf|Y?WV=OttX#4dwGX0?>s!eA9W^uAAbAl zjqsY&2X1$(m(Kk3=-?BYe_>`*)p~?C{X%P+_RsDk=ln~LAKLNW#MR>smqq>K2c{cq zdarh!nGp}}|2lEFCJ$PWrLBKWzmq?9Gf-W7fAPlg{F}MSiw#e{GWWrrQ~zGMCN2)7 zUYi`N+t9WU+x+Xk>bb`FS9{h4|9J7-l+P|cwsGtcd-~iJmp`)j;|t^$^Sg7p3jVaG zs@I*rbiJwW*@YJ7fZOrWOS?`y_{q=TY}))?_HXfxoB#L+koVKKo}LJQ+UETUQ;8no IbZlV!Kigv0?f?J) literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_027_search.png b/res/glyphicons/glyphicons_027_search.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9ec954e72db1d1317cf5f8c874d9248d01dc13 GIT binary patch literal 1421 zcmaJ>eQ4Zd7|&+sy4nsqC(Pn7rlsz~yL{XwmkW0-cgfv)tXJFKt*tAzrpep8(0nb) zd1?Ppw}IdU(XzrU)Kc91M-+$qM<&cw3-g1`I#BoFD5!I&)O8ct1V7$f@4A9xA<6r` zPoCfN{GPA8+}W|KuBM>|L6Evso6rr{E#6aoKYT9~qqpGlh?D4ZGRCk|6fJ2^*sG{5NS_+8C}XatG0x~3?N00$icIYp0Rzn?sX zp^6;Edg(NgHhGX&+Qux98SBVOVn##&p@h|56(8gN9^)l}W)+$dJE%fY=T#xb;{ z;*3PGWm0|VPLww+fYSbePa;SXWf(shq#1^M5~T=|!U=dYJ~GJB3`d2~@`XWfmORXL z3(2xCc#2|q$1yn^FBXgbV!&@$Ih+iK!=4R_@<9!sJ*qpR>(lMViUk4KlBJlAV(6%6 zQ5-S~P85SomqXCZbb7_GZkH1UQ--^uiIaW;*EBD#lD6%1gF7_ts%>XSO@Ma;+bCEP ztjBO;1q^d{Z$}kHSz6IE3zk}nQD|imG5p1@CK0h+>6; zB6AF#U;<%+VHrM2l0rPjBq)JpLwq8}$Ad)3bLJUX4TKWE46(5!%?D#VMKGZdNhYXp zI4Q)KB+Ifwh-O3a3O1$Nj;Kq(bLwH0J6Q6bSdO=V=onVkFw{z`bmk4mu=9qA@)-u* zmKG&N_XOL$N|w0-OL-2+Nz2gCQYkp)E({2gg^d=1F~R^?5}w#VGC{>-0iI4I7#b^M zUtssaI}-7*$mWw9h))wC5&I0@c%Wdz}2Wr%?eC)a`_dUpSxjR>-a zP6@HBd+|h1SN$wet920@CWs9zvcA1$Q}Yaaq^hZX)+9C`uHy8_B=b{p@ygQiCVVuV zQL9fM{c`W6`EzeBES#TM*sfCz(gFI+t5q8}u5;rDmj-X6ANDp4NX;k0YfrWbL~#eevAXv7?cI`Q@-MlwK0l!Lzn0l?#%b8~xckg^P4&0N zGcO^p*w;Qd7=EmMYNqwd8&90Rcy;o(tT_Kd?jN=7t8c2#f8TX`diVNcTlXl39(}O( z^B;YSZ(mN_Y{<2>jBtZ%CxwqU|NPPZPrr`;aY5UW-SfcU-f!C}JvH9HCUdp!`abrM zHPJjbm%CXv*Yh_@(qFtgRKTx=o_<)E9Us^H8L literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_028_cars.png b/res/glyphicons/glyphicons_028_cars.png new file mode 100644 index 0000000000000000000000000000000000000000..962853b72261896162833afe268679fcdca731e0 GIT binary patch literal 1526 zcmaJ>4{Q@<6u*rXWVj8G5LD3HZ8#L#yKC2Lds_!xuidKaR=Y(e66JRHZN2S!cidfB zhvHPC+XTrbVyFqz3>6H94H5!Vlo<&^M5j}t0b+=Zm}P)wBABS?cU?P{NVwef-uLeP z-uu0O?Fv;_Z^?I$`sJF5zKs>zM0MI~` zZ31Dy@@?x+fl>sSaaE|R*Xx5-G$%(btYKq`M-_-hkkXZLh2>g+jy8ZML2_fietZl= z1>TLVwg-uz;sp_*a-#}rH&)ki8(TORkF6|2OXD5~U~$S!|~$as_H7NGndjn=+Hdw4I`@4m5RPFq+CY z(qYD*iUm(@ETZcQjpMDYt(I1sMOK?|(&cg)KCD(Vv@mOJlFr7>l2(xRzyOU?1w|KR z2{k;j4RTC(W02`&3Q;8(oN_E_sY1b$;c-^MNeh8TqefmyYfTS>TQqKKt<|+D01pFA zj;S2%M`J-63~P7iKxspso3c}4s+i1^=Wrl`D3Ejwk|L9gAalA#6<`Bdk&(HW@ioA> zu~vK?yhp;h(-AiIPB*SyGF6bgi&8SDzQ<5kcb3%)()C3D+ z=0PJH6LqYtNo-Rh0w+saDQ?W5C_q3`n#AJMJSNrChBj>pH^C66RuCShmKaEIb5*#a z+lF_PAV@}UfbrDD&z^sxr26w!a}O2J*=xT$etu|)`TNSkpEIi~0)>_#(=unq*QUNs z`sKVK)7)TWZ!qJ^#EG|Z#&fpZ=-9ewOxS+%_rI@yby}LA&&;3G=|UF|WK85%Fy!Fw zMO}|x3M5uIM~Zi`gR^>Hxc|Z@MVIbAGCExG%>kjUVRpmgqa);RY+_<)e2E?!-2ScO zU2WB$$XM;VD+3)BPxtTK-F0TxBc0r(#JS7Dt9y=qn)$=RO(^%^5mRnrb5?Ni@|!bj z4_4=WW^MkEjFk=Og-4OS2c8*99KK$3>cu%36C*v?`|HRB!wcX<4{x4Q?IYOn9SXUoOD@G-}{ zhrV>$*JkYd`PCnlc{kpy zip)-Q?5t}4;IY9CS!3-p)|!ODGc~!1pKSGc!as#I*ZTKym7bE!zq0=5d1drwo~M03 qzj@9?KDmQnLQU5)O{VpmvI*q1I<4ITE*Ba9!~tJ5v%h@ZOaB4oOBTBT literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_029_notes_2.png b/res/glyphicons/glyphicons_029_notes_2.png new file mode 100644 index 0000000000000000000000000000000000000000..63db69fed72efef3b6976d10f79f178218be1ad1 GIT binary patch literal 1255 zcmaJ>O^DQ191ng~$FB9Tg4IjN9M-~4zGm_Uc}z2qM|3IRo|PPSr;mXe7yJ1|M&m@ z{$KCx)Z~XFnLQbXVMeM4?K=66l4tMME#!Uj&M$wF&->V!!P96KcijXqrjMF{t%hz3 z)Pd_SoVW=l7-r)`*qFgHwT}%Cg}h63_+A(jG{a0B=*6x#2Qb?NEf|%!N5B2fvCuDZ zpD8u57F(bV4=yHPdU3MhEzWsGpF6Oho#+|FKnSqQ_QD`ajb4fC+cn6ViUp4CtKhj3 zw@PZJHpN;f0j$F3bDk(ktg7--K~Ys{oRvjM7DRHZIjLYMsv&Fa;Npn4#Gf_lc4gp; z>`Gi4bOPsSR1q5sh5B5Mj5Mi_+}Sf(=qHfiZ?CVyQ*9i8{E% z5vHplgmJC5W;jX*i6SWzdTuO8yeNbrjjOMn;yQRud3aPYnEeL<$|bDXVk!YAd&Ds!I~AtDwvijs+uNAj$ABOY*Vf1x^8QV zu9b(_YLsF(@&I*8vG6sPczz4kuoB>6lr#_uhOIKyMi`}S6tmW}%I>SV9*n5q16s)e zSCGJY;8zk9vi(vR@C^(^Nhgh_kr-tXzC?C#s}MFmeL;AJ)-S z+Z6M*s8|vw5Hh}JV2A@S=utDkgH-@&pBRA~wMas8KA3eo0p|9%f`zyZJrt!A0`0*7 z54x_n?#s50{5v+5ncH#Zhb!~XH?@qryKY@-#!LP`zkc_5=fd|Z zSC9UA_wkVz_u?O)%wPH0y8rFv7aNamUcPi}Wz%kkcbCsEG0$$(qo?Xj+Dql*r(Xek CY??#> literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_030_pencil.png b/res/glyphicons/glyphicons_030_pencil.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c11b9a763ef03e30b8bc582f3a105625b425f5 GIT binary patch literal 1316 zcmaJ>Z)n_P7>}Ku(s4NJ#LoI5ri#<;lDxU*&xO0zyCi3C_PTPt>4_VdChy&a=3kTd zytKM8EB+bcbPOE(G+{b~ZGtdxSf$%=ir@#QUu5{9e(KjkSscS z9hRYP&dvS=GX$~eZ>v&8)zY|Zcn+<{I&|dt7)=nF(a6`08HmVfShw6Pb$xM(A}upZ zz08-`lCQvqH8vl>sriYDF+XFZO=@(6%tSIa;6S94kz>1|9A&AtT^a9VF+-7U6*QBj z)<{)LlceGWkmTu9(qI7~1%U>`ydZ#GB*y}dVeu^_!LZB=GAELqi^ARlvnH3-LdO?A zWvK>2zRWPKR*P<>XfLQUAe~OfHaIScHIm_+i}WbzhC^KoDh!Rl@{#4aWNcBN_L?Y5 zVWw*#IDVI%`%P?$JN#jQ5oK$aaZlIGUr343`4IO7`Ps_p)MHb z?%s~Nil(uy=Qjhp9j9q9(1s3lQHV)_HY3bj-V<23fV!=EMl=3eRI^mGX_>OXYeFi` z3X-4{08sNeLE}_O5*00{ld3={XD zZDBxrw}xdlSZs?oG;LQCPeQz1A3=OrA7bd@$qn#`KD_O$t|~E{H5oy-g7rj_T2yNj^{7!=^a}=P9#PjX*_j{eE;TR_0gTni-%ri zUb@m3Js0iX`_(sRANZZxd*$5&r&jeuW9f9OXaD8k=EdKB*u2vJ;lk-xdIyNJ<7Wm} S&Q)&3|E;1np?;ZvZQ(yHX0a~- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_031_bus.png b/res/glyphicons/glyphicons_031_bus.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9799cce01c377624837d8ca023c9790b75c2df GIT binary patch literal 1378 zcmaJ>U2NM_6uwDD2B94-NK*?#G7i#UTH>F?PU1ByPVCS~OV_nQt;860?3=`^V|(@u z`QdLZ8&HZ=HVKB%CRO5r!UIA`2#HBBO?^S)fk}ISy&z2tG#>bQ+B8j+>on;qG0n2$ zbC1t=&UgN@I5GZgf9TN=0H8lVCQafufuG^~gZOvip}nWP1CnRZlvPFz#eqQ7tP&*h zHKhV4p`x{peGf+f2>huRXV6UHfS_8nsN&f~n>8Dw0T>x=+KM^{5mAB_-At2zo&Sy` zbS+Iza|OC!XJJ(zYddhNJziAXb81Q>NB0vWO#wToL8K7Pnqj&^Gfj5<3Rw2k6iIYU z&|I3_AT?8%AhMPN2`(Cos5HY6JRfD^9M3a*36^G9ipDn|Vd4VE3v7buUL=m@Xk}qi z%5`JmQ<|(IWD6A4Xf&dYSk!VV6q8D&JRd9@!4?s>Wg?{+G2L*_g9KgG(QTw#CgFKh zN>&}ENz8O3g_>O`Y&tgGZlQ3=sHS35Oq8Z-H7~D@wTmX<9U6DFc8e_=Qj^fN>W+&0 zQ4aUOxOVpr)HBr7O*^~p7@a&dm4XJWK@+){6w_gZnF|LU9XC)hBulM(U-MF$tk-o- z;5nI(rD#6MXLAfAWkgZfJ1&L^|tkexe?yndv zyQ-^}>5fp|3>rEHbfgU|wZ&scy=7>7mUt69adQRnVRMP0i8t55D|%@9?;8O4LU~Cn zHm{U!uCI>4Qvx-819(PZ9t3?9YY4U8;XkU-L>oWdahvGyV44s`>9%|3A^2W-Hu)F%Jpiy zq2Wis%oGFuU<5WDGgHu+p|C_DU^du~>?cD-@Mj_mi9s1gV`8Q;eplMLM8f6nzVCbQ zectzZ|E{H?eD(bNMfnDUVZP7HRKazT{^aJs_rXWkj>4r-V}n|?64K(F3Jgv`sRM{F z%+-S`zzIzohCrFYkUb>^f?CkOmgbePiPLpViEsp>4TiE+i3rCx0u8AH^`h)RuN^yy zBBJ0xpS1dMf5Z(ML~pYSs+-FLd~+jj7tmEJk+K904TOQlA&IagN9lwEP1&X4UKe91 zl2Xwc9q4sZL4O6}R#bpkO%@}M69ht%CZg0zlEg!Z87Isb4sX&(l+sp`HrtT&g+gzt z5TdIXPudqeInV}8i_jPrkH<}Mi%C)IF~V-Q>o&}0Bh)ZPn`Dhk80Bb5#sUMPyedXC zQIQedB3GxxGzSWqUJoH0@%v{C%h7bAV9Kxr7r_Viq8VUqbgw}RSH_X0Rx<%V58Y!j4%MmpTa4N zhc&yL7PpmUNh_Mh3bRs{i5vp{hh=RfwwDe9A^**5` zPOgUuF$y5W#Uu?~SuZt38bn@^qh*-hgOUgVsoixfHp^m4JgaFlns5^I?aT$G7b4L*{M!>9*Pz#&Qd{RGM9$!QAAoI~KN=2;2V7 z(dI0f?o=1=JA35N#4C5z{aSRs|GkAB5AGGb>$|TeL&@aPkK2by4{l@1)m^ zF}vFG=HO4XwLH={vHMJX`;`mZ@~>_u_FUR@x?uYKd3XMN=x9&HS!e5Ozs#jR={}cT zS-f$xC3iBr@SRJ6xd)5`Ws~O*-riywlfJ0yD#_dZPki~6HfpDM*!SCt&kXVWzvjO< SaimiJ(fZhO=0jKQ)_(zF%@AY& literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_033_luggage.png b/res/glyphicons/glyphicons_033_luggage.png new file mode 100644 index 0000000000000000000000000000000000000000..01b7e1f28069aa29c0364ec192e8e99a8d619fc8 GIT binary patch literal 1256 zcmaJ>Pi)&%7V{8+L9q7iuxR)^++s~<=9V=OJY-f!irKFJv5{EkWYhr5qndcYc zL=##kE=U}9fWvMRCnO{o5(fktaNtl5Z~`>JfoaDbfJsP9FljueNmq$!mjAr>`TKp} z@B8=OSzA4OoYJ;t6B2OnYYbH9CZjeX{+)28cqlMY;hIMc@+#MdLY zi<-#whi`m`${aWMd(djrcH>3E!;$FbI${IQK|_~Xm31wQaA z!YgV+ZX_1!1uG+h)<>%?Z?xr=d|~+vU(O6>AVSpTvnY&HBdZ8wy9Qh5VoBh~Ds-zN z?2>9X)_4mO#H(Vl;K=~+5Q<<)g%B+AiVPGa6 zcSDGhMq|%#oK6zOQYK|?A^}mBq9~7Rtew&(x<})_+G%T;AgPH`+$SEZ$L7Km%yRc& zM^i=L+tW+>Bpk=-dlCv!gkqX9Qee!8F*jZ!0V|*z+Su#of9rNd==THPfT{zFB^m0_ zssUhEP3S1Lu4|TKTGb_4%bn#0_5+zj^cmIxx~`ULP==ZgfTNU3HQR(WUDs_*)wSvr zTaQ!f#vaO@=GfpKR(&AWun2M~CM}G^X{)UDFvV#PC%m-|`BM$o3*ubxY+lI;S44t0 zkzXS?;>V>hg8ML#fzBFDV=*c$e86^kvF0dMvuLS~165&y_4lQ08aV^}59?^qHszu% zs}>L>M#lFH8qg3;dejW*WEBQ^pBSMVcUeLTKH7BqAr;Pa!(q}3JRGNGDeu8BV1V&z z7c1?vI2P|~+Nma+gnYR-f^4%l#3*KyOW25>9-V)ljrYa6ZML#sI(P2gU7myA?Cjj0 zS-Dl*IPmoLKM!50%V2F@zCoV(@%@eZ<>R&R+!voGf1Wrvd-Z)n_P7*AJpW2_&BV_H9GNGERAyCio_E*I|F=91ic+tQZni5){|n!I-xFaJ#5 zcxh2Ab0`i)I~iptZqo^ytaIXULt#^~4F7x>`y%yIarh6VRSuc>L49+*>k5vA#7GZL3btr zUa-^(C<0ZVdg@D%!LZI{qcjf3m3_SCSaCJdiHDYp&={5(2whdH0f#~FoEToF`_p=l3{O%Io}>6(_-iGhAR6Y|J_1)z$DmTCKZm?fHad9;tjB!M?o zU@c3mk{VY=anbPr&cu^3jiPCsW#e=o!?N_Fc!Hu6B!zA^M)&ay%O_HJ>mrahPcQRD zDc|yiPFbP~q05tGyxO$HpUz z>ZB9EEP|Ia&~XEl61+2n?NP z8JSI{DVAf!JWWeEft3>y$E8GB5OaN0DsmPXSPw*!xQ?(g&2daRFHmfXqiH#jPUj_o z&2t+Ok<$ok+`=Nycfj(Z2UO^ICC4$_tuk75pyO8^7Z=A^e5ayn zh8+oZMU`xE1)lLV(DR;S;muO;#%&l-G=~~3g|6%16D+yFmq8O1TNJK{0cxXTqw0cx9VQXg^QJ?UpYFAJ~Vmc_RfeDHJiaF(0 z4b8Fr3>o#HX&^vzw~8g#S!{~eHEmlHO+vI?8$onf8)9Ii$@S2PK5*pNvuM13C`dvn z{O+5hzjl32Z8>x!e(iim50%?Ju`U1ePPG#)i!=JciM>CLh`(h97p|Wr{nU5(#7VF7uH}o}wT+jV!GZoA&o_=Q)N>!c wGZU_yxI_v!y-!mwns5L6!qo>qxUqMp1N+R}pls=wyC?dg735**TyEmvfAodMH~;_u literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_035_woman.png b/res/glyphicons/glyphicons_035_woman.png new file mode 100644 index 0000000000000000000000000000000000000000..3e867dc8d2feee50e8960ff57a36cfb2001f0f8d GIT binary patch literal 1326 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_038_airplane.png b/res/glyphicons/glyphicons_038_airplane.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ed6c86758654cc9c539503fe17e330856ffc47 GIT binary patch literal 1380 zcmaJ>U2NM_6n5Kel(LDn2rZjnGak|?ZDQY~b{wnO>c;UJL`rER8Y%{L?Az9@|7PFN zv>RdyQng74cp7Nx8-tc=8$Z&-&^GZmp-y{YVh=F7iK5XL+9AXP?17)_H0dfa&9dWj zkI#3`cm8s;r+eS#hV2amL2OQUNxk?T#Lu?+jrg~v<<@@xfKoZsXAhxq#f5~Z*?CB& zO=TGNLPeW6a0#{(MBObtn?t$G(}HT7Va2xz7flDF38H;((NWYfh{!w~)~y8f+qusv zQr8kxKbv7PP7;pjU6U^Co9xc2lVfUJqxSA0+lvBrU_zvjMbof6p_rh`eg!Q1YMLU; zCTJ`{t&+-RddQ^hLXr(fLn;FR$#G%O#&R5JB_j-o&9$4s z9+kXZKnV&nT}{DsGMP2UmRBhhE*V`^92$ff+BE&V%GMt0g?DJ&)!NHWIFRmzo?UQN z+>fDMRWPpIy#rMZHFeF-DY!;CPfewv0ZnKj50e6AMwq$qjH}}YDu!gM1^;VWN>GJ@ zt_d8Q;-Ybe+q$2US zEQy@V^Sl&e`B-Nao3=cpSSs{``dIxA7TgmnBweT=+s)dxQ5}_@5gXawi0zQcK8}1M zqo}&&E1LaIR=7e}e;I1BYnx=b6@q>j1`NR5K@8`J6W{?p@liPy=@g?$HkIO7s)E(l zm8_aM2K*13igA+2L?wnz0*c0DG*v)4GGJv!MFUkNL-*%IFcfPT7bK*?A*Em-YR|AS z;f(02ZF%jqKZAyj0cB|wORw`-R<9e{swLh8UtC*3d{|pzXyMIu@rr)kdgB3tsM(a3 z#BA}}@^dSVC1#VkzhmKWW3Yx(0{aF7*Dp2(Mb4=^P&)2>&_DX!#kqgyufO)Le&g5s z&gZ8+xmKz>Tl>i3lsPx>UPsqIO;@fCQ1eq~xF7BxJ(WEdef5pZ;6u3=ugpC@(?pcE zTk89lyI%Qg%d*ma=u5CPZ8|qElz92Wro;ThZylV@)zmM1bb0H|9rMqg3Xr4UfD7!* zv6C||%x(N^)IPB=l>ZUDv-srBm9716F4*ZqJHFDF0;OLb4W4fQSnk*|5N`c_cWv`y zD@Ug`{5gA@IP(X6epXq|pO|j`q~ZAUE#Gfgy7qH&r+g%EPxvBw@o6G>BzXJeS^s}8o$8iOcMg{R1GGlYnE(I) literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_039_notes.png b/res/glyphicons/glyphicons_039_notes.png new file mode 100644 index 0000000000000000000000000000000000000000..380732cde230915504961d26741f8c560d39b200 GIT binary patch literal 1205 zcmaJ>&uiOO99Id9(w~e4N=6T=a_JzJ^yKJS7I9Kpl2eyCF^*wAG$XR!i!CDQY0^_| z=TQ3Nv{NbUFm@WF$1yr~9BU69Y@_tl?Xp`-&&@wjNZ)hpB+yVHS>N~7_w)UJzQ6o! zb8Yqfna|G%f^fcm-D$D+EPLiof5Lvjr3)|lfw~>KLAL3@OR-=f(#2vu@_M+1Jv92} zAG{<8GjD@-hjtoYnm&nSkK4$@C}C(pSXvn-p1*^s*u}jdu1I^oKb6D)Riv-UBhF+ooSyiHl=QXy@XbT_FIMF(5j}ol3a7OafXZ_fopMqKKJ|1Xli2Osl zBu~R}p2$~lh$9@+jFAFkMvS?+o(8OeUg!`%=U?kiMauI4nNW9Ov8+M^+BE>2ss&xm zF^rP!T6T3&E%9L7!Eqqd$cSNeP_qmbKoyoO09>tHt~nO08HVAMbfZ+AV(W26z1YV* zD8~jzSpB0|(@wERN!lhPoQ_JfPbkUyBoXZmC|+%Neh_oT7rc`bt~d>DVN^>=B#v8Q z1}8930pkuzEJux{57@~l)?BS>6>Z&hp)O6Z=vc|7nKQr#ShoZnOD#I8ZUaeSWRP#t zfQEQ7qgF^KQW)?#F+(rzv4Rv3-uCj4O3S@)l=K6i#MzRq>SIGY zwPc&X#lsb3hr=btG27gft?2#kAD^-H-mE)Td-#7BZEbagKhN#&@2_tm^yvE+r(YMF zpQ@lackcGg+}%?*HfL79e)Raqv%<6Q9==I@^ltq(6{=FV(Gk?*SHxeC_}M literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_040_stats.png b/res/glyphicons/glyphicons_040_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1652273126f8fa9ef277c7b0b6fde6de60b106 GIT binary patch literal 1473 zcmaJ>eP|nH7|-knwIiZ}!a`lo>&iZpyGxo&ax|@%++__mZEez-`G@9u_cl3txjXMJ zZCWt63F3sw#C0F6u45A|qK<)U(baXJR*T98ts;u;N;jQVyOoJU!hvJyw3%1lS~uFkZ5ns9)?P0Hsf@EDLl8pwtYNfCKQkU7<=iLim3#3+2m{2FHb zXeJ{H6zOJ3mk%esWH3Y!On@d?C*$>cf-D^j)Zrd8nCW0O5NaF(#JY(P?ZpWiCp|Pl zuuh*Z#L#5O>-91ox7QOWV#Bg-a54|fpe9zljfIi#f~A5Q;0#5JDT-7am9~^(D0)g! zkzkZWHbppIlugBEvy%m`Kofg_5Ym)1l5Yhi-hly5K<AZ85(ynxI0Lo7$hU`lpz`tD9k7=83joa%{ieYPENvt*agtV zWh4V_NJ@QbO5_z;ugA<8ltc)~OUqbnmB+k#)zB6#;U<{k$_m26$`S(^ZmtGbboAvn z92UzOG0f1h>~~`WCtFJB`zMk|UbC`uIMQale6P3l;<_zO`=$eB)_a0muDvvGy^##> ztEej9xox4T+HyABHHq&WnUfEOa~~|u^dysK5Bt&Mt>vNh-^yPs5yL>q9Vokes^-GL ztY7_M^3rhkgn#4Qso!c1<34iw#tTmI_k}+n+WX>U^ryiiO?95c+E)(J9UFR_=jKbl z^i_I?$7gH5`Mg`NJo?Xus+roUie};D_FG3cKlSF@m)5`f^wQVv(&x^Mq>0o<$u*dJ zxIVUa?~ZdIk*gm2WlzYq^ikPj$53kF!oMeMhyQL&j5%)3?ypsjJ^0!8$Iov%usgvl z{Bc_ChH&C%S@JE4Iq+M~6D)9=^FpKQ%mKT$qq1Fou> f%$1>EAAf$0MY}$F{(#&!W&Wv#*%s!#Kw|fQ+6Mz; literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_041_charts.png b/res/glyphicons/glyphicons_041_charts.png new file mode 100644 index 0000000000000000000000000000000000000000..e4888a29d03aa555adb2790a3991acefbc74774a GIT binary patch literal 1218 zcmaJ>O=#3w6pj?6R=V)v!m9Lz2(Jpx)H)ropbt!w+nKy3xp~PQ zXWCV9A&MK_2#TN!7p~O33qe7UBDi)bt^}VHT!;$wWI8hzUNI!O=iHp{obQ}_POi_* zo){fDIKnW@Xyv3?gY^(R2ZndUd+*HE@34$fYk|&_CEB)Q%;+vz#B3$78@PsTcje#L zc#>g;{`2Y!bfJ1ib4ZZ2Q=4ojhycwnlhd8Zc9t<^7jeT2i`?gD&pFm}i`;p+DpVr_ zH@%aqF`i$YtvjpBj_PvLQ|x3%0|x=7HromOFwr_iuIpC=Io;+twrfI{i`*8eh3Xt@ zkQlRaHkWY(QDhOyig_6!@i;39qQnbuql}o>WTZ(2ws&z5Eq0f*npy6}0LX%VpiaTAkC|5ozNQoMPo4Q53TvD}_=YTL}|t zhYn7IrdaP6Hve0!X2jU0B(4+U_giJINhnF0Bw~$u#2&5Mju)mI$I_GRamBHB8N20} z1Z?*xG;b#cq5_RpfE*=AUj$9bl`W~H=M34hkj(Y4?zWN*GDrW%S_Ne4Le3OqL*#fM z<2oAksE>O+s{6Dj`Ci&5ns0{ z?QKolw}eSZ#lZ-IG8keU!sNye{Va8$&nWpZMe3 zaQ-y&WPIfK%eTY%8~g5$|Fv7Ya&Enx8EWjAJ7vB2vw8c=2EM-UaO3OywGR&__BS5B zdegi&I=}wt&c|yTW7BsJZ-RPieMbGh`Si=!%-SyI;@|47XA|sH`d6t~v*zQ{r7J%H D78Hcx literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_042_pie_chart.png b/res/glyphicons/glyphicons_042_pie_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0ad39789fa60d64d3db5590ff06a2c2dd9d6b9 GIT binary patch literal 1459 zcmaJ>eM}o=7(XNu#w0Ld29}Imj-aBpch}NuduhS8*Nz&>SgBcclI^&AX-}?q=iQYS zlnj~ZASNu+;QV9GWEnAG4i{&PV4Oo{=Eux1*@sJ{{atCL4D zRN&p%W?P5|DLxPv8hcdG+S452dOA5Lk2Tbzt~3oDB!JGM>4Ye0blQz&{L)Z1)HsG_ zO!Q7SwnQo#YC(On3Q(KbYT^izL@CNl*4ZeEdj_Mp3*6#j+a)vy&Y^NkuF_S0H;XnilAn6(;MP?X5=JZBYfDL3tM&^>n*C6A@ zl1YK5DVv|NItj`_`2r-#cs-Qg!Z;jupWoy2))96inBib05Ngak#1c-%;|(|=+U_Mu zzs2bcFdi!4a5xyd&0+WEut7=FS&0KiPy;L6#X9bbrF|-3by z%7$gJ{ECt-XHNYe>$g*khp;k)%|~K5B*SyGF6bi2&ZtM!vyvznb3%)(6oUmZ@t}iE ziaJ&w6T6kTz{!&4!i^ae1qjGUOIUn`$BcT#(B>@RCK%%K3c|zk5(5ctt_oN5(xB@& zg5+%pGM-5K{E?Bv&0i6vuXC#l9+^J(;HJYL5!VW@A&o9?x~!^ZxP=M?zSb{C-yR_6 zBDFhiZ+C2v%I#e*-1%|*h%i5%`eHIr$qkj(9;i}2+x@BO%xV9dg*Pgn_-*acS+e2D z;rW@Xf9AQSZms$9)Rseo4+P6QMt|vlda!h2q&NLuYCjs>{4g^#uq$?bYGHiu#0NvS zpZ~6;ZR+d~|Gpf#?A#i!Z5zEZJ6$^0zv&kGS55x(+#+5vTe9ZerqZzz)B1g7-nJKG z2QT)QFH|1ixvTdI)_?xQPv@TDr_|a=*RD${=UBGRa-CF zcjEfZy?JNW_c37V;LT%>lau+S(ks8;=I#!g+DIA*Qd|MTPSE(>H0W<;4tclr{|5*U{R992 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_043_group.png b/res/glyphicons/glyphicons_043_group.png new file mode 100644 index 0000000000000000000000000000000000000000..c7cd942c08d3ee04cb1088dfc361c979c976dd5c GIT binary patch literal 1392 zcmaJ>ZEVzJ9Pik2VZ@m%G0SFDO1Bw6@7ms7U#{6P?%Lk%U>(bL;+Yt-Ui;i#UEgSX z?lv;Bk*OgOhzpSsmf z`S<_(|9}6t9vK`+w`_TO3xXgmnLc3%uAT5{+Z=%JJ!W?rE*+kj^MkWbbXgpHe&5qju9|Epb zb`)5TLT4QebN6^hbwyQK*R#uxUX4>#aG(PNn4SwskyS>JIk(TzU;$-au#~d@H6z5a za#>S3niAX z$6_fVL8n-j6&Q+Tl67pxbUoQrfbZ1DY7k4rghVnG;~$IVcn8Ry zWZ5V`OrzT+SB_4r)D`(7oDD*Ze-=blEJzgalPk zkjuJn=OgOm?9MSv7 z7kC6|XwL|VY~{{xFHN`1pii7wSZsZxDLwL3+HOi8Jh8Qb8EInf-Rh0dEY-caPG&Sa&!3k4x;}O$yFXQ=U1t%d*+ID7QHLgQ@pAD9sbgp0|M!~X)* CeM}o=7%$+eBM>#2+h8spw@P$Muh-J+^`Jo8YezH6u+)ihTXwyBDL1Zn=iQYS zrW>-szSx!pVqCKL*TjjUkxgRIKsJYqe>fpynV*B{;xsIRj>Jfe`d(=niOVi`_rC9Q z&+mDD&(|HQtKF2JTbOGw81e(vbO^3%;ZyjK5xxgTPu+n_f#z$_>ZL|4!6?As=A;Nf z0x>2ELV)2~U;YA=8w@$W@!JKyfP^>Y%|c12#E5c3!VLB z6h(N>g}z`9T7t3{H1XAK3aD?Z4YO^{tdm14E0FRe1r5Z2#vsX1@k$Cn>}FdDYr%1ZAk28FognaM5vv8aVitH4C3q=iCn&1}Nna@R zrf`i^i1w#_!IKMZ(lnXEutXwZPT0(n62)+*)2Z9AT1%itiP|b^OtM5&H)Jf(KxGwP z)_6%obc;+xifb+uGF=QICI^E{hD9}imo+}+<%Mv-He^yIiAq~hdQ3K z8lYWhJkE0zVfPU>r-dL1uOG*0kDKsWX_9n!eQvL()Z);c=?0bqp~TEVELm#vTWLFK zAsikY_gS4zKkX*`BuUZ^JL&LbumMrk7?B0KQyt6S#X9bbrMwDYG)W0dl8|YYx+Y1J z)Fw$ry!8a~RFGkLQ5QU|S2E2ND0~ax{E8GqQl+5ydoZxzBy2PXjL{0i$Ki>z`F&Q8 z+vc_Ve1siMW4UE1%R~+V|HJwm1nsuiXp7y8qZlN^v6RMZ0!a6$ThP)wf!F(l5*RTG z6H>x~MkX$3Xhl?Lm792064i1{??HiwfYfdgi!HO55-)4oj3%4}eY-S*@US$*K!lU4 zz!4?S6m}a7S#p4Ohm+sF_xwccB9hnH|1a1tj0<(c=a0(k&TSaaw_X7IT5^Wn3sc9B zRTWRyaN#xIR4E_L_kKV2`JS)Vo(t`IAn)eMsV62s7-(NHx9{ugZ1<5}Zy5JSKHTwA z(QCZ(2gZKt%l7Ci%Fq};u>F~Ua&X1!Gqqqk^44*$vnRW2q26TNvHt9;=yTV5e(8M7 zZ(Or&`ogQ1K3=(ZbaS4PjhRkN7yR07Izb^l2Y&8bKVSV%*)`K(SwTZ_u zS%o??w5AQks;$J%}I`=YFr#BuL-<&s+Yg8XR t(w?}}{rk*N*2b$hXXYmRN4nlM3Pk__ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_045_calendar.png b/res/glyphicons/glyphicons_045_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2bdf4f1c16ad2abafd46df82582aad743d1846 GIT binary patch literal 1215 zcmaJ>-D}fO6pv1(lL-#-^XZx)DA*=9ZPGNX&NfMB#m?Ck9r$9F+_qs!ZcJ`%H}^0U z1odhEfiJ#^_$Vm&38IMTqy7P+FY1F2zUfKV&Vj>_+}wL|e&_toS8mQsPwm=yXeY;U zyDF!Q8oc+zb703XtYgcKHoOipbB@i@2J2W6;ffBOC#d3EO;RJ4vv~P6nc%pgZ*F~# z%~j86Huck1qLc3WA)q;KVzL`r_5xvOo;2N{z<+=Agh#GZ;4jEku^Q^6<(^uK$n4T| z-CkO-^A10G0!?%^FyIqrp|0-*vDPi{J-Zt06S2Ufo(fwi@N1;zsxwHZ5kYb~ld?sO zk)ot=R#p^z97!UU1QBi}g|nKhXi^UKFCM%_PD861<-RXC75Elop(Y5OPAA>Tq-oR? za6X?;Y)DcHG*a5#cz;rDHKde^Q4F_>QQIImB zYlQ+%i-PYbarLxgRwI9DY^ojC7egY{NKD(24fSY@55SPS|2rBeI`+C=*p9qjoQ^FJ zkN6~DF_6MNM!;M<8@W(G%QL9mPQF%*0^e@Cj;6?_lF5sTs_12mjZ#rDB|}wnx>?jq zSuvM5OAKrTf+Xz#R?TM0k|FD&k}F|sO8I=*C@N)DRgIji=1K!>C5V|7*d%e9VBNpi z(toj<9ubSts7|RjXqA~3Wi)Ql5b3iDI$E`CH%J7>l1lculE}S6oN`2c)GLMNZo)vs zDl}RSVw50!3@0^HHl>zEgSjALueWghAG zXwhT+o#!TfqIp)(goLCV(y-bd<4-ib#jxetG>9jJqz6400KMHBR@h*%C*IJs15KEO zWV=3sa9AH=62Rm}Frs&#ez*qX-K-eJdiT@(uiw8Xhen5gw3LEw?h#?vWo~uYWx4KVBJob7$nh^Bdz+Us?}F$6u_*`;NXk_h$QtGo#sUS$R48 scIpKz$F{vad2h$d;jDP|@X3`e+{NX)?EUBSdy`*E#hfeQXnD7(cCUxUnVp1#S_~8{3?ty}Pz|Z7=Jv?X{zkvauDn38=TbckQ|MuHIc~ zH=MXF1PSpEM*^8nBO;4pL}e;bB+Dd07Ue^X2FJ1mqvFTDbSy>|!1qc!mPokV-TS`J zJ-_GqJzuw@W^GkoPC*WWAbI}PY%N?1;Zv|E3%-3Xl}^Lu0nOW>)yd6Tf>QwE667X; z`lDP3)B;XueQpR;Ac$d73^r&Dfi(;-M@^irV@gJ25RD)etCBH}Zvh(G1VW%1Y#Z#7FV|^pssCgkZ)_@9Rjwh60Jxw&_EPu9GZ+qB$Y`zv6Ni~?sYMa zp(z!u#fe=f)exvbJ+cB&%49L}1WBSaZ6d7{O_M88GeMeh0^YQdv@#UUm~CkK!k{-r zXl80zU)mQuIkB*&#TXn|)SX_yu;uLrsL_icsnhHsgDMpYvQ>}=wfLw%?`MCbo z&pNSqTof3Z^3oOuLECAMk0e>Qi}spXyWQsTx;$Xd1(U<$>-S2>9$P%?y)!%8keh4BH5hWUXUea1|8mdeyE-~Lwsm!N zfu2py`cZ0Kuhc_}yH}o1yzuGizcz)JW!>F8d|>jz{;Oa1yy;$a-_BQoE5GyUyx!N$ zSrs3R96R;8efGRz>ha?n-CIM_y4GI%D+doxmv$wJ&%35R`(WvB3FG%a?8qNjzTrsm z(8t5|cbxpT&oEvv*L3mRz`uoGl=qx1em6L=r>DJbMWc0W^4XU1hxzUmmECIwH=O8i zEZo)p(^Tb!tik<%cUGSn`YQC}iGR2&-!QH>k`sAzOO_c=wI90w^N~F{-<7zwZ)n_P7{66rOS_8uB5p-U)6LbnyCip)TrS>q+$Fj8sCU-uIZx^b)8xIo&|H!x z@Advna4l14VZ$+}P#A0!nM}5+6j3^=8#=0hl1-IjF#b`pjLfzz3U2&g(UC$ zK6!r6^Lzefav<5;-nz5Z<#M&h`-Bu)pG417EnCt1pZWHFwCsRl1`ZloSduK@iYUe~ zz~Tid2U0*%Dx+6H$mM!uSxskPCh-C%8wHQ#=y=Kn6QNzM(EhS1$s+(_!yu>XVSHuo zOB_>`F#ZaiAQL7J@@ikz0)y3LTCR@BK?UF6gN4c*GEe|e!pa3rx4Ci{ui53$-VqZx zR#Sl^VSJrbCNY5Vh6OO%<8#X-MPUr%q5L$%Q2Q`1NqGqp-He;^b2P(w16cjSkvB`p zaw#EJ_k~VjJP)DC5k#p}@|1iY!^#mMo~gE!iZjhWdpnz;iG;s;5c&(Yz88UM?qL$EI^aAAE5(0MTy>E zFeXHp7|XIkfMx^H1~#tSP|{`KICZeEXP|wf`*kg46V^B19<})cHS^CevrYs z6Oydzj^J6Rl69`YQpbQ2vy1{(D+Q-MfB{LdsL=u_MlTAVLMPT26TQ)hkEcbEq47Fa z*_5(Im-fM9o zk}faaIYB*sncOBGpE}*u`}?yTJi#2je0^qi&!Nd9&%b-**o}$FdqdZ|g}0u0 z`ML4KA6)qEhn3?)uO9t$;cTXJTbf_kesk&e4wpN0>H@y=`;+sqT7>U1Nn2`T)cF!`TX{B+s~)kX3zY&uW34X`^5Ovn~#aDyN6r0&hQiQ>AOVV z({05!-rx1o=;+d(#Fb-GQ+Rak*A8j#!pXt$?t@FIwD;mq{XN&Nez@i1{5AFV*y=k&+?kHwu4QMc$@v3^ Zwzv`>Z)_7~7{A5H{yAZSbdUwlD{hR@-d(%9w#T~B-nFc-j-_ix4Sv||?p=56dUxJk zZMQ7O4P69`A28xXP?i80Q%MvtTO8s(2qH5Yi65KNs_(ZI^32n?W&_N2AJep0(ios<4Sk5m4WlN1? zXwJm!^J9yo647>)Rds+;PPaoKND`%KC)q&JG`R(J5u^(z;7vQo28N;;mj}&X7>uTi zJxq)X=VQT>AL}(ujluCuCgaSwovNP1NuSSW`Ea=$(86K#D<+?HD2Bb@fdhu1OPVRE z3Tk=eyVbPm#~{eM~}S#hP8Wepn{<&EZJ#kUC!kx3OJBK3Mi%lNs&25kU6tUmtX^VnNx+d^)2-?Gv zWXR?7g}DG7_IkaXhw^%Y1#CnyOkNRy71Y8?_ps~(u?(vN-c+2?Y424{)#z0< zlQSxFh>_mpM)o`I~;Na18$ZI zg=h-PW5s19D`XA<|HFnnG#4P;96_-phC?!y-pmF&c4e24x8Xa?&CeU*<8VUN*D^OSlP^xU_=su(ZTLft#zt6}{^E z@dAPr(Ge~X&(3{x_+aHe^pTOzORI(|t7a;zXDX}4?A~GfHx*E<9%|b*W}6-zeroU3 zm78|*r&}wNx6Z5HwIkpXv3k7gkDxI>H{ux>E$&=%_RzzdpT0X>KKAD`;;*IglMBC0 zu9^_9ygym8`QVxFj!hCr#^1BqzHcF_-+bxIn((as=AGfG11}W)yHIw6s#|5e@nYuM zolo_zSA6(I;`A0}u;#OQWPYdZwqCw9cC~fK?sZR0k4~NV_?=qkKQGTt?~0tNf2@;e z-gkC&(44v5wf^lrqko@%wfOp56HT!b-(GvS^@FV&nqGPR@N0F~Jx0y`uP8e@dwx$M zQZlhI$_}=k8hX68G<353`6I_0j&3Zyl-SG7H*a{deoQ~Nz3jlwpKsV)MUVba;y=D^ luKurD`^6pOgSLgWUC5?2cQ3n(rw>{GkdaUucP7|1{2x?e;Hm%s literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_049_star.png b/res/glyphicons/glyphicons_049_star.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d958c8c2c1cb42f3d3619d5bf7d617f756eb5c GIT binary patch literal 1369 zcmaJ>eQXnD7{3V!o6f~WbP9y?hNv6ueYAJip6%e;yRwFL)~?ef#K86LU3=MmdH2?K zixC3MglXnbr->Sq#SdnT1P%CsQ4=vJg7OFd86rkQKu{;}hkuwD-|O13M8f5+_q@+N zzvuZqU)`JS-`v`APYZ@&t?6DVhu(Lir(?y<=(p|gqsM#&l!xGeJq#;~3ouc$3jj}> zN)hCMqK!Ur9K`MaI zwK(w@o1rpJ5|s4bF&7Ms_2<>G5jCn28+-6rRX`3*02RDy8kQ$i<3!D`fMj1y5_ru7 zj>L(1QbU<6p0r(nv%ye6rDz)GxF8*7IgZ|dGZf8`6uP+p9Tr$lV0gTK5h$9g4GTFb zRgZ;EaiRpFBamdJQVCWXM3o6xs<#jeZNWfEF-GRDo;l4+u zV3%Q>KuqUTFr7?h!LjAl3x!HXRuzY&gA{3+eqJ?e59Yu%8rQY<@}mwQbHKC9u8R6G z+}Qx5+TA!%!%$Nf?3}V|)bi9+5*WY)7W5D)y2c1G7an$X)Ii0MY_;rvO-pg2T-G&# zV`VNBrML)}OwqKI5ILEVA`w0*i^)Wo;{9O0gT+9k32F$NN=P)DVj>jBCuv${qS2Hj za;ZopBJpg5Pc*P;%Y%xg0zasa)vsas8)Ai|3lwO(dD}J`qmnJz(Dq8UgC_?#{DF+3 z>Xxr~(C=iOD{%EEftGS@6R)*G(67UQq9bU~c$6c9(x=fW5=zNTLJTEYS>{-xj@1^G ztdTha{0}ShoFq~qiDHv9K_W7mDnK0?pgyCb0qc^X`*R`~id94f320zgDI1XJDH@|r zNmp&li;?~e8ae{hq1t}8rkZgn&{r$ z_3FjFTXxU29li744_}FQPHsN<`PE;7UDUar+=&Z!{48Hu$-nX5r)>9?(}Nca?EBky z9)9bi6O&t?JwLf;@a@F@cP5JW;-BQVtUq$OV<&U`k8i$O;hp7XDeQXnD7{5(6by^j&shD6chY(@3_tD<9J=bk*@5&16Y_=*3F>|-Ock8+P^6o8b zrx=10Fb+^46PJ+8AcjOy|M4HqWK&FR7=EFNF)@UQD6lXRb^i#)_quj0k#M=Y_kEvx ze$VrJzV6j@$3{=xBXt;td6I2HCt4fO^Uz(j=zZbbvLk3&3B_*MW%k1%$p%YxY^9&? z6cS}$=oBHc5L!G*4h;?YhWtL$9w6y(IPBVB7%$TBIt2qtd9UHDu2>L&BipJ4Rnx#- zi&CGNgAoETT?j$9QmIA5hEq-yN*S4#ERyz7q^`Shm9!n$32xH3rM8nPSb*#Vj+wJ% zRFD4E6)?)(?HyGV6?sw5%Gp{ePDLhx26SLR2a%#nj1Y7FNn1q)lr+JVbMDuq5Fv6o zRpB{S9fdoxEW13o}Rnl1#noicV@OT%8 zKc13g)o=yt+)9?Y0$be%l!R^Sc&QY;dJ6^=9YT#3L@_cbd>WlX{)EWHqW(B5iX2On zvC5K^RU$`#|6#=-CqyZ~K(TR}AQ2fw=AjBTQ0~#F2Fp85b^CzSyeU-r-^iXP*V}0v|GTEODvYeOPaQ#i6+6_E{-5NEDkX+(B#@^L<2WE{>HGX z^+_R`$^ZQRA&=)}>Va48tlc%T>G-n8@VA{EBb!=dzhif|wN|g-Yi7rvdDEU8tdonU z56u7e>%YTiKAYR`Kl!d&e|_cawI?QO9zH!?Kk;$wr?0cMxt4RDspIUB!{0?M%HFPfe-Fz+xt+xJWb_7yh>;&k)6*NQ#$)sgCdKG*hLcyWeVGnJja=hFB0Z>`g%DXOv3-m)9pvkpLjGiPUot>wa=bq-e^2OI`)SL zYdrShTl9A`nLTR`e9}Vq?miZ-dB?fDe(a<7wqE|SVO!N##!KymC$v=;e?0V8LoXH? WpYNIN*}U8RD<;Jb;e%N3&i?>V`{Gdm literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_051_eye_open.png b/res/glyphicons/glyphicons_051_eye_open.png new file mode 100644 index 0000000000000000000000000000000000000000..083669dedf9f50c984f174208777010869b70ac5 GIT binary patch literal 1449 zcmaJ>Z*0_L81J0Uu`#m|5cWv)>y}RxXylZ=M%I&{8gEG4I-CbF)?b;sK zjR@HkWhQ=LsDvpHRCN9Umk^1J5AuNk4pAi0xP5Sm6GcI0q6VUp`1W=;mq=*ZzVG|= z`906?`PY%w=0{43DvJ;VDT%IS+u>RRpR&RN_^x|99feDU$#t0>YOk5*b%2CKwFjWl zBp(OufENe)KLY^-$-gRfc9~tVb+n)+oxH8%w2~S`BS>J4rSU=^Fwq_mmy{qjfBaJn zmBb+Sq$ftiGzKK3wSzk77;Nqo2KxlRh^<+T1}qvHNCJ~bt)#3Nv=ziMc4@e`#W;p$ zRLs60wm_;Y)`~K!4p5KN?GOl(L@CNiHhL(Ed2@}f^#xBsEMb}&jpONb+L?AcRXvWAe!t(g;c_{khQk<8Ox|)R#>$)p78rsqX{Mwq zsBMw&QB!6RgG?7fNNTazqG83zCJLquw|EUFodljt+HqyH4YM8mN8_g2M(2PA@OEIR zDP4f|=v|ou!`$84QBF}57WK50E@$Et1supA2^7q0&e~q$1 zER~W(n(}az+fPtFiiwaU8xB#Ni}m@u3>RX;jfB^BW*b-vgc7F+v5_!KdLnLupu7x8 zaxT9=!iK1b&*x*k9-lXy!$uXuD7iKQ7G@TRJFs;Zo8mDYr6szyT9 zP^N=ISH*ZiQfxtkUCAt0pi7&97}3=vnkfY>-Gl)_`e37ZVT>*qJ_%1gcZ73=LvF^y zag+zkV#OsX%S8?W|HE=#iVYENmhdnnhC?!$Q5Eg=c2Vgzuz2W1HYGP?yVzQkfiyrgM!ns5^A?cxZ+!{QJF1x~IGNA&%I zzg|L+ytXJC>a=D)e7yM3NwienKlI}5wdjEr&EdMva2=Yr>`;E~A601HodK(2^xO;G z^N+fYAzPZxZhgln5c|>~Q#7e$4k_-|U;+Hd}q6 z`lF(n6Mqhmm*Lk93wiJEo*e=1@6rZtYTu^O)1dM$^W+CRcjjL^oj_i()UVYO_lNSB zit&RpbD#I98{9M}&KY8od%jJ{J2UEvx@O*dUwc4Lc{l)Bk&mMjA>3fEz+V*d|Z8^e!b!xtGyT;f* N&nVZ-9u99D{uhC0@ZJCb literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_052_eye_close.png b/res/glyphicons/glyphicons_052_eye_close.png new file mode 100644 index 0000000000000000000000000000000000000000..ec8c9c509fe4e2d70224040f39860102189bf411 GIT binary patch literal 1523 zcmaJ>eQXnD81ER6X0QR8fs7E&+Y}tMch|1h_FTcX*SbbJXWNXTf$etpZavrDop)E) z4HDVHM@WXuOfew%1tFN})cFsId`xk$q1gx~ginEhQ{-cFPBw=+-z)7{BH?m(@B2RY z{GR9ceBIWv(&w|Y^0IU~UAC`;4#0I0e4fxxhwmwEPdCD4zUm39L9tq`V`QLna$*%g zd@-g51OUU;zt#hab-K(ud?>7j{VOR}j2RhC$C!vo5UtY{uSiG?TMJaA3e@m|10DGK zD2ni$16^hD<9^8vB78}M41x`%A-18GwR7l-oQEJm||#R&o-Nh48YAxUBxV!{a%hQpgQ5Ji-Qq)b*Mb)nFk z%vDnX+MDtPPYyJqsuG1^b#-;dI`CIi$kDD{HMBn*O*pSC~)g_U_p zz3>HQF5lHWgJSWr@lf+@oijD!(J9E-)YxRTn68UPPyJXBi=)k^>i z07Z<;EUZU$ei{sO_h?6HMUI`&lj3qT87IeLAPQnYP!&juNHT)VsTXA)7LbY3A{*Df z`e+9lkMkTwT0ErLj*~Xh?Ij4>~O+Gex5Jx;f)2)Am^Gy{`?P-5gD)@60t-7c>e zC#^I=cuaP?mv)j~o6SaBEjFtwjr9qN$_OmboN8G90oLDOSvqnE_#f6|C21#arg4j#Kru*$V=0waqaf9z&ZwH&MR~1Hs3;@U zz=Rk$P|d`nD!RNTS}#R-Ruq(COzXiY4*|*DeJnP~Vp2S*Y15i;6145a2*Sg}5CZ{D zt_(+XZ+|#br^|THM>|7_^M}fB$2Q_KHwDMvo%8GT`Hk5p_0667W+@+^lFw~yZV_6t zPhTGn{I#rg``%c=&F{LdpX*eSJ$_^Pf@qwA7>*R7nn=NA}1{nK;m18;ug3HbnO zdv*24XLIjn*B%<~U7wXx*_yHYrSZU-8IgG-y`9@v?x3z6`-gpOZeRJ}&i6Yvl~@jZ z75bzwPufz^u=blBOh)0Tqvz_iY2R+1ddK8kl2h7yK2lLI`0V$I+53i&nRf2jfqZ&&mrI4s7rTGE@zn9Nt26%%&J6#)`9gS2xv#CqHuOX5^`S8_P<48@LRs1d zoE;w>?#Mj*nl_u$on?rk*}h8)Q2y9PfPm+&b+y?DLe;?XJqE{{ZQuCw2e; literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_053_alarm.png b/res/glyphicons/glyphicons_053_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1e0221a88b706b2cd590a568ed4f3f7fa6f56b GIT binary patch literal 1493 zcmaJ>ZEO>D7(dj(Sk?ptr!r*cb+}E}-d($1uV=fh?X_b-x3M<|M%eA{zxJ};3)kz` zZGwP7_F^PNXB;!`gCS@f3$hT%_~39Mx@a&nOGF*+?B5pi3W2I{)1>iMoV-X&mVrKmf>KnD`gIW!?foG`*OfrJZnQBdh4dkM%!pDuT zm8=Jg$3=mm90AJiA}E^j2T79kd8vSnrD>->;Pv}T2&WOuaIg{xHC6#)eNL~-?Gtd|PXG|f64w9}WyR?0D*lX+kSHL&7+tnHy##;*ZRSG0OXiKa)TCZgy{ zETX8Wzm7r+LmV&4hN8&mWQr@$#C9MAHAO;`tzg6lFd#@84w@6@2uaW+Jkj=Gz~=MX z{fV}{Fe*YoQd+{|D?BFED~2|02{*wImsb!TmX{dFaC0@d zqAv`BAcCwqP|14h6F-bJ_V1rWvyT?nP(2mRj|Elg%fh+UTMnB}u7B#Xna;hqp=SE+ zx`rH<{&jxq=0$gY{@E$lkcn`k&ten1?%5|21$Pe?6!e*!GlV18yc-9l%khfFoQx|+ za+_<`xn>4l-N{zZPG@K4pAUrBFXX(_Ib(_poys13qj_RBy!G36Gm4PjV(M!3>n--i z%pEhw&la8dMeyw|fAivVQs0KFiP5sMwg0a97<<`rsD0P9*+b{SZuW6c-FuAln! zbooZS{CxTNj(xXhKHC0M-U0g3(4OvB96bx)J<&P&&m8vKczgFu)7Zgt%%bnu+GnKv zRpu^!@yT1=pER0(ocrqd=^GbLd@wnjaa|bM-jL`1=9Xmw8PFd$-8nRzXZ+Dt2CCRm IU-Oaw0Q9*79{>OV literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_054_clock.png b/res/glyphicons/glyphicons_054_clock.png new file mode 100644 index 0000000000000000000000000000000000000000..46a86c1a954e49a4e8d6cf0642d009168404d890 GIT binary patch literal 1376 zcmaJ>Yi!$86n4WpRUOmVkBOCsWW4ew@gt2Ln`9-ioihty)zkF$OEr&<6W4iEb(rD&5K$Lt-mvjHehvjMon&)CvR=e-K=!NvXuZvVHG8 zKHoXtd3jH7wrhRsO|2M)txtDLIkax}pO&@geYG6_11)V(?uUK$5G*S$z!I802=KJ2 z6hICrTJ`Y@AckSrE$aDx*q`YURND+GzD}rOItYznvCfL4sKWr_gP@>WabjuiZ35S| zIPq{KLuDKh6!q>A7xax}^Xka3%4R;8Xc}kP5Zw`BS^7Slp=gGr(9H(v4k5w{42Rb*0(o<_At5KF z>b}q^P81<@1d=S5%b{{OWV;2D=6T+?!7xFj5%j7SR4PHs+tRQg0Z(;x2kN$k`xcc! zy9DC|V!9lH>0~l1hApq2D3mg?qBtZSqDa&9Ov-TAZ3n0t1-9f*vA8*BBw@!VXtQ1yl^lR!jcZv=k>wC0!HP zh|Gq0ijA^jil(Jxf|VI58s$VeAtpO0&UfY;SPevykcP0~4xUc%GE1?XOw%&M^C>C8 zrlQfP#6_Z9vVl!o9#kw9_)dMSj<88C!HXj0W2OJZ3Ze@XXuEmaHX5zcTeP9=6>SF> z`&j(0jH2q6FSy&UWSuK;^(TOqa%~f@l|s<3!GNNpsL?nSBZI=H(J2~E$xJd479+CE zMu<9ATa~g#d*l79!(gqzB6>cPXt4;3Me5#4GbwI z0}@*cM%5|ms%?2O((ge-M}XRH8B4CRSQD>m+J+{Y1b@3Sg6Oa^#K1z6>!J}Y9w}VJ zu%?!@l*m`EoPOx?#&h`f&6l3OKiM^~YoeF?snt5$a_fbS&X_g&&Ul%={pjKSbLBIE zC&~8PK0UvA-Tsqi+j(ln|pL7 z&~}MCo7+o1_2$(pKWB>{@Ux%1zi0Qt?w&mU#^l((rBiLsjeb9!J9=^Z*cTJK#@!EN zCtrCc7Vl!Zj-33pY5Il@2d6Wwciwy8{Fxm+-{z0ce%I`=%`>0hv45O;d206N_p+~D zo|rryc!0r-!0E@DHcY+sS+wua4-Y;vv)wJdcu!!CF@@r@^S@O;n%6gN>umk=rLVvF qs`SFTV++rJ`Qyib{cbPxjW%KVrB@eEt(DvTe_mS7O0OpecK!{6anid0 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_055_stopwatch.png b/res/glyphicons/glyphicons_055_stopwatch.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9243e07d1a5de6d7b4dc85c91014a31745e9ce GIT binary patch literal 1486 zcmaJ>4@?_X7%$Q=B(k}<&7n~*Hx|^76uiFbCKijK~JuC-Q5)m ziwH}QZBdLcqlhNM%$RMlBg-T+OSTb2F(Ww5k|jFLV#0#i&>547*}{BRT1Mis%iX>A zzWaXP_xt|c!RqkV!h)v?OeRxda2rzt*C*lgbbcOue=xW1XSfvUY=d5_H0$l03QRsh zX#z+v#3N0I!wM?R5%J3u?#|g}e$6`iYX>Cof0rzPnVayr zS)Y}3vIN1}-0lG5BLgm%i*Y(!PJb2~lr^1`d0;p-u;P6z^!yMkMXP|*6*ZzLQnpp9 zql&I*Q6-MhwIuR~`! zU~PV%op!J+=|D4BVMWTakwd`$u&k40d{#SSb7p)yOpp2`J+qTUqfaP_ zlUrayECOie5|WNqv`8KCsK_g_=E02~ltc(f@0PIm3X5s+il)tK!bvc;%OeO6%R>xg zIJqhu(TR$=8zxguTafWZl0TiU`(f_{@|feR#VebV=D<|mo}RTHf8bVrQIC8f|Jk0k zQ|5KEMVJ-xKQp%3`!$_E{PEwHpWt`CI8lDCV*9kG@IaBd()IpE`y*XLi@V;k zRc=w}qK*8;mpq>jTuLpZz=6qcbKiW~^4p=#BWFe$HT3$-%~W1z@6h_{W7qb5(cSmT z*uO_9GUsq=K8LQmFao+ZoM*xQS@$W^@5$ErRl{?22k(TeEHYacYc}0wp=croH-$v%s9vI{8&D;{u4NTm06fYT5hM78aVW4qMXW~%r+TPLLUFBfMwKqWTAO{T0VxY8t?h3uOwmt4Z zw!{xM&}Cbc50@+(VOb(-Ow^ERrfw76P`8=P#DHWh3kEa4m@-_9PW|_|V3WNtCATWHCk4 zab1A@Xx)?n!`j_GP{vRcmhH5-E~oMo1supA1{BkPq{tK_$egLxCD=e-W>q0>eXV4@ zSUfI?3{7#g(?ig1+8-cEw%kW^4%Y2<`8l7zyqIuV!7K+Wfly-?A=X*!A$=Z>BWM># zlAOci39vpo;C8!N7v*-9XRwuuVe*Oqte_TFx`}0Pi)H*e;7wJpQ&l-LDm78nRE?;r zq5fJL-5lfvNwE|~RwvV3fi86bF`%n4G}Q`5x&;G*bi+Y&!5keheG;DB&H(2q_c{F( z$I%p)#)>OSmdP9f{)gpUH0vXrEJ68642NVyfiWdh2I(2~$!1!TC2LL?nO7pPAT|-S z@^RV3N+WWo7L^25F-mZ224x8XQqmF@U*R#OUNN*8OSlP^xV(b!u)M@Tft#zt6+L#T zVFE$2U_*R$$?ra^_lCxa4P!^{E_kBjh;U}Fd@Z|vD}CVs?IkTcwB^9l!}-xEM$g{Q zh;P3>dDd8L`7kuGFV<7t_1^6K`%Q;#Px#NnxkKLGs-A*pK6zu*L*&I zbe+Ga>2!E=+4vW^GGg8Tg*mugCU-%FC?gL-| literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_057_history.png b/res/glyphicons/glyphicons_057_history.png new file mode 100644 index 0000000000000000000000000000000000000000..a5cc79076466635ff933803088d57ec1e5ddf06b GIT binary patch literal 1491 zcmaJ>eN5D57%v|YPC~Y!bD7hu7AH!$>-CQ7-BnJwyB4|3V+>Bjpp(+R9F@DaYkS_o zAR=Hg*qj+r29ddF7@OIGb7Qh)Y#NirEJCKqGMxWR#)wNc5RyfW`(t~1+#$(~&D-{U zpFY3m`8{9lt|;G`y?Xs>1VOTWWppKcKM(KqnXBN_({_JS7idh4RwXrPQC0zno0sYV z>I<_$PzhMR`Sl+_5rU-63xOJ~#=nc=q_BzAbxg6a4ABTuR2-98t_f&pJqQY-3%mQx zB@7jK7q-XdH~VETXcWp?6j0St9^hJ<|YBO1loS7g{k~9&8Hj*R?P>Y$c;AXf;BT-1%NXlYI6Bh=( zDSQJ}NtY&k!IKMX)HIpG@n|$^ids#Q62u9o)2Z9ASd37^s5Xll8#9V(Zqfn`R8A3O zO^`%Xx5(B@5zU1`rb{7&Wxs#fu&5>y1yhE{SQ#fwW;`6$EpZY3 ztB-bJk%+)kq>Ul1PBZBsy`=;}d)y>rp&bspmvMVNg=V|%OgFF+2qh*SVi~&7YO$KF zX41|O1Y>bJOKCS*>Toz{yUk(uB(XkG)mV`Ox>Fr1Ji=O@h^4#=U^PhzNKz=-Diw{A zCaH~*jC!j`bgQ4`1W^}k(<_@Y@1!a=~3!&=H% zJZ`Jk#xSG}OJMmGDN9BU0sq4?c9M3Rt+d(ZB`_S4;W1to zI&>{~=P|B^PEQkRl-C|L7H?WGsE zyx3C^vB4Z)~!DsYq}T9-IV=X`I?eD znP(T@FVSWW`XhC zIp)TJ>Mh^4uK7gn?78)7PVI!WfK3iIu&*8cvDmQZO4smUq|Nr?Xii6-LHql!{nt{z zM2@y!Exx?#gZbU2iLS$IGY^dWX4>kT-jlOCwvhSrsrAPv2jEb#(XOy1HxGFuoPEBLe z{gZzd7;>$KE8QE$-g-Fmb@BH^U~YC~A@$AbQQeQ4Zd7*D@z?d;VJMd!A+>57~5F3F{rbM zI8c=^{&FBmCe0Yks{Jz-9GMwR$upC3P{I3pL8!nZ13BnOppesan=gd%vRxjnT`_@! zvWhbq#@9%tlS3e8SP%q!v{xo63NVb1>IpCm)eZb4)3mnJB#7HdKL$aUoBhEaA z)r1m4BvrVYxqI(kUmZWDD9c;sYq6^KfS={in(ES;G%$Z2sTb0)8Ri(0?>ryGo}{Ua2qrIo5%lqPGi&4*u3> z-2%b0@BMWAm${Xr7d7tdZJt5#4f9yT-nl1>=^Z7ac5|s_-{{@eWp?(?FPd^Pvj=?`l5dEP8uZ=6|e1817P*{O8Aw6tUQ^znuF+xIkc zwTpG0tl{oMF$RB26uN6pga zBa1g)EhZ0`NU}1|znlKHd+w&5*?;=R&BOUy#VZZnzh_UNv!J8vyP-?1on0-xCoW#b dxbyYRB=+mI)%>~1Ev$P^Cd5JE%jnp_{{Rh3*lqv- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_059_cargo.png b/res/glyphicons/glyphicons_059_cargo.png new file mode 100644 index 0000000000000000000000000000000000000000..2af6e07d7e7ccf3bb2408866476dd6246e83841a GIT binary patch literal 1381 zcmaJ>Z)_7~7{7I7S%{NaKB&XU?WR$b-k)}NZO@ja?Okb=&aErDKpfoe-nEzBKkweI z-GosUKa9*c^n(zYOUPn0AtZ=I6D7{@K}ZyX`hh@*B8VbJ6U2atsPA>{SR&za*L&XQ zp5OEQo`0R}>s{Zrykj|rVQuM@kVWtN(bLh|f_~%MuYc((pg0Hz%n?|YY=FfSa~R-h zUCM(jkd(3KPk;!9HUFmO2H{|4123C8DY-UeMYj+d!y-KuOOlHK;=>@X8d2i+k3S`F zRf!VMvKcyKB|t$(PE|V-ljqbia`F(ggtx|>(c+JRYci^grOo!poOs4Q^Ik}act zjC3`?sCIV_)G$=!MLVlxYqdNTnF1QnfdL&vim5R|%=xEn6*W-O1XC`#U(-UAD3w%& z=U9;oglR6sC6Wvy#ABT37eb+6LX0Ki-E`0m<~mpkL>f{-SW)N>_ycsD=7J)_i2iUm zDa5#BC=?QcY$zCSVAF;JB|`>oP#3G-!p821T&XwZTvM?XrRL8nk4Df;8FK!O!TjwR|? zWl6~znIpjeuwsxCVst>D*#tvSh>RlhP=y+(&uC18bxBj*IpHz&M3v&&{DE+@rH8BhNgKke#| zZ0~<;zxVjY;frs)d-s8TlUd>@HN9D({vNt<>Y>p;PaYZnsC|{FozL7nIe)gJY0sAI zs=1Ul-Ew4ycJbikvKK!S+bgd)tslHy-8VC}`TXpG(W4&l+|N(!e)wy)Gx(m<^T>Uh rxMuso;&g0%&&;70y2WoNJa=JNP9@Lm_=9}M{o_lEy~4rx)|dVRCeQXnD7{6iXWQ+tAIyX(iby|j>P@7i_Rv8)xED5ST$ckN~OwY#^p zn-Z3(VM7zLATd$01d_$bALt)MVn8q`29iaH29v45g%GoZuqEmrd?@j~t{qDxT<-3D z-{+p+^ZcH#8|&^$u54c4jA7WyR0rRK*0s*_#N+5aQ;yz7%Q`6JV8-Z!Wzhl{CmX#0 zPibNS^Z-#F9JmA`81~qllFh+f`ZZQEG>_=$cq*ES&=?lkRxw4XA3(ep6cjy5%%46- z;EEh2b_UW^+Khvu(lKO#%urWW8tRwAGO=wd9;vX%fCiw5S2R_(*-DhC+GWw+5t9U7 zRe}9cVu4gH-Hpc$3*Z5d&n;0jjWdjg_6Hb--hz86+DlUCX56%&4KS=Xh}SLxd9&m` zwuevDe4$g6C_-qmBv~$(J!PNAunHs{4u>5ZUauQzxa~n5iWRqRx7981z?Lkf# zjzzK8D8VR!m@b5%nd$VRVco7J3Z;y!h$cyUC{oj$xT@MV>;VsGJXG7x4w``M0k%=H zBvg;SwmKN)?$M6win6q*XO=9r8mBCgKm{7mp^Zq}SB#Yc%! zNs(D5ATYi##e|r6f~NTx#|U0N6bi-#E*|q!LC2Y6U?~tuJTk&^4CChlF^*z_2rGEQ z;RMeyiBKrS2LqvCtd33THWYOUI8Gg`@&JoGKLX3fEg(X}${L1RZt&+6D}3 zSe@dzY~`0TJ8nJs4&HLr)14e}CG)Q27tcXgBJWRJSzer-{Ce%vBZXJzu5BEhfA8(# zU7er(g#CdvtZEo*y*|-yZTjv|?0D zfe&wAQC(+eR@~Tq(fg9v?Ki~Jp?qx05^Zy*aym?3Cu=D>*30?e&SbpR`jj7cU literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_061_keynote.png b/res/glyphicons/glyphicons_061_keynote.png new file mode 100644 index 0000000000000000000000000000000000000000..84341b63f851134ccd38f133db3272c7508bd3c8 GIT binary patch literal 1395 zcmaJ>ZEVzJ94|Y-Ik)M^LI4Mr&P^A&>&vaZyY6mV@7j|?Z;oxs#Sd!NKHJsn8*Oj* z0to}$hy?ZlgT@#`B3XPV(M<^&oFh6S1EYS?;0L40glHTllK8=ZKE2(IB@&vp&-48I z|NZ~J|65<|?Rm7WW>XD>pJ;j^WBEqrfV*O`IKMn_0F{l<`!6D@#nvM~tI zgeDGyJ|N14-Cuz)f_N5{fs~UYoE?w zs3J$OU38L2nlX@8wihkXU+fu>iWw;+V_ltSIL|@@8gN83uc^At<|A0iE(`ar7{}0( zij#?8OQcfCUNmM{0Hu9?uSAd}$}m2%on{zv8%hx*g%j{*ykt8|Gb|NA%NGW{S@ICu z$H&XQ;3bs`vKx)g$DCX>sCb-SD>m@+&snmFkra7}aLDrwtJAGk&1w%YbU!3208u#K!G z!FmieSHLiLcXm`!l%-`oGi#}(IAsY3D$s!L*pL)iVg#A9Pgn{pps4bOly$!*_z0HG zDl*H^0^<)6OpuAiNs^Cpj6m_hU?3)Nv1mIHaGkjZRsx~KCqpd9Fzp;26$mB(u>ute z#d(g22ZKRAKnDZS3O1qJj;Kq(b?Rc3TUh>%ST<$>(J`z6!%!=&(wjCM!%iC}8tZ4! zhm)eD=&qp6tz?-iu#^!X$1OucOQm3y+b|%=AZ)Y%jFE!jlkgPu#|0|N`D3&oFf>-i z$}3VccQ0UKtFDS=GTh zht-0aRwP5W!?@dnssaI}-4YgGVX-7$(X0qVZ(;v3m=k0@;yBZ==^WZ zTHU#0$6I&IT;4ah>(G6T^!p!;&3;}y`EqJ?>s=jlE!WpynOJ<)s+p>0x4t!d=7eYA z+X9uV{{4+hYt}!w=ittkwqNWuH<6#N>_}1Q_ounGUpLpp*F9Af`bVBWn?166x~luJ z{eumyb!SJ%JD+^LVYDSM*89nc>6xnO1KsZy{&_mH>C48c=-ofc7rvSGyuIhfU)BFU zkgC7>@qY0<9(nK0eV6L4?**%Vp7hop`mBB;^TEcBA98E2`X5>-B6G9ZQ{!hQ)30o~ zFm`n6-bwK6%*nt1m_PjI;mvz5h8O1_iHvBqo}@o#Cp9YaP40-QQqB=;2RA HpF8j$i-OYU literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_062_paperclip.png b/res/glyphicons/glyphicons_062_paperclip.png new file mode 100644 index 0000000000000000000000000000000000000000..d946b578c91e75340f6d9a4fcf7055f6d691ed5d GIT binary patch literal 1391 zcmaJ>ZD`zN98a%KO4q_Ve^psY?lwF%`h`=Z;Xl9DM_T^V3 z(9{%pIF_Sxwg8LTfhh+LPxa@OsR<>ilD$2kyTV}u21GKb7`o|ll@wXE%i+Bzrbtj# zK@%x*gVacF00@=?K`ayrDm23YmJKn{7|SyIL6~O36pe2-$V9mq%Z1~hc9GbdqmFSy zVy5N`pHgHIA)BM9a=9ETM?#iUpqOMb>DdT}gIFWzPMS!r1Wh+kw;)1SaWorgmI*wI z@~BlpDH1c?2*I#(xlO~STT2v98C8*OiV4w_VR&&>wOup>Z_~J=wws@{AvFYDtK=xS z9%F$z80YTpj_Qi4vZ-g69K9N+s!&je1~ie2NikJMm^pXI(QpA}U9^;v_cbe~$WlpD zIW{J-ktEF~SRunOVwz{Au$V~11&J5ZQ9AB9^9*bSVo6BFSe|90d`t+_Y#d{ya59+@ zc{Y@8%_MN6#c_-{fCPh2iAY8Yr}>BwlO#4q*0Ac9 zl+`20fd65oI4kmWM5JQ^LsFQGs&Gg{I;{05ucO*d*StRAblEK6galPMCYN+X_7wC< zyQnFa>2_0I59%5QRCgO#YKz6HcuUjPHSr{P+szTghs_~|CZ1dek7!^?=_H7TU0IRO zSAP2RL~Gj&XqkDxq3v{&2&UU+kK7a3eWob`d~I`mjXl?A;(OLsA1YsaWB$yF+Op@$ zT7KWfg>D$wj t4|kt@Qd$81_y_MX-}=^0%-!5h6BpKQJh)PL?qTm2n3ej)kJ3k`{{z7X&sG2c literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_063_power.png b/res/glyphicons/glyphicons_063_power.png new file mode 100644 index 0000000000000000000000000000000000000000..33a7b872da81b891523421432ace63ffbe9e317a GIT binary patch literal 1390 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_066_tags.png b/res/glyphicons/glyphicons_066_tags.png new file mode 100644 index 0000000000000000000000000000000000000000..f62a22e301de85b362c900c08a43bb9b3ce94a3a GIT binary patch literal 1318 zcmaJ=TWB0*6rLy+jVx#)G?t>{1WHAB=dzjEogtGlJ2PvRW|DNXsrytqnfbFj$=o{g zuREKE2BH>(J{0;;pM0>D_Mr&+;-!&>7F*In5mQSMs%r}dN^4W?gBBJ4+3cnfN{6|e z|IGQ$`OfWw@zJ*u-P^h`3`-P-l_L7Sf}Xx-x1jf3OFN4`FGIBqC%kD`*8_k_rZ)xf zf}>YJ5$I;)z%m%bu%~~sN@ZBqMg+riQhIEYiX0!IF>G*GH(E00W)0pXb`9Z!k$@aH0P1+;*ls99BGK|IAURf(1l}@% zvm&uhs;rIUvKIiHO{J3tMbkLPrRV{ck*GrG3nW>u*HiU$$_pwa&GUThgJF`$A{jPZs7FaR?C*F`KxhP(4=vBdV~_fj zSA!yfn69Vb_?oui*bUo-LM0<3-6!c3MLJHLSIattMevBmW39td!v|y$gkCK$P(P;o zJ7841CkN^nn#P8mUkmJ3o~A(p8#us)AtFV$7$N4uSYV+B>bBw;wfJvA5s6yOG6jxR zxin94Sx(N=w33rJl~JZh*?f!D0uSfk=}w5mu2{KAWL9ghnk>8J^E85|__r zvr2}|W^x^D!40AA8XyiDW35M6_K8?Q4uB55pyYXWXH>?k9`wSh=i~AOhws#M!*XNA z>v1RBTtQ&H1I&EjIe4oTg7p{%6dkk9pd1-Qf<~uoI@?p9Dik|vneYc?c?Dt5!KT88I_ zgJe8|wuJyKX&p;$^4L;u8rqH}+Jso#SV45ySYqI!%?;3sK6q`iiPrl{L6J()kBe6m ziSzgi&onQ;R62J;J9lE_sgQbZ_|$uarLJ#wd~tZZdav2Fy!+_v3VHF>7xy$3b$jKP z(+%;$@U_Jw{s((?7OsM3H$JK V{>(=QudkrYu!1_Oe45+8@E^g0!SMh9 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_067_cleaning.png b/res/glyphicons/glyphicons_067_cleaning.png new file mode 100644 index 0000000000000000000000000000000000000000..2e1cd5b0aca2ad77a631ba11a750dd6064b5e287 GIT binary patch literal 1330 zcmaJ>TZkKF6dvPlS&Lg*L~Ir8I0bcEGnXVYnT$#6Br|D4H@n+x)CEo1*_l7dG;{0B zpJsOP!g?vKpr8*zsbE`Ikp=5RK`DJOf|soiEBK(&Rp?f#4@#}Ihz}zEe>T~!P#tD6 z=Rb44bG~!S(Xo-;gX`~JPY}dlVUJQm@6G7hGO!N)?$~jqf)7xgfa7izwlp6Qvf)kv zvS4d9Py(7UeegU;6U41o%<=@BC=N@yYttIGp+nn4Xo5)Z3O!A407y=On(1VyU(bC+ zk*1NM9_Nc}(aV9lxo5@)<1-^=eWszO3~JX-G960DfeoNWhPLGdQkbDSekCMhHA9gd z6WGX5E2JihV`R?t0m;+xsLpa6DF`%|;01wuh>WpZjA79&M7e~-3sNjeb}tG=^Np%h zQu5tc=#-)A5PA~Bv|25?6{lUl#&D@r3j2t~qR1i|Ogm5uqfW4`=RpC1?wcMoU5CUT zwJEm=GZbRFl7j6Oi>r>Epj#+ZGA7hKhND@=wsBq^>j0L(4H`GK4$9LWU`ilxo4$_v zQQg)9quTv{pq`nrQh7xd z@}ejzNnT85d)R^#K+Vws4vMkn4J?lQ-&iT<0}Z-<*>$bnsEpNJ=mvGyBXi>d`Cw7g zO$RH6a3{N5fo~oHM&5UAveOF5ya@xA!;zCH#~32Pp_3TTtFf#c&+)1%@KhITtSMP9 z^A*UCA=>oJf}D)KEd92B>OH3sO64*0fhQ zb=L{f44y&DM1YR8f@Rit?5NiaZO;;I0v1Ey*%No2j@m ms!SGNeShGa##d)AQEj4fa{FUHDa-TtU#y^xD5tZN&;0{OZoQQN literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_068_ruller.png b/res/glyphicons/glyphicons_068_ruller.png new file mode 100644 index 0000000000000000000000000000000000000000..1e499e9660b2b5cafd672c34e9a67824303d7ffa GIT binary patch literal 1167 zcmaJ>PiWIn7>@`t2Gf(E?h>+#f@$)SA)m&85XFixfpI z)i%rqS(nLke&HN>e?9EoBgbEop1qD0PDWpL}&=gf#Pb1seftc>Vo)?yxpReCCwC9$YJ5rsmM+WSB8{-&mk2jmn zc*iNa%=#K#N;P62fY_$fzz-8GEi<`YjqEcq$I!V7-YGLjq+0bY+CVX+rGm&hJOH#T z7r?3{%iuaK@Ic^ra?31O)g)OH6nb(o#9QokwT4-p_#&q=)5kc{IBqx`7KUO0#XSxb zi^a@_Ah1M(O-3QMQ#MRirWQPBWlJzsRWU5xsI2lz z<}5QX4;JHpBAYrdn!IEHh9hKLN5dZW;iN}(A5V6^ zm-UI}+hLC+gmq!p9{8A9>-nRo?>Q(;N?g{1zDEH0?g-1xSjlaOs^BS;Rj zA%-ED+?b5$Z|d0>GTutf)SKz&PP^Uyd*S_?KYLFveOsuq%j3sj@5PnM6K1f#TfO*h nVd?N=`}wDXNBH3T%8mPHs9yoQ|4Lu3Wxt4;wQ0Vrv>*HfFH~>_ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_069_gift.png b/res/glyphicons/glyphicons_069_gift.png new file mode 100644 index 0000000000000000000000000000000000000000..560fd15c7e714e98ce306c6531ac2e85630f52d9 GIT binary patch literal 1330 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 b^buqMvMw18Tu3b5YW#Zxz7U)ARK5H!0nHgc literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_074_cup.png b/res/glyphicons/glyphicons_074_cup.png new file mode 100644 index 0000000000000000000000000000000000000000..1bdcaa82239016246a6bc9760d5d0dfc92b0ba74 GIT binary patch literal 1368 zcmaJ>U2NM_6m|zxQz4@p9V$?1#?xR$O&mLo?RZHiCwAIwOIFfMt2$MRYu_YR9ow~U zmZW>39X|q1g$Iz3CM1}|!!&JD_tQO0W94CjN`p;hhykk9NvN6x40VI2PK@g`=_)bJ zvVHG8KHoXt`Sbhzsa{XZ%Pkm&c@lkM8m%v)r+s5HdjI>CXD?b_g3=%yFmtdh+W-?( za|GatqMQe5Agk4}IS|IMr|xQ*K{%M)$17&hC%ZbnO3^}S3=8kBSh6w-AU*=}nh_!X zx^#uWH8nyU3?}_aD+UT$-?$A1##0$(d{hak#O@wET;Y*{B7ibpDe8v9S0Y5sE|2!E zm?ZF;3LK3PtE2{#{dml@0Uq=Pyo#TqaE9?w-9d(-x^UW0(WD>UjF;->gA7lzc>N-f zH(Sl|X)#{+g-#Ko0HMW`WVu}Sl>7$N5Tep^EYly%WmO77Q$ z7$Hg}P34)O!~{ZqhGSxJiV~v&Bhezqu`x-AMZ5j1>&!K<9*8796=D6sZkA=aC_)D) zN}@xdxF|4jj^ji&$g$A|HeonWHWc7Gb+OtbtnfrEAG3iBO*>s*1Y9R_OLHj8+z6ukC01{8-HjYToihy;aBTp%vdQ6UfuN)i(! z>R5GM%GM%h{*RSdMil%3(I1Ra1c}I~3J*1?gL;n&I;`(>&FvFjmyJA1h*t$Uxuip) zC$Cqnf~J^;6DHjr)HMXC?N+hmI*T>&x~6StqDgSKYa@sbYeNhSG`Th!(Q`9f7BH*{ zONc_I^2^OnCN>|%pOf~!ZngDhpYF}RJ$2*Fj;}YjPZ*2MGcOFzzjnE`N%(#E_^$A= zrR9YE`BJrKY+%njQ_=e!Tdk=LNB>!Tc<;{E)Fx_3S{eKKi?dhH&#xTWkXpXY&bI&B zHTzM^gFDPyy~lq1ZP&^-9%tdK@8pG3*>L4jXy&scr-!Bwz4GmQXJ)rud-ufh6n%ca zb>jJFZhYFha&P+2`zJ!z4*7O$Ixuv5v?trV?eO2zI|^9t*+N%AYZCTdTbCbfyk&ImdmdEL|`3N51@i;bznDsatJV+a^!{@x#K&zTpF-opX~v-M!NB e;Nk54re_RH(vk1{nsU=lz1kZo%|1X{m^Xy literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_075_stroller.png b/res/glyphicons/glyphicons_075_stroller.png new file mode 100644 index 0000000000000000000000000000000000000000..2921f92dcfaeb6c32482a4ea8b0b67f2c7b92e5d GIT binary patch literal 1410 zcmaJ>Z*0_L81J&VEMsT{qc9|v4x=nwd%fGWy>7>LckQ_o?zY{Quqcak?YmvG{-b@* zyDehaGMD)Q<%1CuGn4UYXO;y_B$A1`5OjP12^(qzjhTQNiG0w+jY#zE?QSfQ(7bKm z_v!O{p5ODYZ?-32*jQa#jbYfvc&m^?@2%*rt*S)N$l<>)x&kP6!%njgW+fY7Va4nP zcwCqIK?+F9;Gqkk3B$_&P`kQecVZten>s1EI%H0_5E{dpnsb&U4*-bwf_~Kq5qD-k zCva5>5&HuPZ^DX#wAwmkgU+F3mpn8e2Nj}u58jmHkpUe*3D4=8;qbW-QLxLSy(^{& zyr2RHLc}Vm?nFBtHEnKD-5P&1wss&Zk zz+H<{ubF`%0x?|;LAMf#HN%EeOcY8Pm6I%rCcTudyKxn?9hd_5X*^Kd=^C^El>&~L zv1L?`zPb_^-67ysYcYHLxCtB&33{-arG(vRn+I{WLB5 zg29*&W?~%232cC4BPDFyaG+$!z;)_k)%#fSp;$g@0|}aTmuYIHR%uV0&~(zKg-1IX z{P~0=tA;DseQeZZ81HQZ=XB8#gHD~6ZW<@t_2YJJuk3)k_Kw};#@Np6j3%yY-`&c3ZE4@z z-KJ5#qAo<|9}r`rk~t&)03tyX9BPO$WSYptL;rf_ zBd0+Zkk#RBQ=k>YDlcit6ig*H35uEV$*ztspRo`c!&=wpEm;`^5bpzN%?J^fCqE@{ zO$`w}fdrMXL@=PWjo6@jq$8<}3@SmDSicT$%?rpt20$6lXLQ36@*$#VS3rALOcHoe z1rCOY1yZR*CoY;czym(NSD|PcXIUTJ5@1<+4bD(BLsIBwy>yEZU*=oPg zCB;g<&?!U=KxhdhnakyTIls@e(#8is>-6Cm9_O^oT@?s9b|w39Yl&QGD6IS&9;ULDC?4`WZkcEDMVzm znkuk?DC-YWEYFHDnwBDAHp)mm&xz5n7-^w6*O_ZzDG*6~D#G#S8s7r2;J+#|4?2Vg=C#GBoX^Y3k)x=^QYj=?s__ zE_So{BMDj23|G+XR8!@1H)My-v(Ir8n6Yq~jnMl|#2BJ|m zK$NiRl9ZJrM}YrfqZ})RDZfMoM4BKG8C4OW26a&C(Xb9nJ6&`8M9^g;jS}KjLBE{U zA+av44_gD8Vj4~>>Gq(mAwY4rfF+k$EQ*&jZCMjdg1cQDL3CIgVql=jwb6)HpN3a4 z%+nN?!pZ!(6Z>ZCcHy_baPs2w4JT`VuYP5^PNdvxfvZ-;Bgmj8P0mpkIvt-F5^pT2AEv*veSwkrx-8~LW>s?BpN zuMc$=8fqHeyheS;lk%n6zu(__-@#|MKc1bMJHQUT>c7&Sw@&Z8@X6?o%1G_ZdsS~V zZ|`~Xr)iJx?U}3JR611;)X~qad27=LKi>A@HRg|(yvH8AFkwA>lv>uac1!PX?VkPf zPkeaf@Cxe7Qx_i_KlAfw1$;Dhu&`ov=f2}#qz;`wzQuEdRmP`MYd@}7U6^L-zdv*3 zsjoh|KEbOXwruQpFDsYe>Hq)$ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_077_headset.png b/res/glyphicons/glyphicons_077_headset.png new file mode 100644 index 0000000000000000000000000000000000000000..13d00bf5a5dbe667a0531ed5ccf72fca3e68f5c8 GIT binary patch literal 1459 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 UT)MgU7w4B46WfJTk?x)U0V^Kj*Z=?k literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_079_signal.png b/res/glyphicons/glyphicons_079_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..71f03a3bb91bdae93271527a74df76828e8bb38c GIT binary patch literal 1216 zcmaJ>O>EOh6n0h7MXbt#;LzoOMlKQ{k=WzZj%_6^iR~;wq?9yLE4b9PCy79Jp~t2vtH{;kpN;?wd3zl|WdwXXg2R?|tvj50@5y znLcvrh#&~l^-FdW)*1dBo`UyIzx*F8KQm{QEz>sZyD1SWK3ylM9=RRTB(A@C^A#xx z!sN%GwaQi-S4@vad6(ds%9!hG`d9amile8Y1c-+;8Yg7j3uTd_51yN zzmTVCN5Y0-a2tw}1C3m^88df~i?i9W1)F4E8YC>BG2#~8b=qTP5t#0U5G9SqzTr3< zB??j|4ctV+d0C1g9@kJiV@>jf#y7RI)@DMaCdp_o^`IW@*)bS$_kBlWMc>=kOL}QI zjMMid5|W6-ECW(_$OxF5SJMCr=!Q1+di-nME{nZh;G3H2Xaz&obj_+^Y*#Cqqu9D$ zw491nos)~)88>hc2$H-H*n&~58h``z9LA1f7&W`1)pT9Ai>h9%j0RV=(J*;%V;!u2`X~&u{ z34FUhf^gU$ViLpTrZA#s*WO=&@$S~`N^9_D{qyeb!lXJeJNy0z^zx?W{X&oe6yW^0hN3PCUMU_V-uQN1xn( w@OEeB5A>v+>}*foJ~O}DT|E8ljxQWr6IPPayT5<^YnT61>dvD5Z*}e7|AMf8M*si- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_080_retweet.png b/res/glyphicons/glyphicons_080_retweet.png new file mode 100644 index 0000000000000000000000000000000000000000..8f2ee173c5d232253c2f20342eb14252f390432f GIT binary patch literal 1309 zcmaJ>O>Em_7%CfrHPht`0xg5r#k+t9ouTw#y?pjNEfA<$PS=6_SeL!|FFL- zX@yYR0b*5!gv132A$o!nT#-2NqxCTDGBh}B+$y+knuG-6GCrqCSBYts?eF_uzt8(V z@1Ji}moJWGUdj*zF;-sEYj}MbKiTI`;P>B`zTLyi6fzoUC0IpWGlE3X4w?{@J+lRC z(6razxdrD5BK^RrH&CPUhGGR?&P;T2Juk#)f|y_Eg{HLz5op4e;}^(>-~T`Y$1ad> z3KgajYOw7rZA5ToW4Uf^tXZ;6E?fZfJp~)^ATmMEbNyK970A9_1@99vO@h7(S}Tx; zq#Bhf(1Hj8A;(h|!?HjWbL^ZTitH@l7?z_Me2Wx2rwF3L<-y=0vA4)xRcd-^;0vD$ zWE-JSq3Le7o9ptqAZpR9EX#=vj-#*!6|eiq>`{Jvc4$F|u@yNXasnSD7R_eRK?M>s zJq*DME0rU|emqDNP8r=ZLz>MowC5#p^|fPEgHLEYRXeV)hmfwpIOs$cuE*-xAsFZG z*^Y*awsoWzb|SYQr)|;Dg&y=#j7hP5Mwq#BDROWDO;-=BPV%*^7syV>u@zA;L|$e@ zNz_U#tE)xP;B-mKYerF1=a_urEHQ8#h$T52V|iIsWl`rbdX8lcPL@l0Q7lQ4q~`@G zuMV+gKSri+!Nh5Tb)I0kXJQpCf+h;0dJwq7R;jiF6vXWy1lo!SrYol9_=#X9spNnw zjGSxGE=7R{`lV2ur!Zhx2{&3E$C!{{@k!!K2B#KzO)v~mAO~3cSjvWxW5EBgMqbp5 z46ieS#*#E9V_OPxkP8PrT6EE1=Q>HBD6Z+Za6%{>u9_Vekr!I-df0ZXz>nwYqz7FG z1Nyr|EPc#kUwo`-hnjd2lI_t5;=|DpLmy9WghzDy^jp8;@!l`%#d`04^Pk6$7t*KF zTd5bWPmV7&Pk!0_;~+bI4NT1vH?voF7T-PhDEnz+=l0KI?MxQjlB>U|VEV_s?^0LT znaQs{SbFr~=$Y#8s(Ryq5Gecodzq2l-Q94!`uQhYBb&EpUpt{(-}7E!Ci9!y6S8Ff zG`fH0qn-A|#LmbU>Ooq%SiP%$J(ZGXPc6vjmEQYD` w@1@qRWG?@;rM^ys)Bk4fs7C7E_$HAi_Ftv`y!-Lu+sO~BY%J^Fs8_fD1C(c)XaE2J literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_081_refresh.png b/res/glyphicons/glyphicons_081_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..3770536361ee134e265903dbaaee2b2897de84da GIT binary patch literal 1445 zcmaJ>eQXnD7{7HeCXNLBK$seCw-GR|y}Pz|ZEx#l+q=3BI+m_rBL=zMy=^bOFYm6d zoz7$fk&k6@GbRf#MWYFtxGXUc5htkpA$~Cl)2PHH#6L798WlCekN95KjwKQ@A>M1?yd({t*l>(Ajqm%2b+NJ_3){$t%1Mcfj>XB6&9DWdbG6F#~T0%iCQl} zV+x-E3BZfR$IgRR1gZW>N~Ww-d@Cbpii@{xTm?mkXas3(FX+6G0~Xo~GLjm^em;E$ zLnSeYJw(NcxE=vnsiWTjJ^futp+6@CM6A6HZ7nd+fdVWZEhw^TGKC;k^2RCz9RI?SgXHb?Ppd>9|@g*Kh>Lo*4v4opoi;F7=4~t6-RJgeYT+#P;wta#i zRq+@bN*2C;XUCy6Lqy%H&FI}9*0>#wQ-i~2Ye&x3PE|F2Uo+B8@7{Ab`^&}gFJ7L# zJl*oN7vFI0VK96?aU}8j-nXvJBe5`&L#mOx*4HR=)VVV&9+_CD4Q&}5cwlbiZ+uS^ z-SXSUx2YGdcm|)s-Wxqptl7HuQvIQ6;_$8KCLc{>$*GxP#~Tx^vv+izmZL|H9Yl{i zoVmb(Z#!3yZz@3+ zK=UmfN7ohqSn=__C!S1=qH4o-_j8%N$%oqNYNrOdI55jS^o|Ls?=ytKUfgNgpt=~KVY)HkU2?`m>5zZu$< zeM}o=7_STl>A*0U0j4qMb?D~S-bd-Ry-;S`YoSOP0nE^d;kbJXC+*$s?m7x1 zfecKh&SXPfz=1;48AJ_Bwm;ZFa4thg+!PbtT$XKdi!n?W{*r}>zE@gC; z57E_(Kj90WTxheV$ux$wwzgVYtrkgX!U(6+soNk)Gt@AvZKB4;%%W;aT3~?6DT1sC zl8ERQ*+waetzOdUA$$;B zL=ZmG>GU&h%I|PE7`x43_aw0aQPo(H1G-ZkD?Gq5kHpem1+bc=)Jjq~*(z1dk|wFm zl8kt3C}ew(u?Z%` z%!3dc4QpsgQ@BlT7C1>%i!r?i!vX}vcdJ-zoyE9#UDGBt;UwtWwGo7ewIK!~oLmKt z==g{BS%cxRjsWAXjs1G+*uuVUJhLn7mw!QbsORtvaXRDLP{FVXPciY`jwkVyE7OD1 z?>qZzdhSnu^7T*d#uq;-+%!Aq{H!tMwr4lhg{KS4AsojF-v+*`c(+WvlZqO0!6jweb!&)zgs zc;JWf!E?Fa)MqtspMCz+VmEzEsxl6`)9Q`cId6r2>s`q@;~LG&EK9vRdlrvM|5!Rs zbPYW2xwyIP(9iFV{yurL@yc_9i@o_~Q)~Lb{8Go*r5Vf9CfngXeR#Sjk2+vNE?th* zx~6a3Dx|KHdzbU@k$2M5`a4q#N=}a6y7S${$_P1j@O9yX<-cEL3m0~MX*`~@Eq3~x zoLggj_JyY~cH&zlKkJPQQv`ka(D;1cA45AcCy%sW?z>Z(O1(Edmb1mpRNcJISgY>c z-j*`Zqb{SvS39rG6_Ia$KQ_8@fgF+pUu;ahm)l_2GJihzXj=X=`hPayt7N|NG#va7 DziJ19 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_083_random.png b/res/glyphicons/glyphicons_083_random.png new file mode 100644 index 0000000000000000000000000000000000000000..f43d5dd83e53c853e15aeb860ee666427cbf8a69 GIT binary patch literal 1296 zcmaJ>TWH%>7}lEBO>eA>jCNVcPSjG?i>-?-Sr%~|S&|p8bDBAZd4rb7(y=X~TcqRJ z$zDcQ*o8gxX=5Xd3`SvNj8Y06>%-cO!Akou27B34-KRb6LMb#*XwPx%G_X=3>74WH z|Nj5`Z~Aa{=9PWBM|V>cwXZm>mGOEAKO@62{QlzXnRUFpfb=Sw^XsT>gpg7!zXn0k zH5#xC4Qpxf2ArU%p}*})6;(^G$)@in45E|hxB*5})I_cm80G>*pavVZm!GB)5sWPpzAc#+)6(mlH}-V-rHgPsan z$kH36s-;<=`XK~DA{jSXjsv2Y;8KDpawh@Lay-N0Ta0rlSrBDD4f+?2y@gg?E^CFp zFMP_qMc0mVT0i^nGCVP^Kq;ZkCr@SbmCrgcwj+;kr~r;O`*a>rp>E z0OQ;}-O)hNGB@>tR_OHNv`hv%(1jj~Fe$Fb2s4*Yhc+&t;b^|uB43MImTt9dOBMxP zOlDY764e67X?aD|c}$WV<&|(8H4(;t^$Tdw=2a{=TRwmCm2F`wt)H zhT`mghpG+jT^xODn4Y8-w`Jq!x;v&$QqS+adM7uwI(4qQYx^y#yJrp5L4JJr^xALy z!O5wQpY2{>`Q_5CBh}b{<71!hoL{`P?a2C$`ztRs4n6n5i$keX2X0^7`_<8RkAFRK zeP|nH7(cr?%4`cAf~`6|t_pK5_m$q|ayBc;eJo)~7t^pttm5_VO>*sh_3q7* zR{v<7Aa1fTq)Mm$F@%i`DO5!^M29jzhO3DGhzipoNI~cnCn)>J_tK;*ICk9Sp7*)u z_dLJnE3f27_H}Q+e>;X@-I=spK<}OC>F?Zzepfmk?GF!7DZx><4C|T?u%zKm06b%B z6;J@0F*AJ`3}M)oHM3ZPrCe6jU7OTG8?s@02#sMw!wpZ zh;>q>TppKPAK)Arjp#JP;5<(~y)zSYdr&?#U68#pjPq?jfn#9Tb!o2Y@BCA)ep{F;#yM6G5TBF`y& zG*0sZFR2V8r;@zF%7PG+l%$jzq+?;Q(7|RP(vSwis!@rJr&u1L2N_0T<8f6^@~R*R za*PvVsWvv_1W~` zVU-v!C+Vn6a}q;Ph>W3&(1aFf&1lksEy*&&IT0<*si1;H3{ci;79{potQoIr>aG(E zQQ-_)CIU32bu6{XV^h6pXxo-(6GCxg1<_$+iGhPQ*GDVrE_MHb)_W}@CyR|AFTFnB zeVFdr`daqe-oE+XzEcBq$2)Xt-)iTpso3f^bI<1s8U66&1%N8{@}^Up|g)!QNW_^Y7meOg|s~vt^VKc`5bWi~j-8 C)WF36 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_085_repeat.png b/res/glyphicons/glyphicons_085_repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..39d710cc5e29940f8059858c00b25ffd6acd9002 GIT binary patch literal 1421 zcmaJ>eQ4Zd7*8#fwzgv3AMIubAuY7x?vmVHa(AKEaZT=aS9`Ty5AE72OOv;~*nFA1 zXRnowt_N!O0W!f&8Cao1|4}HdFqt|PovRdGyZ7=~5HV?q+GwdmPWUWVTNb6@X4%Vrqqf!)R+91$&mg=J#^ z;BieH0!bjsqc6;Z77Q!BrlfjcPojg949zV%I_|7yA~c4zY|omaGz=g<0EQGjM68@R zN#KecBA#IqRKnyzT8WKWpnI${C5;VBL7CXzinnArWIzK@#Iu^J+gvt8{(%WzkMSDmJ-K>lDaSY3O{CMFakT**n zfYqBgv7G5%-AKZCFDj9SjB?8y=4fX}IiB9g10(ZZ{My2*8#s#e|BX zxx2rkqM|IV>zNr#&BrNABv63{bZ8?|be<7n&OK=7*fXh8W%!D zCZot4%S2djkYWQYAEjxbEzCwdLLlJhBVoSHNBJFRj)9FpByr0K8y0*F&vST(_a9OTcmJV3oUA>b_Wxw}1!@D`gmJu~oX#1~lxnVd8u@ zi#I1kNzom_V@@RtT!E#$2;`_`Xn4L9oN^Ba6dgc~=0`Dl5D6Nc0^VrE(-!vfOeDfG zL;)*rNLev*1o$5|;%9|0H)Ea4P%r+|vs+IlRjC+@0UbGC9vg11#P8c}@M=y;uK1-_g*|WVKDc`F&j*(4@B<}&BhA+@<}N;b zwd`yicQN_trK#HXE_(A~8`!=f5*ZkKdo4H<3E=VKK{qyeyeom?bEYYZVy-c=07=cD|h5($LzPq>t@9I zzj|L!pZk4$dPy_S|FX@;?0>ZH4!*N#nf2dzvz@&>c4~H2S$HM3^~X1M)U;-suQujx amQ$FrJUPwBc0TL;Amfov;e)na6aN9U|Ld3l literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_086_display.png b/res/glyphicons/glyphicons_086_display.png new file mode 100644 index 0000000000000000000000000000000000000000..f31141c8da414c5ac7fc899b6c7286cb70d9cf86 GIT binary patch literal 1229 zcmaJ>ON-M`6pkn&C&rI#9NIa= zFwDmCQKJg$C_FpXt%diO+jr(+8KGvKPLgTbu_DZ94w=HJ>|0G-#g;RBb^(tu%~6EDV<5# zydWT1P77H{mW6{zYL@@;#sdzS^RyP&Idj=K^9NUo_QkMiMv1m<^HZ8EgbSVTstW=f_2XQ}9 zkTR}og`AM)Ip0s>>S@QcivQ5~r*>SM4KY{6F=DV0hu#W>811X`$2$-wKBNqy2c?PlD$=9+`VB2liQDw=LGkIQCWW6K^Mp2VZ(NL6} zZfbfl%jXhjiGh_skfa^JYDQMlB~b#jBnYOM&zB5ME-8v)3-MhG*yRTWhw(=;P>Z?bU2NM_6wbP7nx=&b3Kc&uo+Cs-B>t-%$0VH`+gT$>DQVau9;!L^O=8vdb?uwR zDdK^Ozh%O(9oo9FYAzyCan~n#vTyYX;LaNux#IZ zkI#3`cm8~2YVtsQ_mjJ0u~@t~p_cJFf}h8C?ZofD&c$EE%M(beqG?!1ZQTbk*@QJf z6dk<*%0M?eb1NVli)~-CDpgc1y(AgXN$HVJDs()Ij>WS3Lr*tm0U~OkVYxZ-x9`rA zgk|Q)Lwt!Yc?xJ+6AM0=UYM*H3$sSXB=?UK*-*j;9DsBpbZj?}!W`MNE8%@4rbwcv zf@X8%2B~Ukicp{r2tLIn4VqyHK}a!UydW^o6D-ZJ6pe2o$&5+7AhBtpf05XmZ`P%< zTIl=2rySWt$df3l-EODaTnhRPipgX$kqwqjVvS_bagiP--5@crpn|~gEe~1HB_fM@ z4Yp8@#7s9raJ*7!)36)#6NOVog}O&EDVlPeD6XD%fXd(>8V}SCDjg3{We~uYZ{T{= z69X{L-TylpD4NEmp4am2UYw>u0UJ2LMFA$o^cZ30(#yVu3#i*FG+NQuqM9RHEz6Vy zUK6+sEr^0rU>G$o3mU76Vp`E;B|k=|BWIC;tw1bEnHbB8c{$DTY=mYQjm=~Vsw@;l zQB>2sn9dKdMK?gYYkydSXGM(V{}U@IKF|^LD-ha)R+(x-1cN5@2xVFz zMoYS3xsl-6sFHoIz_;dsS@5Al^hzOF4`4tuB5t%ajxh>=!6%U`Xl!2Q6kgK=p6p}I zEh!sBjsgF|YH2~0X-=hig&`?S#xx{kAsh62RJKunXIoL9NVe`aa6*zMsOv2ok>d@! z<25YhQ3~{oH_9H&)v?o@85rSrfU80 ziv7sS<)s~0Pp|H~_T!!9+bbWojTU;Y7XR2icxLtd#qQBp?F$Fj>(}2q{syPb%P=`} dr&UPWzEJ()ke_&2;5y#N3J literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_088_adress_book.png b/res/glyphicons/glyphicons_088_adress_book.png new file mode 100644 index 0000000000000000000000000000000000000000..77c0803af28129d562490912ca33512f88ad4a7a GIT binary patch literal 1328 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 Z4EuYpx$dvu_B`+W7-M3yFxs%I|35IV=I{Uj literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_091_adjust.png b/res/glyphicons/glyphicons_091_adjust.png new file mode 100644 index 0000000000000000000000000000000000000000..be59a584ab5b5ff5439f2c5b8307ad6e124a8217 GIT binary patch literal 1347 zcmaJ>Z)n_P7!O^UXGf={2-@LD(}`7fm*nn}OJc7jm*m!Sz1rQK+X)j*llSgo^RLN! zy|hzsMHqF?xr!BJAEYo)1W}j@D#}EM7TwS<(|wS3V<;*W1pT5o-(2syf@2}c`@T<} z-}C&Qe_5Cq-`CyM*M(tNcWzWJptUc2BHPjX&4pyeK@lwr}Sz=rApOw^r8faff= z3JO5gXQ#gcLm0Mg-6)k|IX@<7julfwomgPG2#sMwBY~@GQvl+VplaA@;`fg}C2&Je z6Ni{Qm3JjjGe+k;P@EetX>(H=uM;D~_)s7q0~UZP9$2RB3qhJ_+7-|~6q5wrRDn}z zVuMsUKY>e*2XH2qh-wr~<18DalMKt!d+|6$$4Ls^Y?Mw43@gM_cfWQ`?6HaD&E8wf)kp3&;ZSow}!?dQ=A5 zV3fOCJ8CQH+NPdc_snLTx<&#MSipupB1JbDA?Cs(o`DLenzEzS!>>6xP1Ng#F0hQk zCU}bFSSd@>azjAu)==GDHijZ%J7@as>Dv zR!On4NF`*7k!XTMWOPk{1~fsdM@191cBT>biD0UB6(uC9gNj-=Au(JvXWg2iIkrDU zhCOH+2+-VZV96~Oo8m1^+tx&r5Ne@q*76u)hqQXn?JRxP;^GOMBsZcidgq zf-wONe*hy+mn}k_|IEZh(Jm%B%``^Fbf{Z0^^d93EW;7V3|m5G_(P-LD=i~&+2!tg z?|tum-ut}weecF2Z7=L9E-yw9WLKz#>45K2_>@_8!nL+`^{}ZJY`4*=^cyKo1BhQx z`T!bAa52yUIALgT0eBH)$Ew)XZFGkZ(7ckcai)zeolqefLA;G=mE#A1f%buzDEqM6 z=f1>HQSf0=XP5}90T35khBeSR+}6bp5AYrVYivNhX&O360E0u*2}#!Jv=7VqrJ-zY z;~1JVF$R3t2C43F1Pv$}K%F*+l_y9Nr6?O&@1!WQ4z&}c9Vg&TS;>0ZNzrx}n!hj@ zO%wX*4knn71vMWQHw=}=@l+~hOF3+c7Q;!8$7A}i+pW;Tst?Hqm$u4!Rlx%TbY2rx zLsVqc^vLxoNyCRhrW+|F)Npvyv8?9{1xtpfITa^u1fEEkdF8BiqXXQdabIh_Ye)rn z2hf$I#>4aIuPT6H?H(McU?}jLc4|_Sa(N0o4kVBOvY|s#WR4MJPPc0!JU~uj6h3Kw z4KY3}nG^+@a;${y@A_U~54J^LJV{Us((-th@B$(pn2ts9Zh=B|zSA!#3 zmX#O;+14In{9Wl^W)GE2ohKd%xAu-jc1A5@5z821uA{qi>-EZuk1u$J8eSS~fBAO+?%?q-fm{7xE&qc1L=Iy$oW6m*+!HNL&y|<<)SX?=JiWYk_t)>f)_VEsR3`e& z+?e8ByLG)~&+2k)^5V7GhrSZ)n_P7!S6Na(WC@(3QzT=7&wZOWxe&&xOloF3GJ|dR@I9?#d9BChy&)&A%n@ zdDj!AQ~JR#17Rv6NM$f6PKTl(PTU6(nI8&{xxqGJP{9eM6F+HH@XhtED>xRCyzl$u z`906?`Ik4RCXXZ&qX~i_lBF@Ng4fab8QF#3E8`QZc-e#W8k+X&sBMIhP%M8Ik|oz@ zzzQ_1g_D}n0w$`g|5yJ;iVNq5`;qX{B^xDy!WJVfLyY}lSm-Mx5;B5g~i zj&WtC9H_8qk99*h-JPtO-FY)-QHKwa`HqAQxDXj+$923&>c~{ju7vlon5M{{3YwRx zEmF1e6sh_lB)N1ZWikMeJf8+xj_1L1B+CGnX7J6YKvv>-i51BHMPYBDRhKGSvF{6? zWU7f!AklQY-A=bNX+LbxAeYOfR0b)KX8SZhbh29aaH|FF8i zYYLOm7)}KgjmcQ1gly!%evc{+>hByo?i0x|yarB4%7S&H9!cBOfHg- z>c`hEeRSvC>0ibqCABL_UAX<-?)PsEPrY*E^TlVVtK)NL=lHb`@@DO;| CPp^dl literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_094_vector_path_square.png b/res/glyphicons/glyphicons_094_vector_path_square.png new file mode 100644 index 0000000000000000000000000000000000000000..887c3488524edcdc9bf07209e8c913006502d886 GIT binary patch literal 1202 zcmaJ>Pl(i37*A1)3M%!~)`O1-Qqh^@Wj2{ioUCM$j62k<%j`fGy_ikj%*0LdV)DkB zT`1Td3LZr8P>L51J@g_1 z7EkWk{q1f+5caedoHndq^JnLm@P0lt-^20^b640h?Xsbt6Tu4UDnYHp?~yj~!}SYK zNnH@Oy^T66Y{ffe1T-o8T&FxrGC&JL{lqBqgEhj?D(OY3DZab+P()E^ia)5H>}59T zM++M{S>9Oe1RHBXEfi18qx#4I0|{Y18YOXB7$Z|0+cjX%#gd4|Ds0UZH%YB{OUR}< zL29{D3S^9trj_xWs%iKbQe>=1GTd4T&l##_C{;AMMDUh}U8C(ZC%)ihihag1Lz0HW zVR=|7)4V6)TCK)yC`t)5O2vB0{81?_4oxjMqzLjTV-Zaex9G3Z0W(Elx*0-}dEU%$ zT1*lJDU(KiCgHLyB?*sftX;4+`9R~7+C^tQBT}0bbdU#7kM5x<7;^V{M^nWxnCWGM zJRZjx1`>%$LQ+-$DLiHb%#G7|1O@bChXw=wwdI)NU=W3drn*|CCTqH8H!*e^mgXvs zu2*f>vKw=9l{@1GwgN#?4gp(hU`2N;GN7v%yGpIrbS$l@>$+1_^=e~^ZKVbC(|~ZN z92?EBO7pW=!_JA%Xx^bTp0>(TpE6qXX@=}&4SnbNL6maA5njm&SCU5;N!ZM3g2tsV zqE9f8u?~$^g%}kef#IZAny%8YDz@snnkr7P;g*z5BL~1oShuPJ9a(#>fg7In+uEey{|64dU0O7{XGBe=$k*i?v<<8j62)DKYR1dhP!_O{j`05 l{X#Z>|LGqOOWvg~gnK_8esJ*2U$6OJq~$I;w;Jbu{vT!Ceu4l1 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_095_vector_path_circle.png b/res/glyphicons/glyphicons_095_vector_path_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..07518d500ce4d7fa0ab2c2b9133fb80f43d9d06e GIT binary patch literal 1479 zcmaJ>4NTl*7%n)p7?0pVw38A~kf2iMSRYuno$ zxQqnj{E05p$g#~CWhRg;*@z@M64?gMAVeo7i_<73uozS{4AB7FH2U?pVdH?!qP1WwqjNA+aK{EXnOf6iqjpyN1_@0iqR^XDOdmHsSxkZn#DnQ)4+ze2E zh;0S6faTktp8zEY^5DEs->5eRDrrs*nOQ@}91STDjUXkZQHAB&fQ~kURzY%MH$S~|2m+-jGf`}#D53}@Ed+^M;7yr`V%kR0q#aFM81$y{ zEp#p8OZb8(7Z%iYg~stnBw~(O&9d5x6HceoutAb0sA1CDC7q3$B&{H6fdLw)3W_es z5^7jvo8_?X!XVSt5JE~Iux41&5{ZH-!=tQ%6J`q@3K?<5wKcsK+@*0(ZLPjt0eCIY z|r@;Mw1#%^=i%ad5Yr0J~00mG?*74BlK_r=m46|lOj*2}V(Y?Ydztjk(Z zR!~nJh3*KjoFEy3r;SP`xB^u;1bCk+htPN_XyG0VEQA9#njOYSLJ|Z#IjlY}S?;!a zY+f&A!xC72UCNS?L%{#AUOUCOEmp>2^AH#g$?zPl3%UprJ?a+q#7-29KA}ZcYJ~|g z@t}nbi#oQeRcu#+0w+sa32yYDC_q4bw~EErS&WO8M4wW4{KGtx& ztXS}O$Fk7fU0Xj*`7-a@coi|=P^UB<~bGdNSKTYo*`D1JF zfytSs-i#O>-A;7p@Eb1mrux%7c|MtUa%hT146#H`NV%Ne! zPxQ0za_%fm+}`hPN-ww$GG{3N*z%j_&H1C5@7=V`4(}->_w+qEG_7TQ^z9g#-*e)d zhA%c$cODx2vG?Hk;*DQM==6L(1loz02W>C(o}0flm2sfI;=&S0OaIDbT{?0rXEOHh z&L=+L=XSnj4PHH(J{jxF9UKS-W;btqW^d*Gw?}?Bb*-EH`18g3nbEv+zdiEv%D%py tieppG(`k?WBtCmKd;aUr1D77kMp94goi&%<&N64Qvy26fca8F&!|NE|3_Go3cUHUaue5_E;vPF$f7~&RTIzJYP1ZE)WRLB;$tXXu4QxoH&U~mLK0{*YGV~K>zUGM$h zz2AGk_tgWH6_00Ut!e>op2K>dQOM==#_13G^VxtnJZAp@=17@{EwqIJ6B(x^l;tw2Q@Koci8(W{?c zKoO30qEA`_#(?Aj&0JZ#4655JYMAy`#=)YcB}j3UgbqSLrIBce7Zft;L=%2VC~ImA zMG_`zs}sFLsyR)bm37;zjS2m@}h5(Hj^n2fjyGs2tD;}+6NkR}_FyigcT zW*f;W%9o4u8cAGne^$Uth3k=YLYFO?r)_Y$p>5&1gigJx8@~Kg&Y!+2f zX%;2KQ%xX+0h-|iO|enyWRfe8x!r*E$zljew1VXB!N7>y;h@=IjwVO~hbOz)=QX)q zW{=hDC9G%?%PuHcDsu?|FCIC1C?||Q`0p}u z^wz$bSW#_(FP<}#hlJ^j+HZdN?tE8w-WP+_J*xc3=E!do9Yf{cTIBszo6KvjZkmj= z9xeFjlOvtoIUOS#;_hR`e6Lj+uL61 zoGBYt+AZnphHdzq?p*q0|Lv@&wp`!*&c;JQ`MJg=!f0>g{iU}aK6xQyy7Qm$+v`8< zcIW?nQHjCguP9=n`3z31uC=l5j1(AD?V zTfOHNA2~ZP@=H*ZSurSI3CT^=_r-@kE3Zp#yUSGCM_#Iu9)mpAG@I31S8 z0qahCc2R7o|BaV-pXxi@7fLs_Ja9QShMw0?t*9MCvIqVWADx*!9UMP8`0AD3m4AH9 z@*8?8vIWzJgJgAbix+;z()U$G4B+8OhmxY4$2=SknsJ1T3(zdm?;cA{l>ZvCp8 atAn~tXVTW0j%OBV|GR!~1vTIf?)?w62o#_I literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_097_vector_path_line.png b/res/glyphicons/glyphicons_097_vector_path_line.png new file mode 100644 index 0000000000000000000000000000000000000000..1825d2a0fedd8b9c601b61a98cf68ad805d7a0cd GIT binary patch literal 1274 zcmaJ>PiP!f7#|u^YTA@4Rr(JcrWGx8=kLz!?2t{EotbSHoHTA0T_k}{X5Q`&nVC18 zdE4Ct!E_HH9z?Mqy@_7*WEF)RT2xYkiXgodqbM(;l?%ZFbW@ONaUM-Z$Ux z`+ncQ_rcWU`O%RRBNRoAmM@qU{5?jV1N-rNqg~j>pX11?p=nr0Z6^Vg?!h@gmqVuk zD!}m;F8>O~C~D|mzgj~z`%TS-A?pwwwiCt}O;KYLo!D{b0ix$X!;cEg{hL2BwC@#| zcVwHlV*@n(3yTSuUYxADi}P;YVlB!tT@9~^m}BUk3Ysr4 zJEUs%6m7r+&@wA!TwV}pMPY@ktSG`cTI2e7lXYeUR|r0rM@q` zD=dno~fNy7h=FwKnh!li|bK8Jpkj} zJ>Stl(Q|k8;#Ly$;`Ce&1Rw+vN--&+#|SgmE+#%Mpc9zTZIQoav%s`kzNaa&rAT>R zQ5B;k2xd`NEYVceoMGukG0W$OGh$#b5KCAOV`Vv8%!^qGqg6q$#C*PF>PksfRWm26 zx#9p@j#A`AE+9?`)_;N(pNrLu1ULvLRS1JYt4uW^f@u@Rv@xyFZ`h9OM?`RzRI<+% zB>olPl@b`zy;5lYGZ^rKiW@D5Vfc4o~t1r1)$%fdVuYY$dVm6G4XUyi)B@6XlYP5auRnV)X1K9q)*KU;5n zBHcNBeq(iG?d}iv-(I`heP!mgf399UxVSmpeR2DnOGn4gT))~rSl^u8H+t*rowfIe z4{U!)4c{2~c&oUy{CfB0t=iA*$zwCi@BO{~-ys`qJ?hG{?8<|$uHU<{U;Ky~qTc=d U__vh1!jsdeY)zV97cX@m1G7w@-T(jq literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_098_vector_path_curve.png b/res/glyphicons/glyphicons_098_vector_path_curve.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaef7c799cf0fbcf34ca5ba2e08402f317138cf GIT binary patch literal 1343 zcmaJ>ZD`zN98c-oO1JKu__ED{A;VJZ?(%Y%ToRj(yCl~hc(?9)VsVH|lc#sFd0XvJ6wtaoe0nyb_i|PG11&qCIteG-X;{^KfTav~3gB5= zD}e&gjM;;qgJBHozHSyL;biV%QFrZ_7V5-mwujIdHoT|iY5EL+_!KCajzs+O!6Jd1 zhD1Ed=BS(}gR(hR_rXLxU)1X}x?m7{M)2X9hz!^OYIx1IoItEeM9Z#-_Mw<0@Rkak zk%(1NleuwRc71@ev3OLcXd36Z7@c4_j^2$k6wQzny16Kw5Lr%Sl6d6$77I$I z?F*eGq70!Yl4P}7jaB0@*DsN@APAuihKVALXfW$Qtrm5HT^$Pw2z1}{py@hzXi=MT zD^Ma3)721cFPB?0>;&yZp_Gv|%_Hd;McQ^4S4%s91@Iq@n`#HeSr3o}5V#dzNA;NA z)d8d2-P%z{(a_iQyoztN;xu#;SilAj3=k>0#RxGM_xdI(pk^tqUJ1Wu6^W=+Ohe>Y zm5U1$$8&Oqrj>MxQyGQlld_tU(+MgWItvY~2O>$#Kv;#5yzD|ZD7zjmPjL8P zPSZ^%6g&`CvdtCv=2O7P_^yq&N+FszVL;J5YP2MZkwGMAbmHR~l}V@KGOMZ_OSG}Z zx|DSyM}Yrf)g-5+sJKG0GEI<(jG>FrgcfM`Xv%`^on?l7B3hbLLJ5f)U|OqKkQgah zvtHTMT_+eO!ydFu1ZeG6vE(|7E%Cah?P#J&2)An^hz@H*3>-AMJ{r-vcaFV^#`~wN zk}B4|YaTze?HQ^^mCtwc>Cw*ykG;IF|D$b8di3X>9dBJ->MLB3Uz&QCCaV3_FE2&L zw)}YV^|!m0A}h{@-?rD`(XFpMr@lB;KG@v!=aCx&r{S;pIRE6}=CfZ%KHhX&<3jI0 z)xGyO>T`ECKDl`H!{aO2r8n8-p|0ksg{{voew)8`$Mw0>XXm3|tV9nPU1aZ>eOpS) z4|a_xmzyV_eQm>hIaeAwwQ%3=<;M;*ue|a1z>SO2r$-_K?{A*>&Rlxr_l3j4Uy<0r z<$ImGSNfm0^3BuV6Z&u`OK9JkhKnyMBdwhAbku*_u>OZ+3T<5*3>v7Hi$l#&K0NFZGMHL+^@8T*B} zJ;1aRXxgSpLz_?!Xs7Kk5Qj}dJ+K{%gb)V~MMdxj43Gu~4jtO}rAes-!m|C|`}+I& zem~z|zC1NKF+4ar$S}-s^^jSIbr*d;{s`VrI;B^z>?YO>nZ|RZW53;$*{FoOg;YcVL_yOEoYMAY!v=;D?Epmbk864fa&bb8J_I%$K+g zQZuzF*1$1hldao{a>=d`+6>G^_F ziE9xOX*}QQbh4dX7ROCqEEbE@h9qS`Ba;ENeK6$i z{f_#IuCu8ZwPU{;V&9bgolBuc%!_tj%UMNs!)WB9CNU|cXYDSD~g5w6pe!o?wTA1LZg(KFOR@l#Lw&R6V@CB`8k1LA3 z^T@5lIAFV_(7bmr5JVLktpG7fKthC*nyXk+Scp&3C8u5sadOfQ9q_^`u+9#TChfPRG#zk{>+b7(3(_e^Mo`b_=jHf;5djRO} zHn98_i(T=SrtNFOB+%{V2*P1=h*1cW8^ehHH1*ns@y1nCZ=?_ZxpH*yFLucIWc9xr zYqbx5Lj&#O7q1@q_UPW+U%uPq;**#GM-ecS0{zbN-UyZ_+DpX-1Bn7=ymvw!BLPU7{IJ=-6BFvNVf)*3l^ R4Qvx-7(RmFf`ZcsVz-F@Hp-ut}o z^Zs31Rpp~or`$6IL6E88`Fs?vv*1&ZHyOUK%qVrjrO*o2Sk-#H)g+hz@k@FgK*OpK z2T>qM&CeYKWe75HRF2hHHIWKd)K#Zo>o`-Y0nrFjHZNreVk5B7IuMsNANK2>AqUO#uB0-WUO*_d_H%*fdp%g(tg9 zd?@P+o_tt?Wf?4vH#Idmn_N!ajN_!&>$PoAlmluw63v<=q#RnJC})8O3DJ}dOV%~i zwkXu;Ny~>prq@DHjYwq7u$IUs3Z@KC2?kC&30zg}xH8%aD+;dDxS@6;)@%Sg3KDwK z6k$E;i*jI?yPG@8DN5p)o{=<_Oq`O40|lr+vl5ULnPCK(vkOfb7En-lT};|v!@Lhm zCS{4G-9g&rC1{4`LL|ut{B)4w8OFl}{am1w@Yv351LJ{E;*=nkr#M$>h~XfbA;}=+ z^@eyq9by=U_qZ8PAcqZW2}{sKU^}(3@^x(BrdXCUfne!oOxKlMt5h}UmY!(P4V0^< z(FY@fC~LN$#I9tPD=_7yKnj_O6p-yvzhY%~ifs1@s|Z>gCd46udLgM; zSb1D&HX3A6*Aiv8-Ghn@0h!%3EI!U+Mm(-*bDD4x?CsbH!o%1Q0}W2D2}g7a(6bPbwUj7Z!Zt5J5sdUW9S=pi2K_wOdkDe z?eo#2(djL%=a0M4-t`yoH@3aIsPaC?iH>Ji{yUAmba}9&ZQ6eBv&TzLj=Zyyo~Z}U zI%@C8J661WPH#`?=$gIxyAQ;-AU}SKJaF-6s;^?-D}U~t<0X2?e-0P+xDIdsQu@C2 zw~FIj?O;m;@4Uo+SAA#Ah7adj(tG9RK>F6!9S@)Ct{CDER-MW}m)^9{e;cDt9PZvV z>22@Gl8!4ANT;#6p?M9MHaz{spSGO7x?;~={WCf*ZC#GcE@-7bS#aow^ue`9sk5Ih zIQ^K`8!NopHasG|{7Z4Lvu}Ru#(}iTH!1fY>6+AW(P%78E^-d;Zr^@y$JQ7AuJ2m1 zI2L+sp#PD`>)&|i9*7b}=l}TPqkLsX3t6YE#+i73*Q(ia%SO87^3!?sJC(ktuCy_( zf`I|yclW+0JHodK?Tl4-B({~rXbS6;z%%oT4H&>*GZkdT3`r!R_sbkx^?H_J9 LSjle>)UNsu&NdY! literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_101_italic.png b/res/glyphicons/glyphicons_101_italic.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8e2fc4330643d0bf8d5d1e0c6caebe9d2a419d GIT binary patch literal 1306 zcmaJ>O>Em_7i;EdikVecurc6b<&aJBQ%EPW+GoVmI1^ULDO>c#QpESCveNm z6ANsaD*G~MStnKkFuyWaGgg)j(IjT3@mwS!0}g;X9yzufN>QHZ*_F^f7Lx?tQ-RBQ zVuw_{T)|~8063e@qzsCtagIyVS(fAIV>m<63`wDzOVL@0=`=+;P8?THJA_s6h{j{J!&=t|WEF&7J1|f^mL>;a zl)EQ88Yr5^uAbix>|UIvK>`~%z=a_qMfVsX=F-c7g$k(Kif6RruO%f`ajeQ^ zM2ZtQS)*yCSm0Df5d>aV3vw|_@v*bmz+NDdq)mhsG>uW&YzCo4npPQ6)RY3J34);T ztiTrs*peGU-8De$G{#zwu*?&&k{kdXdO^+e>_MwkS|0SmmgnR0Jcmz}b;ELF!3%LE z`&>a_y$MV$@Ep8X3dwp51Bw<-oMA8YPO*&uQR_#al~ zIi)~l6pEE;f<$CYLxL8xLBB@}Htg?gEAA7?*4-vbNXi6DdfSG?bkpwoEz9uSFh|Bc zXj=%-+wEYY@qSJUQ!CR=#Rw*+uJh< zsbQKwKCA41?;w8Rukn%O>Q>_E?c+ZjSPzElY?0;Hty8PVetUaUOtv2EpUUO9H)g+n z1$*_=vDa=lM%UM7+rvNods4_wtdG7vyKwH8wc77ntEV~U$j8CHxBi~KeP!&6(fq^d z&z7&>t)0E~`M27E;?bAhzc96tJUCvtys~!j;>7u{#{Rte?zPK@pAjEU-nfytbNYFE zl4=}T{V+Flt};9PO?_)E!8cw!I==BiG<0=pXoSKlo1gsi&PUy$_-|EG=aestjkEs& D`Ol^f literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_102_bold.png b/res/glyphicons/glyphicons_102_bold.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf47d4692c8e805a4a3688c74f1052d45cfa43c GIT binary patch literal 1344 zcmaJ>Z)h837(d%?+R{+xKsw#*aVy*En%tlCE|;TOm*g%c*mN}sm=9Kbd-paua{s)0 zW6~g_s4FP$i*xLQf4;a6f}2t{hC|0(2a}bFI@}OZK?bFBwc-%*qwl3jS8(jOyZ3#c zdw$RJd;Z;>M0&Vu?t8kPcI@k0<5f!uJl4_eF;Om6yri0N0F*;UvfLeiwoQ5Ucicx=lagic* zEk-@hXPK;%gk?S5aACeNQBWHdHL6i#2guR7gbkPw0kUoymM7I?RMW16_r92>$fgRa z#He*r#q1=Rv|UK@p>R-TSe6uo5Ie#P0y|7{49n3BzJ(w=BJqO6Mab4gVQ;QBBjw~& z%NIVys4_y1MANleEmRAKY_~+S(P-4S!Er&X5%gv)1nNP{+ugPxLr-;e2kEv&`WC^o zT}3epGhGkCbh6nE!gz_h3hDMNQq%bE>YN^uH562a&w%PL$nnv&x} zN)$yo!i$ka8=J8_1S}Q$PJOI?4=X$nD(v@vrbu8 zZOa>_{T?)Q3~27wvGgX3P4T9tZENC5@V6Tyhz}b>3@tplE*{a_bB*(OyjL=Eyiot? z)Nv4agXul;UVg4?aJ=KOiN!(kq3*QUoj$lY_@?57!ANbo+OAL zKfZkD7Ee(pdlrV~o)cc*_SY|+{b2st@uh(;_k1?>@9J-TA8nylJ7On)fAPCV4_}Jk zm{NOB?CC#pr#pP@f<1iU>kp6K2z-8f`JJQlU7t9MFZ7=7c>G{~A<*}9^6tvy7WE$k z+)eDwp6T58Eq8wHRj~hUch|A83fO<_Vr3`s!#CG=EG-G=w!O8rAB>;7dHMUEU**Q( xrv}z8E$ljbWngK0dihZB+6Uh8;?T<8uZVY-hxO^zv7h~aT1J_WKTW*!+JC=oy^a6? literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_103_text_underline.png b/res/glyphicons/glyphicons_103_text_underline.png new file mode 100644 index 0000000000000000000000000000000000000000..41bef0236850230f697f61a7c9c1e312c65241e9 GIT binary patch literal 1241 zcmaJ>Pi)gx8245UP(^Q(C_{iTn#ME||4HpQrfKWg&Jsbol13uOIDW5*RolzKBq~k1j4fY-uwLhzVG+_ z^LKNzUyqG`Hp(!}Sh-|YVf_@I@k0mT{ona#ORyZJR-Mk11=_VE%;<AANr@AhtY}h}9b6oEi_n5rHH!mZaLRLS zN<)q3yWMWOn@N+X#f!OIF0mm=DbPs8%K^1}sUSW*v|!@ciQJI7Bw!PZc9V2yo&%=4 zA^2gXvS&Dm2Z@4|@jW}_#k9cteiBz-JEm3qmd1Ov z4Hc2Irx$i2uOBCJcf4%W&lrY>Ym zK{iB=2QtXfs7pOO=uzFHgPrFleWH1G(1L`d5MHo59_6N5-g4M>9TLQoeA0uS3xNJ^ z7t8On*cb0>+My;)LbBZ(K{)IUF%DpIBN)*K&wt3kc(0XBz1Dl$M2*IqhcnjtpED!> zp1g5v^~v8mJ3EIr#>*$Z|9#`!%=Z09Glz{!rC--duhy^KzjI}Ebn26v_YTR&zi1$2 zUSw(yOOH!OTR8^Q+7V^Kusb(%9O%k^F4R)~xwkp>g$pM~{&1 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_104_text_strike.png b/res/glyphicons/glyphicons_104_text_strike.png new file mode 100644 index 0000000000000000000000000000000000000000..305d094030463b57660d6d275c616adeb33eca19 GIT binary patch literal 1233 zcmaJ=PiWg_6c@=BN@&_0MrpRS6)K|})RsQkl4UhcElcw3QKzY6s81t`^u-pD^r_P4 z+73H3JCwHUvg_7EdoP2*ZYwM+JG7@#T38wMu(83|Ve4hE?UKFEvD3gxh5o$n>HXgO zy?@u2mp+)AeQTEExVd`GYQpzTc#a&Hf%mp?mwo1`-KHyKo%WpsbB0IOFkcUy4sK${ z8(w;V7dUSE55Lu>?Z!FXC1KWKHrYWK1DfL&&JJS7-N2Mz!yP{=34ea`t-$+UNw}yq zq(*Gwu3y_s@XF>=%iY{?i=J?HkzW|-;2^}*;Rj(5rTU;GjQr{#Gqou2BNMt&5_U&63i>vT*j3U;#D<^@`|dW)4VJpS(M;bGbpbssxBA!@g+dC#9P;!R&^W;P9>pB zX{?K4zu(XHb6JvfL{uymnGadcfJG)9M${Q(qV(j%gN0K!@nhT#!Ic!)-c9m6Q`t?xX_RFlM^u1?$v=N zhMv1;7x$82l&9y4IKUx}XbPmzh!HT?&nG@K&J zkX12MTedWO?MPK^fM6fkm&x>Slr+N|F{K!DLjHyM&UoOJd$!QTg{8j_XHE@jmP1m@7{F%h;B_BWEhMtt!G8>+LJqBy#}#4{H}x%aC%Gq?kw$ zfsE(s)TaR+&!`d5u@v}hPV~TuI#7^|hu586K!wFlFpRstOQLi^WHT7}02oQTSaF}n zk$T_IPAp*)n7FrsaM)X79Kq%$u%aI}?OU+k!@6a(20yNOtE+!MEZf`Pm#3efxbgOt zr$6oN>>Rv*w0`{4ukN2I|8?(4`Jj2Rc4w>h`}Wm)cR#)|yZHJS-yKknom%xg>jKw$ zSo@(izcnKt`uC>%c~G5u=j)lN#~*QTh}_SI+rKQ9f1SFv^z^su^POi~?|wG@+EMP- Vqwejge>5IQaCLjh`m(b6$$v`oi8KHJ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_105_text_height.png b/res/glyphicons/glyphicons_105_text_height.png new file mode 100644 index 0000000000000000000000000000000000000000..01396b6209f145d5d8838713470abad67feb8dc6 GIT binary patch literal 1288 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_108_left_indent.png b/res/glyphicons/glyphicons_108_left_indent.png new file mode 100644 index 0000000000000000000000000000000000000000..630f863f8cf11be67288c307bc5133d576b4ee5f GIT binary patch literal 1280 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 QJ;;A94QJlIUSGcW3L)-^RR910 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_112_align_right.png b/res/glyphicons/glyphicons_112_align_right.png new file mode 100644 index 0000000000000000000000000000000000000000..ba83ac05b1c55a7d06b025c059a6aaf4a14a6e67 GIT binary patch literal 1217 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_117_embed.png b/res/glyphicons/glyphicons_117_embed.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6a30cb39f3e1eae6bad4974f730c2bb767d82d GIT binary patch literal 1330 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_119_table.png b/res/glyphicons/glyphicons_119_table.png new file mode 100644 index 0000000000000000000000000000000000000000..9524ab617c3462f5dd2d21d73bbcdcb49de3b215 GIT binary patch literal 1205 zcmaJ>J#5oJ6n3d72#E?9P=V!S7LZ8%liG2trX{f*8i|xDjYJnjUHh6?wSC6E5VvAz z3rhzU#KZyZDBimWV6fNSm7nb?&&tLG!bIbf?r6D#V19!aX)fmsM z&a|A>WvArwQS)xki3sg2UW4--8t^O;>8_Dn4BC{v-!Wqya$d}9_FB*sX|7jlj$ zNk~=m(zv3k(m5oHk}QaDt2t?0S5#dtqW;B$x7c0Mn`W)=3r=OeLusT7La*1$_X>Fu zw*{$GDlr?foCA$qvJz4|&4tP7fdvyMPV7b0BOziI?M2e1WgeLBgb+lH#;)No=_d+O zCZu*GNO@5R0v1=MozN!!L*t*?Noys-LK7#X8#_>srPBj2z85=3TXQ#ak}hl-7NFnuIK8iVyT6asA{TFlO(fRQ7zfjw4z~E zjOw^pWX_m@y+DxUUBH@hNv>+5320N2EV)#wnH9CBX_{G7v|@FDt%nJD z8vn)WMvQGr;uazPpjBo&gp#B~B4o^|=uE?QypRdbvP$;3;@G>6-C9fnl$ApF{=q<$ zG-$LU#3%y^2~Jv}X35n`!B8wqRro&E-IKCGSm>tzF%BeSUAFc8b1H){+plNJOAF;=(Af#-*7`y zBVRWfXk&Bz)!LWi=)m^YkD=jnuh!RwPL1rlDt~_YW%Tj%!}{dd?VHZ)n_P7!MX^TU!b`*>#-|Q;VJM^6z@NT-saBCAr<9SG&8@b#^ODlec%_^3UYG zUE0Z?&INp)v)F&K#_(9>7H1nFV;x zQp=zKRDJ&G&%hXlb*vhtDL9pXOwb&QR6`vyuv~=3u(9#LRkbRB_$(+Jc8d6=ago3c zJw@z^=jpsFfr^n`@IY~4qNFWUwWLmr@5ILf0U59WRPn$vZC?mdMANQ-_Mw;}@TLl^ zrie9CQ~60;ay)>?$yijQ83yM#k{O9}9J2#wX@;d}baPQ=M2K?&o4{KafxLP8oKTQ6 zEnn!AA}SEN0!7v9b+R5K9j{C=$z(FL!Lm`L5%uS7s0LBnA8cEYfvw`;CT#6YBkU8wRP8cKNK^-NYR!bi z&ayf0Rt(Lt{V^)+LDN8h=57s3ZLruBZ)n=KCYpqByFP;Gus+1VMw9EI5iNbN_X-;C zA9J!;3cg-Gy}S1#x<`JE7+w@3i(=PlHnMo?65ewe-+Vc8?!8xDdUOBP(b4G#9xlAK z{OHf$ZS%gkPe^y>%6sowQ64(7*mLZMySrw}M~cLg{Ely*lZcsHZ)EQZp7^-?;?lA5 zigSFxZ$xfMvj;BFcYL*f*H5F#qvJ#5nNO~5X>_vrfi3;tH*Or-6n*e~q^KVL>+Khp z8bNN~?hC(pC*MzAAbmotY3643_tn0^Ju~-T?|XIg zP<8x~6R$7-dG=sF_3PH9{y(zkwm(DN?BKubyH31-bzn2o11ndnCoYBmw45>_pHCln F{%=N%y959L literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_121_message_empty.png b/res/glyphicons/glyphicons_121_message_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc849e6c708d90f33a4833f6f83deaef8fc5ef6 GIT binary patch literal 1279 zcmaJ=Ta46X6fQv)UEC1x0l5T9SyY6XUS`{A>kee5?JPr_-OcP6*BBGJ?Y}c++y15f zhv}?|8s&xXz$Jl%gtsLSe2_#p8ls78g3*mxAB;W#FYqA7n6S&E`r_&A%(4lDrkC@d zp6{IR+)j-S5B2qK>!m2FuXI?i!1q;ncD&dF?++h-{0KfRxRwM&BP`hdjX&+YVc4TnAQ{`^aQFoevVoE_IrkQ z>>Ts1Smw%shU(7Y=@5-g4_B?}DNC`LLkH=>SOo_jA|@Sst{Gfw%@o~{QSMONqp#KAtDcr+() zgX9=sx}1U+l*=oQ{istYC>a}@0n4X3*7K6Q+SU=NpeHn*X&qHt0b(mC!i~^^eoXG^ zf}wWL57afZtrfeV5xVU>ZHq-N@{ms=AjP*C0dsXEbfAHzt7EH?{4MD@rqOV0RT2#; zqi~WeX+@sb3wg;9bXm@7MqVonaM>hS;$SrpG-(^K14cpQblm{7!SjZoC`COl6=hl0 zv!a|Wbg?BrBBpPlBxr(lo?!LoVpT0fCc$A9W4AjhqjgMhRL23WjY;$yWz%x}M6oaF zWQQvXofF6|hS;Oqtx%n3FyMF@1}zIY3P6H~lbk6ULLr~gM8l9orh~Otm8_dN0G`4c zSxL`x8J!a~o?(HEZK=c|F6zu^-X$H$b&@$zUDK~YK~grFG#f5q4%XaOPOBHp1JzEm^$6RF!Ig1zT3OJ#dCLxyI=UMXVcBuAGdATvUkmw6aDc|KhHH@S=v2+ zV8_Ma{@Ifo7LWAbzp;5=JjT3qZ)_7~7{7>^*)VZ_U^t1p-CQ<;?fq%*dOcU5?Oj>bj@i{XBOi9Xd)uD7f4h5Y z+kv7uvJ95VqC|tns6dvO$Ok1v#6&QfjA#`3;0OFdVzZ#e4L^`z#KiZyb}W%_xx4p$ zpL>4K^Lzf?^w8k0R$qq?!?4!WfS5t+X7p@nxevYfF797K%fnC_fx}iFmSqQEG1bZe zJY~oQkO8t<9lr?rF>KwEmK}j3>8Az7G6J%v6Q~$ALStC}j*2ZSV*uhgP|(aMv3%|; z0@u_i@f@3`(slwAwSfr-3{MPZm5DJWq7pl{nd<8O019?Ne|%(%KKO@rg4r7&>@!N=*Mw}q8XAxH|M8A0?P?Z7;jtz^5&>{ zAtNRmzR)R36d|+)k}Q|YfpRclIR%oAL?WIIhVdf}zgsn-T=AQ3chiChT*c9Bs97fN zS(I~D2}TLTbR`7CPN!E5n{FdfC}m_twn;ibk%r;LRo8Z52Hd7`M{PG-wE>v{u2pgr zRF8aj6O3|qcSlV{Raw=uOO9TTQ&mWy0|S`QMWpCDBg91APZugac$~Ia$lno2@cbw4mh{EgMe^b9i4` zRy5NSZ1pPH;0he=C7>o9%fRcU5VSimplBX7S{TLX1wf+{A52P2JQhr_lEkq@1FNn{ zSu=73_#ajZb7G7NiWHlm2@;V}6#;5c2aO($>9DcWHLp(uT{a6SA$}F)<&qAG?FGGR z7d6E)-G0*RL0v(#;biZ*Sl}E%w8S%{K6a8yZHm}j;5%;4qo1N?ak0*m(LwPd4`)D zy#zkFG2Z)q%j+Luxzj{-U{T()?(CB%j&9lXTi28rsx8@zLv1$~*LU_k#QR^}`OLjP zMEZ_QpWpcLgE!me7J5IJnLpN&IkfEi`>8{4#=O3;4Uf%l3Kh!&s@ebEF zbvWPi$OGZdg-u=T6YYELGoby$8|yEA_Tmw7-=8xVzMjoJ&unIQ{_)F($$jsi|K{+o zZJl#Hv-{_-{k+TUn)>ea)Sg>Eox%$*e0#KZcA>TQd-YP!r}tA>?|a7v|9x9{%loyZ Lq(SjieDuJ7mm$Y- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_123_message_out.png b/res/glyphicons/glyphicons_123_message_out.png new file mode 100644 index 0000000000000000000000000000000000000000..0bfaf524a863c28994b1d1ea67cdabd02693b78d GIT binary patch literal 1337 zcmaJ>ZD`zN9FJ@5#%%@J*zjdwmNMAXTwbop<-*-cF3D{-yxLuF>`;WI$6d0XCN*=9`qG$VtKJ=ct_Ud)CJOCnxlTK@9D|lQj_;umRNYnr%6OSW6KtyCT|$Vv4|9 zDsUo2tdc6`MsV5n0nSBZq)syo&ht@bkmGsg8JwjVmZH(klgyyV@gf_?+ZTbn`Np`I zS2As1=#(PL5PBj-Rjbu#H5PUK62&AEiO>eil1PIL>JHRuq!SEuEGQt*eba-c>)@e9 zZOpB}6oHtohG2WST-UG@v=fC=M%6TrVxlx<+hJTS?EvP%JsS7b4hnS-PQSKh>sH14;T|KYjTdg<^odOoHfdd0XifJ)I%*E$?6BSUi6j!f=U$aVzs8mct z*Xj8*8jdSvPY2 z|5!E7D-s=3XijDb3Xw5%5t`5f?H-jZ*xp%Y*e9Z;IVF@3(g5RH#e&41l2!N0rtUgH zk_vm!G7+G)Tg6gqEVjgJnzo~fCL!E*M-UylLkt`=xqdjJ(z$JDyqB|zRH!X|^ZxPv z6Zj@|+3yh|p9<3h!e-~{hWO%)_r%Kn#hrbPyW5iQz23X@_n9x6C(qA+H}&M@pO}r? zPxU_Xd!u=ZTs+#hu>bqW8|q|p_Dzvof@bp{?cdkln!6dl0&kwa{lTv3b3@kr?HxOA zaO&*z&oknM{PNB_k*{wpZI)hWJastz{GG;E8!ukI_QMPr`}pa1wyghX&Un!&_8!@E zX}L6CKCn*L_U1o3vwLo9!R mpQz5UE5G)9e*Vz0hp@X3pZ?>>r4J8;KeMbltbCb1JpCUz>&5s0 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_124_message_plus.png b/res/glyphicons/glyphicons_124_message_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..90cca9c4bf74a1cc5296a6ea329f0d6a292b2521 GIT binary patch literal 1380 zcmaJ>eQ4Zd7?17R)v~Fj(9yAuEX7&rE??K=a-p|!m)vcqyIQV?JFrM|$=kcwToRM_ zcGt2$#7$+`T7~Y9fkF!wKUSys1+wYp6v_m#YH`C3okcAOx((FAV8b`pyIaArkmP;e zC(rMBe$Q8q4fOBZ+Pu9P!?3OK{c;km9q8HC)QH||O|p)bb{I{=L2CpS6$fBp&B_2g zo>#IU2^4MY=?kD2!|MOiQ)!q^91vA2Pb!`cS<2f8jbXigC0kKP0mL&PtD7O>>glrt zu4^IUAeW#Mwghte{&5Ekj`ye3@liFX5q*2{-jaw656;pIOVQ}&eN2zY@gf_*D;I&hIogPr zlw%cN=oBJy5ZWR|6^li(=qD{FOEJM<(6hm^KBVDu$4sb{e5Tu3wIBmmb#xo*mWg{7 zm5fz@Ap$X74A8JTRe)NHJwbh`IQfqoV>UhHR+??`vER5ru-T zi98qO{Xv=+cqzs(awN=0Sy>PQQZy_@dgy@X%rmeNh$N(juyl}?V=OBpG{Q#NU@#_! z`IsOGa)1*8kt#NBx==Ay;5qfM`faRqSF9*GK!KK%vMi(8Dg!wST5is=acPjpyAq13 zo1WlduaXt6z|ju@E#_Exyj%)VzY_ySK#dkaF|vpRgHD1!7G)!0zr;nOJV#Wp+J=7~V%9iO+XG!IUe`60W&u<^QJ{*62xAJQDH@{`N+v^^$lTs&Vp1iO7h2*s( zGf(_;`1db9T~WS2H~G`j&nF(;xq3}lc&)g0{?;Hn9of|I%gyVF%R~HX=-iGRnf~bb z%pa3-cH-SQbK=tO(|Y&CL(2Of96jie?aN2ou0C?(jj-=n{VT2M*6xO{zgoIH(KdVh kR3FE#^xu!YePs%(#~Lp^WDwIA&U*j7c(h+W6&Zf^Kjd}Q5C8xG literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_125_message_minus.png b/res/glyphicons/glyphicons_125_message_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2eb42cfa95c1f8e6e301a648cca8e051366f6e GIT binary patch literal 1371 zcmaJ>Z)h837{6I{V|E+ST6H)%E`FG@^18YH<3>DiULWh}it5v3K6DRY-Z2h3j4+_4QCRxF;n|O|wjiOg_bi9?KiO?9OB33^A zg1}WJMC@i0RKkpcf;w2WK)RaD$kkCfs1O7FcwdD_28sYmc%`W6HeU%54ZA$rJ7SW+ z8!B)#M68m^CWi2+VF8@=`aCj4(>TX@=^mEj=p8si(F{qUoAb~;Jj?NnA8%d+@@6R` zd`gHleW6o`C_rfPBv~$(y=9-*u<|4w39(!DeQpKa&?v@1s*s`UXP&IVi zu_)z?5)2WD>1qf?Gm&T;*6n7ZP|C=PWRkR(B8x>Qu7hY% zM)eqRx4iu9@JC>XzW(8X`)GRw(Su_hxQNy9ZjxQ` zNPhRu%$9$m)vHVOZ>Gy#4^~bk)7O8Q>}9r`{`sTy=GVXe^}?l}K0Yx`{M{d1g4gSx z?{i(4tG%^&HT$eeQ4Zd7*D%7uHA0TZJlmz5K|G$c9-O?m&=7-OD@TE=XPDWp6mqC=90H}q4_d- zZ+9*DM^~mO?fgIlzmS4|Ow^)ib*$BOpvZ87(mLk$hh;iYl+9Y%K+EQv>s>847LvU0 z`{emO&+qxlv%Njt{^niH7>4;%`^5}e_n_w<-v;!);S)8q?1WMd_E`h4EIR<>RVxqh zlpz;D2FU8rlV?E(hON7*Wpgl>KFBGS5tKchV8yTz8pAreDz>Z)0*L29K{MmTwdvCY zuBmb2a3oEoZ2=Uu{lgCE8}7*}!-GmpCAvECjtYki7y!z6#n4TctHg<_T@LL%F-hQ6 z6*w3tR!HU2y|`dG0FMO20fnMzoMD1=dxT-=eRznXLnMW6CP24y5rzvz@!CZoZ;m>^ zWyEC77dpj>B7`N32K-0kw%TrX$OdEvxK_zg zP(21(>tK|-J3Fc?s>-UKU2^nloT@?s9T>obE+R!&86oD}AxA?6ly%WkO5WF$7$-_4 zP34$~#DrrM!!kmWro{x$NFkABqk_Z>iFPXLIr9vx1tLjMMOY!sOYISnLTH4QLa|s< zA&q6ICtXxX^X$KVg8 zWkoYRL7P{}8duTbj|A%PM6IBN=QHj19C}+L}x)C zvWuExnQjN^^`NdHKy|l*CD&N2iq|x4T@y`$w_P1UbXXl?V4}%&(1`k`4$om&1D+E3 zY~|v|uZ-M1if@v>{|(zSaUVQpX1agz9bfRBYHGdU-#y|lI{wFhZfs0mb6R|zoy)fI zhC6;_c20P2%kjn^pD~sj7rx-wz047<)=rN&Rl$LTU+?b%WplEztYz7=uqs^-gM_&*%yER z;avxKcP!j=YxCyumeC!tsrm1S?5}?xxH@*?ug3nZ%iH=f>ajoipX+$t`>$dtsYjel H^dJ2f9bDXP literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_127_message_flag.png b/res/glyphicons/glyphicons_127_message_flag.png new file mode 100644 index 0000000000000000000000000000000000000000..8d23cd3a2f8ad8cb8a18f1476740ef50d984792d GIT binary patch literal 1312 zcmaJ>Z)n_P7>^UB+}2VUY-mBV3`Eh(-%BnRd!4x?=T3IDTyLy?aO`dJ_AXxjHFdj)f%e`#yPo z&+~i!<=EKhll`gtQv^Zumv-wFybj@Kd*8kI{qMF6jhFk7F@eVYDbxZXBvi|vgk;GD zHCTbbYENH=!vt~n4ZAvlCdzvh(|2i*=+LnnU^GDt?}`IpHXtG=Va@jP)as|7Q>1O> zseNLZEe9H`+q-8%I6gC4HD?-T&Z2gWki)Tp4Y&{iGIkv=QsO+-v8&*HB4#MEqk60CIGSZ#H;JpG9ia-mMdP;GQMDaFrUE0s8Jf5rQ#*TL zoVzM2_0x?a!>olcyV$v_9X&_fX>#dR2A=E~EdjSC1I-8Y-b*OH#6noZkMB+-zB z94pC^R^&Lnph^a>%W_sTRIQLTQCFp+EX#UU zl(U5%w&X9xvO-A8^@_XAQJm&k|9z_h(Y@JLe0 zE>{@Z2ccCAeV6Q%La}edfaPS|XjvR1k4bR&Bnw4@FQ|eh8ipiNU97bsWxdET;D1;n zE9ojL=&Y!56obiFrh;tbz;2JK4(je4JLwa}0bUI!ByGVd&~y+rQghlt-8OwM8fKCn zbZiXh?AEZ%28$i>hNkUl;z>xh>m!H{>q87ZJh@>qq6^Pl!sGo#Nmr}!%5Mwb^&cU( zyz=4JpC6k0Hg)#!iRq#CyXWrOM;{OVS>E*Hi_gwKx9Nu$&a@X6qvGR7`(7LPY4+yq z(xun`1n1Q=^A}z^IC?er{;$`*d}C{4_2zqd@2f=sPk(QYZiZxbJKGl6jRqz=MUXDu=GUVTgy)!E{$!uI``TWB0r7#?d{LZGFh*50It321LSx81qym~EJynN3#QG;9`JAJk4}&hCzxn=@zK zO)L^Bh(VMVyg+SBTha%Ewy|na6mJlr5K+X3YAO`;p(55I>*YbgGn?HsVCgV3=bV53 z@BhF5HZ!9mL+kst_7McJK0mA#@wy#9n|s&c_s_?UAHvHPq?gf{UqKBcgoI-G;}GOs zqY8`AuqL0p2nPt__G@;jjLLmmz=q@Dmc) zR)&0-FEE8bg*AJ4DuiQGBPDZc!c1G_;65@Y^+EG{0GFSA1dg!#{v`iX0(1jj~Fe$dp2s4-Whc+&t;b^{DkH6-%3|X(+mMrkP zkW4dzB&a!-)v}79bDAWHs;;Qn6eGsYVgsvzSVCDCt0oma#cL8qW30}l(>YBMa*`xz zA}@*AE;jE)$nZ=UJB_jS4Xk)etgMF6Kz>;AeW%+hqctD-QOys4IwpXf1;ezxSg2AKzp~0rB_*Oi&r&mR})V{yj>YVd{`M`=;6r?@rcfBWGOt}U*t8V)cpSPEAEDA z(EHrmccPbH`sNP#=nwPT4ogeNcJ$=_eg4G@*B6GiZU$ue>G_1T>Eng>UYl-}&;PZS z?ECD@^c(4+rPC7&_x*ioanJ07@Bi`Do__`pFN&4iuM5Mi%*@`C@AM8c{a1H?bl2%i zYo<1~=2{zSYv20w%JlwIUtWIT%FcIR@4xMdQ*U1AIsfdAp4Q__TP~hR?f!9O@%Ur2 z+w7zFv)k`|;mF)0Cuj2qU;XJ!;oCKHa&hT{yT88v`?Y6|%zb{(fk&_I`jj~M-7o9r S&w)+xA1kkqXlJtr4*duG2Dmi< literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_129_message_new.png b/res/glyphicons/glyphicons_129_message_new.png new file mode 100644 index 0000000000000000000000000000000000000000..0015dbd086990de80ea335550f86791d41fe2265 GIT binary patch literal 1340 zcmaJ>eP|nH7(eYOwX}Z}wN9z*xMFF+cKU*Yl zLr)O9*&LN~B~UgpvmO|m%@?)VX)UG`Bg1&SCL#kCfGS?IOxqW038GDRgroIx4c9$nbdcB9J#vpArjl zy6Fp@5=0q7S0u@5wHmHQ!j4xW=~yfl*kG6t(g^u=8>+RC?f17V$iUY;!-a-pVreI&2Oxu+ijtXhc6cv2YQM_itG_S*%?= zdGNWOQ+U@i2kyMoe*bb$-*S(*=hLV9;a&W<-PG%cPxr5NTv=Vbc7Ey0%e$7hzx_@d z);k-|R1b+SMnAC6-2Q;_i<)8bzk6SI9Uj=*_VS?>>eK1blMGg^tvB*wML@`$p=Em%0Wo|GN9lj?}-8-E;nvZ3p)c`0mmp<(a?8 z3G%pbr2YF&Fs%WLO$3U9r;Gx(onmApKkn%Mszrzgjc literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_130_inbox.png b/res/glyphicons/glyphicons_130_inbox.png new file mode 100644 index 0000000000000000000000000000000000000000..c49a07bd0c215ade4dfb333d7a776bddbaebf001 GIT binary patch literal 1316 zcmaJ>TWB0r7#>U;YG{n5h)E%MGAm*ryK~u{tGg|`GqcT>Y!Wt$U2373ojKW^W^S1| z+nuEPQVSvqeNa$Di%=0nP#={(q!*DCBDA2^D{89fL%pDaAXq%J*-ZnM4l{Gk`RD)s z|NC$A?CkWx!GV1P1VIdzCe;dFhw<~^u73R9Gj=A4ml34Z(44n`+Ij$qyy?{;C^>oq zR-kS!FI|CIg6R9zs@71gJS7{RlhR|IROI*=O%T}wk*^zz5P>>uSZFOSu`Y*Jg^^RBN-cTAksnP*ls9CIkIC{#`{=Ik)Wf37IWk# zsakm!C|&>omr5rMnqdIXr9oQ|391PfIi} z@=B3m)Iy%uSXC4SMawIN3@yaYVguWOSdua^R!}uMli|`dFX57DtRxlHJYN(=Q585* zDD+O_UIx3- z%OGK%e*Ws7;jskD6xVi*jwLSac=5^im+l|hyMAm&zW2%>uZd4zJUO&RjQ;%C2j658 zeTn(sOZ#@L-?Oo{v-QByt3TWo6=BluzHw1^@Mh=_Vq~r z$uk$7cOU-nr6a5L-M{?%-U;Wqf#jb*JtFDT=U$(uZ}m^~3A5imwR4!b^y$PyVf~fA PU2GIp6dnr&S}95C1I1!888j+kcYd}zJ3DquXLn}Xjcl#kEiObN)0x}dvGd2w zU3S}-Vp~K@j4cvli4QjTqKO#lgP0P<@Svzgh`7cY<-vqLpfoY2J_x}(+uhnk!er*o zxp&TY&UgOiwVv+IhWbb9F$`-+bcreSZt(&=}UXr)bN{Ab@y3$ZBSUSepBs zz%?~OJReL_NjnB|TGy}xdWXBy%J85PR*60Bcw3Q21`GgYylCjA%NHX=*)ES{@0cX; zvI-oG5G$lI$sRmrIRFp(13rbKX`E&KbZd}h>D@R((F{qUoAuGHe30dt5MH?m>s0_(Hn~k%Q3YNwQEV_zMBQLF2A#6yLs8&?q2V(h{17v79Y0J{9t)Ol(M<2)DX)?huE5cb05$Gd23{@&uib|MMRSOC2*t>t@M*N;0&$6n3V~Qq zlGq?o!K!OgR*f71{)d%9tSC?ckqX9Wf<$Cgg@+o{L8V6p9abb=^ZJC>WiyKs;#0wZ zoYx`Ip4Er!oTgZ&+eUglsA~vNmR7Lj8jI!QHBDR9M3dl&t0Raut3wP-G`S8M(G$;H z`31usdNd&l>Egogeb*Ys@y)f{xK4Y0{Cwk%mmAIXNbEdRUa!`1U6a@AUp;X9*69o4 zx#epcjp@?q=PqW9t1Y`XEPT;k`1SZ?uI91krpNccG5YYv^QFU!cfR5l_nrN5+3a^d z*)sM~@wgG4Sa)>1{Y*!x{ZhS=nmzf-mi;fze|vXMEX~}j2@KABw(su%HgfDrPv+eV z!*5U5%r#FOynA%~kNE>F-6s|fZeHs6p^y6D;?VmixBYo;yyNT8MBkaEr|Yt#rQld` z>o;A#nTbkTg9Y#Z#@6j?056lm!B>k znPh%Gb?cp(?bEyN)c^E-=Y8(^ zJcJPM5mZW-%Z|Aw;H|oU%1?dJ{zFa4|}aFEXWSP1l1YI_RAyLQavnm zGe>~`VWki&3RFO(f-#yP5gAqCp$2tOnNdN96-n2;IpKBL%%Ot#RFIYPIwab2ddVKt z6w7qmNN)yp4FSs1B9>g{v8-M;v{g&A37)vLg6Occ#K1(G>!202-wK!*wqjF46f(t` zxxNQ)eVSTp&{RuzP2*iF*1SAAmN>L>_VvbbYEAd)J-husbdhRL&DayZ!lf6QwOxPC z9Q~Smy9Ilt_OVk*hf)W&y!U~cS^rea+`qRq zpY)GB8UKF&%=shF@VYy zuG7apEj}{$kxdVbUdX)hRebvFe5pCK?b)Mk6AyF0t!vR&#kcSKeZzfko){ZG@>=^R zhc|}qAAacE#2(Q7P4x3lb9VObgOl=jFseQ4Zd7>}EdTAjFVu2}pdWNdb_yCiqbdr5Y;n!Duev0Zz+JLe%HOOyBRV)JG4 zo_DQ?I6tsZv>P&5WlW{R4{YcD(joI}_{YG4D2Uo_?yo9!c1}e>M0|6->k5vAB=7q^ zd4A9Hd%iNB8+>46XHO?V5F0ZCavrZe__?QJ1Aaff`PA2Vxf>}ZRB+0uu6mG=bY~cn z8B49eJXH13$Irt!L9AakiX~La?h`e~3af!mxM8^%O%U<^hO25L5Rt>MV%Q1l%7-6Q zq@gFMhqx@0byKiv42*fOFg94!#zr(jr~3Dh@rH;ESP-dX!!m7OY$T|rT@mjCF-?(8 z6*Q8dR!EhyIWpyVkmSPAkjAhq2|$?b;{afHkr9TC&!PqXPcMsk zIo zqr9yR#<{z(qqd^1t?Ico&uqr2Ycw>W1#RSGQf!kEW-bnS1}>m#%8phGzGmbERjV1g z2si~q1qSdSm1bEvDFG!S^L#9&NU3BW6APRL2G#S`s8amX0t$z$H^6f{>Oa zkmh+_j&Xb}*~VsUAE~wm1E&GjxQ1nKh!s;FRFUHq9mj09O0Mc4$FDjrnJNIXH>+xf z9SC*?m27c^p78|K)1G6I%~FWQbr>)#k6FiXj5q+E#V0ZiD;^J1t%n=!?Id45w)jcj=EJt zb8J6O2R&#S7|`6UVCgj$o8mQ1+t$RB5NuaR5Fb{D7}|JpJv^d|^N$VT@xGdorDEgz z%LnE+Jxkts^Nw3`hqedzy6w|_d*9o#`^5wIfAZ<=U5`#Ze`?{2zlpQ8zy6r4&fMC$ zC)+mEz$9Tr;c>Y6y|24 zU!D2x?Ciqj?vL~f=XM{xc(r`Qou-bGQmrO&_z)Hk1lZf1VpgcM$$ zJ1#D-tG>JU+cPisyl%bP<@}a;hv@A(4IW(DzqB}9KUSS3r#8u3Q!nUm{qie!+Yi4l zF4Vj4J2=<-@W@^JV_)ui>E!f$|G5)C-TTIj`tQ*4`^0);=|^uXIR9KO__<}2L3uWL G@X&t>)XB#H literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_134_inbox_in.png b/res/glyphicons/glyphicons_134_inbox_in.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4e85aa3780f275d4b0b9f19e70b121ae5a5420 GIT binary patch literal 1403 zcmaJ>eQ4Zd7*Ff9)UuDx&Du^KSvu5?-R0x%a=CD~d6(q6!(Ch2n=5XUrpeo0Y%a-? z_q=QOhccNW$m|qh+F6TGnCP6Y6$V;XR~5y9RFREQwNzn(>jcG$Qk`$EcU{4;kmP;e zC(rMBe$Q8)Z*Of`Tf4ay!?3l<-C_q?8_=`4rW(CZpFjCKS{k9$1v|}Nn3rvU#Zsq=CcBS_4ikbDvu8yyewGbM^BD)Hftn>qj_kcdlh!Vek zc%HyDHA?IYrl^!9fQ+_#&<34@t!ZVjUkR(kuAO+Kz#{`$0A;+8)eVO)M2VtZ9_?K* zN#I2l*dHa9Np+>#aly0!9`yOW3Psa6%lha*kY(u|I7874Nuitd(g8lm@=ORXT?F!G ztG#@Om?-%|rznwu(BerlpU?a9exGUgk#sm5c5N_>7ioB%0Rzefui-S6Er`HTY|Vn2 zY2dC!xyQ`GD1n$Rhmf^WsTIS9Q%V#{8Cj4mlJ-$#HtWV!)OKJ8xJl!d+D>}F0%Qkp z%$%*Ddh|Ax!6!PXT+^1SuxO160U$<{DTHL=vBhu<<}BE+n`h#fE8` zmY8rjA;#DQ$8lmP$c5r%Y|?O`Y$(8W>SDE<*uZVEykG+vns(YW^>VAUXG~~18Pmdr zP8NSCB`ccY3Yy(Ymbe02dlIM#+sxv{Qt;X>7*I5a8ZCrkWKj4tI&uDl#KdEMAt*^~ zkSJl*RVgb+jsX9|N+DK^QGSsM3N%3?GOEHu4eFrOqcI(pcDm;F39rjWA4-T<1-)`k zhs4f4eZb0SifK3z((OTALxAFL8B4CRSQM{n+Oj5^1b4eKg6Oa^#K1t4Yoig}d-)WF zVHHhDF_tb|xwdy^!x3uDn6JB~+mo<7iJxnZ&DFdxRk{~Emj~Z^w(bhP_|^B5ox?v( z_W!1Tdv?bwYV+7TH_lyXyZXz-sq0TqZJ)W+ocwNV`{ac?iKQo|>#IIFdl(y^-&Q%j z-t)ktQ{-f)mBvSpeN?FS{=MbEo5WoUpN7{RHD-t2pQ=0EI4j)0>0s4+=X$3<_-3Sj z@!s{r8R_A1rS6}R*ojDO7gKl{4{f{jb;H$>E%(HhJ|4>NdHltBVQJ&|!tqW1@Gv`5 zfAPRp;snMY_y5SwEW*Z$*NNv&u6tu*{=P%ibCHX$PK<7-du>e%!_|5|^H;uo_~_O% z&L1!RIrlHP=ImFyH$M3J!KO3&t>(W*?|zE8QAt$n8~Pzy)qs6D`&e5v@W?an?=UH~ Kitom|kNgK6y4)ZD literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_135_inbox_out.png b/res/glyphicons/glyphicons_135_inbox_out.png new file mode 100644 index 0000000000000000000000000000000000000000..ad10f2fc9ea19a8802aa90b2405f11623e5da52e GIT binary patch literal 1368 zcmaJ>TWs4@7|vKWMG>9Qlp-kYWSmthqlxWY9LGw!CALE{nyw_-s9=b>_Gx13*v38~ zNttL%I}j7n=)?fQ5G$(ofW%a3k6g-DUZzPCmkB7^#3mlt*l4*3_6Wym(p6%b<;yw0 z|L_05|8`y*9C)nF-QjjP9Br92pF`gV(9_}CjNTtF9RCY_9)!XW%2m;Iux& za7>Zo_>n2Fd`6SgovT7F&zs4ZAE_+hPL8 z8Y*x!j<1p$$_`?jZUQXq5BemMqA;5FQ=u?TQ@vP#qyhwqZrVqM*f7loB3SdnkvCHw zVRL+{=?m@RcnLy-C5URZ>aPa+QsXf$fu2n2jc!)MhsDAs(MVQsUV(8OF|j;o<6;o2Q0l} zN~j(q-WC|;?(U9Sin6q(XH-nJ5vME>Km}!>K?{+h8jKKgc8{r`0*WfHOBMTXhL7Ww ziXyXgSfGPZl4fWwMNxb*K??z%VIrK6;F2LSVmq@9tOp{AUq;wuD3at-3_?dKiV_0R zXo^qJDTZPANSKKvTiA?dK~a-{?bOC9x3SD!u`Fi-5$a|^*VR_543>1LTP5AVxIB&Z zWJO8QY{4UTC7WDl&P1oMk!e34h%?&L5&tcF$Pfh6xuPtln_WJf?QY-=rG>I z%Ii|riW~v{hZQ0;pCE%g8RjUQKxAZzg$h(bvquvuY_3$r?h{rOwIWK0PX;4mMTK}@ zQLP&#Mbb4ZM%X>5DhSY6tzwCF78~MqP218$lVC5`Mi6b*h8SpQa!oX%$J}k`tk~el z@QFh0$D4&G+Na2S=k`ua@7{HGdm-7~e|CHSJzL+HaL#!)^1)Xs!OwbqWn1js zOEX^HcmA6bvv2;oc4B>L%M#&e>SKf;->9OTkppDw1hUeT`}TA6?N{tLo;p@(|TFTZ-SZ}ZIK z^S@mGcXEq*^xMyScPvf0ZZ6G@%X_{%`C+`h>);R0r73rsRxWPav9B{s{}H+IRrg!h zv1fcs3m3cgPtSkha=reOOa15YE^YVU9q;^h6P_z)W<0a|KDgk%e7tjfL;679 d%=k+#(y{pc`_$eohd;B=x{NTupGqEh`9FdM%838~ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_136_cogwheel.png b/res/glyphicons/glyphicons_136_cogwheel.png new file mode 100644 index 0000000000000000000000000000000000000000..a667b6ec78787a0f49600a358fbcac230e5e402f GIT binary patch literal 1417 zcmaJ>Yi!$86n0uxwG&0#kUC%kj4P@Rn%GVnCvlT?iS4WrOBd2iEv!hm_HARuFYFtV z_D5lWG(fNR8KO6bA|-hK^=-kw{AC9EbzdVEX9P1q2rE4 zvCqiE2!WWcgrJ$puaE+-15j4X;KNqZ<#)10_U+BQss>ojhtZD$5eK&F9htgWc zq$nx6BiQCtvdk4&%9B8jTZV?0O2H~OU_jA9)Mx<|qZfrwqf^iq7re2kkMj!x<0r~k zc}>bHkt4wWutI?0qm+-Q{2Wb?h>R?;P=P8a_h?jw<(;ZHeZs1uK7bP9mO;OmS0S-| zKpix*ie%_^m~?tjRS=-GTfvfRESAJ;nzo{eCc)XRjvzX$4l&Tt!1cc1NXZ9GNY+WRn7caW-^ir&AgYEzS|u46})o!WXH+d6i|Ge17^E|_hz{`%td z%vtyJ^6{~BclArpcRaWEVrb|7z^9?v`Lm--myi7Xz}y=n$=VG{>hOw&XamwR)%YPM$G zSBDPAxWL`5?_93`;oH6Xnf>9T`}9X+`a{1y+qiJ)!4}upy1M1%pSBEN+4N_4_O^NV ZN$mFCM#I&1Sa5!h389mJKlb=D{{hr0=0pGh literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_137_cogwheels.png b/res/glyphicons/glyphicons_137_cogwheels.png new file mode 100644 index 0000000000000000000000000000000000000000..e2afbcc6a00856c3cda5a3b0525d4a788c1214db GIT binary patch literal 1514 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 EKiRLG_y7O^ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_140_database_lock.png b/res/glyphicons/glyphicons_140_database_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cda21c5009f60153628c88345ad8ccdd65b66c0e GIT binary patch literal 1310 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_143_database_ban.png b/res/glyphicons/glyphicons_143_database_ban.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef8e731dd66f861f521dff85b042106593ad6d GIT binary patch literal 1373 zcmaJ>eP|nH7{9u4K^LxH-E}I$Y@7vUeVOW1^RLG%q6M8m#deOUh*V`4e+ylh|oHVClO|k(NQ_Ld3 zQ@T_FIUp&GJ*Png!&co;^95K)@8o4u_e-vhzph&djbV`;bxV>f0OCbZQjI9_%V%E@ zxT-{nsbHE)TM1BBM`vv?Ih)DLvlTh45IctPNS#LpbO0s1u4{(F*P}$!E|2!Em?ZF~ z3amtlWm1K77EhQqz=QsPPo`)ZXIVcz6l7U?JI+uvLsIBwee@6?WO*ipw=M#Cvz2K+ zCnQ_G&?!okA+&gstkr7%TEK7GC6W$@!>$d6@gWVL(=eb^_Zg12Z9xEzY^xSjO#^o= zN=35@qXc5Q9D;78(;dTx(@GRd8CjPslJ--iuDfwHwH=rP|IxUmwv%sIfXo5MtlBcF z$F#Q%M!CDaqqd?Vcl4~Ptu^CRWD;mV2L^NyDZ0rBG3Uo^6%|m@1XHfMUsFPqs8&^l zXM-Xe2vaP_CXzHQ#AB?;2pktmh_OU`hzhyRTmvhCNa9xzHWmtV49idy8xGL4$b`d5 zA;u;-juS#bE);KLQ-%X2Lk6x>7pr!#bn>=XK4Ak1ns(kawRWpy%O*6PvT5OoNfzIl zmSoj%1rNEEY;gs)Is=rXZR&Wl6uf#11{BSqMhl@B85BN^PFx@NVKrZ zij=h@M}Yrf#SkmRsDMBP6Es00GK$PY6>6Z>qcIJ(cADz;39m^;2_?j*fN80!L1MV1 zHLS8Kn}!o1-5%6b1ZeJ-vE&MiP4SARZEK=QaJQWiM2F500|QO2jYjm?3GpI^b@il# zSiXMg=f|%1Kaa2L`4Q8yq2pfaWiRX=S@IlM^uSf0c5Oa?Dsp(+H-*=J+c^LE-ami8 zaqiLl3+sf{2M=_Qd-m?noc$xdrT6sUm#Zv&S@s;Pg?|hKm`TfMei?s`<#t*$Zc;cxe_Z|i(7c%c( ztUPmkxAyJG;P#n)|9H7IqeIjaW5vs7tT(o%miFAgdw=in)wx26ZS;5-o;`bW>XRea zwfVoU7)QU}Fn8@O&&(sKB7NVvHM<^m<_1y&6W*I!`oEeHK3u%UTmZ+;WalLSe|>!7 ghpWoelXtAezPt3mM}NPLuXTTTDKR5_5Py2#za~-0n*aa+ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_144_folder_open.png b/res/glyphicons/glyphicons_144_folder_open.png new file mode 100644 index 0000000000000000000000000000000000000000..30e42a9503748a185bdea50fe7d302c9c1748b47 GIT binary patch literal 1330 zcmaJ>TZkJ~7#?aCYV-Iquv# zb7GPO#Vz!~TD2$@>w`)yMJ?9LgS7fksTOKg6ugzX#amk~$eIT!iy(L=n`{>>9cJd7 z^UweN|M%bKsX~5w{m@-Q1VOCN?ox|*9mCJ)-~fLAU`&36mrY2UK_$0>8oCb%*>q7(Vn6bR9CZ zsL#4}l%g=xl@M$%ms>UL1l>g8l+jJyquD4!+jbaNM>{}8aFfO@wS#iY19TAtZrwL< zJu2fpFwWiW9rYAVV^z{YV@L7BkV;PN85G=ZnOSaVIv zdXZzm|FBv@P-P~jGJKk)XiUa5Bm|KKx;-jesJpXZ*e8;uJ5`*JhzTls-9prks@3vp z&~Tk#iVl0wf*8=*tzhXj7CYiKP21DNlMrrKM-U%YhZs0`a{X{bkM>>0<9#Ws%H`&z zFJAm*!&!28|2O%M2M<1ZH>*tV?cY8${_Tdv*Ybx3=tce0(bT?cOaEq1KM{X?3qdIx z_m4-mOm4mQ@Pj`phZcTMe0}Wnwo`q}Z@wjn?O%_}^w_iCA8fzAd~f?1bl~bgd%ioP zp1)`F+oRI%_Juun94K6Q;qUiHP7G@&|0td19vb=Z*ue95E{vSuF7AG}3YFick8EE2 zvfO%S>CuUG9}In>Oq{>I@$Z)n_P7*Dsgj^aKPTgEoUcPWE*c=>miTrT$3=91iYV7hue@R&GElec%-<)6uW zyKAR1s#4UV4rPc#MiIZs*q45CBDg6Gb_|q(`avfuipb`epB(;qliqa&$3k*>-Y3uR zd4A8odv#{|;EuuFg9JhBC>>JE`27fec5NTPznv}ncEtyzRne?Jk6K0u3EA@JASk&; z4VIx{Ej)J_P7uV_8+N6Ns`?X>>ARE>+fZ#cz-WS)m~01z*?t~pzS(dB(?Ko;#b0Qtfonjn4m_U zTqjl4XMo~|5b#twWil)a1c72RydbcT0ghogn!&e_VlxsiNL&_lFA_%!t$C@e7Q39hDGri&U^kkbmUX#!7nvDT)N^)knR|6#SP zpvp{IWq5@pX-vj4C1fK9c4t&}P*-y7cupk8@M^dqDGSaUO$U(&YR*DXw@u%RCg^wu z9UB7@X&p;%@|dVM4QP4Uc2?~sCoYEH;2EtUb*n_%1QdvCuV2p>gT6# zU7tRC=k>SFQ1!mfmer%b478?DeffBO`JbJCei{7TS=-q+K&-qta%A7wtQG%Xm9%N~ JT;bWJ{{SOKuQ&hz literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_146_folder_minus.png b/res/glyphicons/glyphicons_146_folder_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..f1dd73d282f6339edf83141206469359c5655ac2 GIT binary patch literal 1298 zcmaJ>Pi)&%7=LX=Th>kNfKZ3DV!Vzqw8VcBJC4<~IJUzAO&8J#a+$!fUlLQ>&)6>{ z&8Y=;sD#7;X#>GwMRd}HG);m@s2u2_2zKBy!G!}tLP&7npAgb6EIhkOSBYts9e?lh z_xrxz_b(gerDu*Ddh`$g;7IYTRw3`>SG2+) z7CGhU7RJ8JFr7{(*-0f)&}6u5HXHfi`2?{@gsUDlx(P2lG4!Cp&UBi%zZn*9XN5GmdQW|y3oTRA;rav2y^*dV3P(Kj)u&3^tGtv=yuz-WKqz? zRF)MbQ7v$smRCfb*CZ*U>WZ3AvzaJZ+Le6kh$}NOZ*g`&~E{oKYCBwA6NO3yq z%J)syKKcId(KBvSWBnQjmlN8%Eo~^nBA<^;@=yyl{?* zX3((-AeQ#9%mI(F`oPc*Ey*TC;{FPf!~POOk8Ey0R&?f#58fy1yZ=KRxj2bv!aNWqbzCzcX_5rJc>`S?}qcTYc@v ziI2AN$ol0AS5rGQ0+&ubUi;IS2+sU_?&{X;yMM25tjiR5mYL1}Hr{K#H&qrM{_4~# zGrQ-dMQ~I3uKZL;UrsiMB5UCY1x`hSi~qhA03 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_147_folder_lock.png b/res/glyphicons/glyphicons_147_folder_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..36cb87da8b06d7fa9e6c0ce0a351dcb9c9935f6a GIT binary patch literal 1271 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_150_edit.png b/res/glyphicons/glyphicons_150_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf91bac7d37030b30657709ffe65acec57479b3 GIT binary patch literal 1343 zcmaJ>TWs4@7&hu!K}S^W0nxEh84s0CYJ5xV*jCaiv7I)8bXgifnI?p5pCl%}VV{u8 z1LCr2nu?~v#LFH~_5=bk5L6TFq7@#1AtW?FNPs}(0V)LIDj~+h#BrK*m6&GPKIi=Y zzyJUKn~xV3<|3najba!U$;~T8w2q_aj$232`|wZXBwBVubqOxIW!TVsfTaz08Q?iv ztAHZVjMn3qK@!7;el<%=a4G+Qq`Nk$g*s%@_7EDwlCw=u(`x|Y%b;R9DdM;Dmk8W6 zQp7`Cp3ZwRsG9R_A1t;PN_xAdiv}?}gD0C3GGGI!;Z56e0;!oIdUhqW55*LL_f%jl zMQoB<$`^3i^#RV2v8YZn49@c;6X$rInZ{X~VJRBje3Xex951m6ynhkMn{Sk*qLS_V zLZ=i_h0v2Is?lhWjTq_r6^ao>F|@(5QKS(KS`O5jQ770pu%LiI_e~F)u7igbwPm*s zQv_nV8G`NQ^IL|Upr0s|GODS06hqRKZHIC7v;$ZK*J<2PJ1Dh0KovpY)_on-qr7hb zM!CDWqk*EKZ|Qk;-|EF_=oGMk4ICICQcRB#VlExJn$HS? zpd>gUkr`lfP5?DW2cgptYhK4@Zi8w(lMD+Rh}dISYunt29YDc z|FCL;SJHG$p*fi$C`884C1^qm^m{aI!T!!N!#J}tsDpt#@n!4)* zNh<6?%S3?QZWBvwv)B`FYubS(nuKt>HG=4{HN?O{lk1}qJ+$-GYiPVTa!R_?{Ce%h zZsZ7l`_b;?ySw&wv)+!m9!y1c=_+fs#hoOIV&kJrS6)4KK{$k zv+D=f-pU>LXKiTAV~_6_U-)tQATe_BhvY{SQzuuyuRb+4dg9}I=dWE5$6p$DNE&b- zmgj_5&b6N{zH_-V@`zp7`3C#u`bwm9?ArS0_tn_dnJahyJG^mt<-PWm)15!7?CMqj ztJ4oh&WKQv)%D4!g<^yT{fw@?=ryB9Z1@%*vQsc-(;OMONh?VKF`9hO_K szWrS7^*{c;ZO@a!RON%0C%@e>j_od-nFgQoF#M(E)CJ{C=Fw;V1FYe`=Kufz literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_151_new_window.png b/res/glyphicons/glyphicons_151_new_window.png new file mode 100644 index 0000000000000000000000000000000000000000..b181f596578a2f5a5dbca831d0f65264364c1fbb GIT binary patch literal 1376 zcmaJ>eQ4Zd7*AI>kFM3Cw75Dkq-<2@<>Nk*TxRCyzl$u z`906?`O4D+{r9#sbu?iZ){^QIGidEVPrGjedjIg$-bJ)*f>I6+TBEQmI{=HR)(F5; zhMWf(AgkkJpM!1;Yy4fy=3p+pLr^S(lsz4?V%P|cVck6yTULqy;v*ohnNec-!;cAE zQ=`NK;WVAL6QH2=O*mk1qCcxl6qSfd^lZnwD*`fL04U=XLpNQa5+$m31+@3X6oFS& zU@=OpkjkY8@Py?6JWK}t3e7M$%aTke%(Bcqcz|XC6pe1y&xC|9D+D;ab`i*%qmBw0 zF}`1K;(HYA;l8$5Y2hcJOgWiNJ6RzE78dy7Ze$qjf5FS3Pd7F zF~%l&o)@_=&&BK5l<7j*RDkEy!)jNt^mVa9!T~b0oUCQ(^;Q`uSkQ6{mW?L{S-dMP zE1KyE?(!;G;|d&YCs31)W#H9P2--Cm&6+Ikf-akRln}oPM&*(YiS2oP z+%9N}WxCyz*Mqu-0M*?JmRe)6DqhpHbxkx0-gb2a(P4Fnfr%#9K_mKTs7PX1gD)k< zvX%2EXCH6bgEvbToJRVzvCzq{>*P;A_mgkml8^J&4^A0Ni;?$RyK*z0fun z&f%u%*z#VBjI~Ye-m>-UmydpVW~gh&UzcaFH>TUp#kc+WaO>9B|9HMX^xkX4=Cd1S z4?Otft>5}yXihZGz4~tlH`b`^f9B^qrrR$YO+n$KcW(GBvx(_Fa^SZ0b9di#cILwT ztgQ}qIj_N;O#dqeE+P~F!ITdz4IICw$?k}9s8#=JvdpO kU4CfymbW(he%rQ$eeu$vW5?#Ej(h*Sl+-UCj}K4%2N|l)3IG5A literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_152_check.png b/res/glyphicons/glyphicons_152_check.png new file mode 100644 index 0000000000000000000000000000000000000000..529b177f68405f7ab8d36dc0d4f8627112239087 GIT binary patch literal 1298 zcmaJ>TWB0r7#^smH5ere7TP{|m>4hBoonVww(0K7tX<=#>Fz?;N--xhC%Z%D)|s>J z1uVrrNL5t&Ac7+HLD~l~ltKlqCNxiqKB(0PU#eiir^W}x2dj8yvzrDi9cJd7^UweN z|M%bK%>3NbW21XVDT*2^9WpCq-A$g%t`YKnVUo#`We>LMxEe0uHjELKcfv&kNNKdalJ&%jiN>G%;rQ`GcKCxZ4e!e9|K+#pA9e6~sh*U8aG zr7~BJ4AgWF^cVF)_D7bJQoNB8aOWS@#z8uV50a*p04 zRWHv2Ba9J{7%^*eJP%}<;in{7=AQxr#|tb+ZaK?O>5{Aq3K(28@fJHvdc`abe34U* zZekqiEZc6knYPG;af9VGO-pSELY8P`lWu@vCmSRaLklKK?AVR48wMb?2p7W^&e4SF zW(a;%E^iqQl0l+K%GeH!Sf1fn-%sP}YbUsZZqvA#W?gqzZANA2L>Fkl15WVi~% z@JQ`ydV_OkA3c}Z|6%4WZs&8)tRFw+%r1QX_rqUJUjO#$Bz17@vBk{DduOh#F3f$s z@6vb2iV!@1`t3ho-+B4_fA;@j9@I{*-WtF6*k9`-cpU!t&TChi+Lh7Wd%G9!`{8H9 z?bVNrozzy2zw#=Vy(wN8-FM>O4Mn`QV`U!M*EcSn`sDnBMs#}i{LBN@U#i+m552#q uaAWrDJ#W78O~4%e{nrl;XL>g#)~K5G?r&eLtvs3jrApSE`Eg<4<^KSzFsHu& literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_153_unchecked.png b/res/glyphicons/glyphicons_153_unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..020368fe0b5bef016123c123d6d7db8ccaa016c5 GIT binary patch literal 1203 zcmaJ>O^nk<6gFBK721_54i#{+jEeY+?XlMr$J!7a|CC70vSd?OiOYKJ*~D7g#lU4`Ws^VZoK-D0DlAc7syO(M3_pijCah;}~v zi7X4k!XI&Oovn91u|k^40oReoX%1*XSZ!hOveFtiq^VsC_FSw;;#7rgH>6!s>z!56 zp#>2QS+9mFLL$a8S~4(3=R{3Knxevut7yqGu%*?+*(HIuBHFULu0Qhyr-n3OEVmS8 zG#bexU8Y4}LG^l_+t9QsXjIFcj0NLrR-Tw!a7h^!an53ziQHnaNr$W<0n^q)7$hzYhx}{XZAimm99h`#uwGZOi5(vyw`F5b zb4|16c(&78Qfu59H?SWF5;+2_;Tw*PmTVQ*F+!eJulufzebY4Enqk&jb8I^+S&)T< zJLT9Iu%7DcHQhA#rv9et_hRCw|gT9hrJ;t8BA^gBf9ap(}eN9)^_dQ`1$7FuU|J8J~$}6To7Mf zk}AI+x_B^23MEzWbH`M%vzr`+aNU<{K>3c(4Ef literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_154_more_windows.png b/res/glyphicons/glyphicons_154_more_windows.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c4a96a9ebd86fe60e75728fa395e29307e233c GIT binary patch literal 1283 zcmaJ>TZr6L7>-tDDO6U$E{aIV3ae!%$;nL4Bw=UUOp<8_oOL@pr3014Y;tBMY;GoJ zoSA)DZ7bLc_VT3l!4*`LRY3%4Ex34Tv0fjPB0fkTMMP0VQ1`)eW@okwmWCwfoIn5f z|KEShiMiSRyLR5UlVO-$l>=sttP}JZyMw&1?fGt%Ecarof#;(p?%D}rbT?W=Y$dQ; zsD^B}|HKtE%`iKD_391Ws6L`OQNY_&hwlY3K{L$s-d=1wO9-=zsO5!4?zfBU9P7D7 z?yy`HtFeLF-ht%=%`eZ^o#iD*b-BGW>~v2f1_Fd_wiozes`ZN8z^+F2R4j1pKm{)q zxlK}y>KtoC31VeFmvuw{SO|HLmmvfhRuX|Eh~$P@kk@3WNdYSCVdI=ILY zrkf!IakaW-I829$A}JGkb}Rs16oP=pHPB9R4PB>kL+!NQkC9MAY1By^Qjg~32uyN! zb4MdZ*V)pGJBdGt({%*oqX30CC8WTB5n--9ns}suwr@sGhkmV?MXuBFTn)+=%&8(& zpiu_EEa}jaOhqXemTr{tVu3oN2DSr<^Fc5)48m&NLlt}o1oRnPIl1h5ckSzEBgk)XRv^zfLW?FtfZhKA?rqcrLLEj^Q z!EO^PY_m8JZ)@6-CYc1f-5No1*cxIKlF3cTh|X=C$&m40tC)Jd_rouT4&M0`JNC@g zTeNfg|7`b=i}dgmR?#| zTdlqL&D80?Kydl?kB{v$<(1=KpWk!x{qD)h?sJ*5M^3zT=A~yJ8~gm$>P91DK5*^Q z_>p(7F1-Ba#?;{}#@!#S|NitR`PcRF>?`(Z_~Cn}8fP8&!bSMc-!m(jKlrJ3x9MEC h=imn`yVsZPiWIn7!M3(3`9?Yf)KI^6K#{1F0W~9x1~vH3wF+~;Era=TN{_;#pKndJ9rR0 z4AFy%;KhsR#o=kUi5?Wuv$vfDkBVMAc+>Z~b}Kj*lDzl6e82DeegCqtxNzy%#OVo+ zdWbC-9zI60RwAsU8`q?N!%fw6wm^ zbk^6Lf-B6;^2Jo61_DHEJ`MaZ(bAI8x2w@T6N>`hS0QU9VVBf$eUUeCjCduR%QzAM zJcL;=qd*8Q@UjGCQKC1@fEi7Jnw;kcmq5M6?yA->D+6EjR1(^RM4BjeyWMOzm&I{Q z1cgF@*^uQ7)yO2hkl1M^OeTjGOq4jW7ZDGKJhN!8;0`GXl<95=K~%5r84i;{qG-y* z)Q&`umBb)marLzm(m?w(4%AMXy$Fd7l;BS6(0Z&+4#6~chdUZ7y3U?n)QSCmoUS7x z9|b5R2_*&kj3{&MO6<`B+P;aM4*Oa&OG2mPxf)a~m@7z7g+>Jcv#di)HdQrmSh`W3 zk@CzLGcXFIlB`RyN<}erpvV#|KmaVcP^g$Xtf;DL<`p$x9%5@@LhR5%%qhcq`&e)& zRx@H`6C5`&_J^&q*v14WZ5;8&66B}rw&R6NaE?`Sz!k;bE#y{W9Ps^8Xx;$~B%snp z%hMQX04ks-HCM6ZvYs;(%Yuq9z`7$T8%9n6|6#2>G<7LwN{Rslk&l4kl!xl|Q#zm`k$0x#U%kM>P&%t3*6j=}Y9tHGwyI66=VqZMcv_nlg32eJJ zg7mOA#3-bb8`BXLHu*dq?`qA|o9WJv$6$h!#>c+>o%?>gain|Z#`e^SNDc3CU$4T> z!%qvnSI_I!M|YpzPdCoqp8mKqKk@dN0)C&Ldh+M}`~z-`+uD5d;$`uR!~PjHYr%Y7 HzJBK)EU9$b literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_156_show_thumbnails.png b/res/glyphicons/glyphicons_156_show_thumbnails.png new file mode 100644 index 0000000000000000000000000000000000000000..94773696502e29b85e5d632c090afb25211454c5 GIT binary patch literal 1192 zcmaJ>y>HV%6gMBL5K<8n0wj>-f&>zYeNOB+rfG3(2O^OYrIF}Z*S;o4ZJ)6(B<+M) z_)x{bgjm^`SP%msDj_C7NDTZ1OnglYi1IE?N+l4M?Ynz^zxRIc%eR|z=O_0c-7g5j zWc`BEg7px8_D#Th<8gQvmLtqvVDogD^}Q4eRzR1qSdY98ZecH2z4{tY3&Nhyq`klv z8W&BUMtP6x46CbBFsE-5QTAO4l2^nt_gcCmL+kh!d5EM7O90sQ?zM{MJ->*`3gd! zuIEuv({*%4R28Jk3fy`Q6-`Yy)si^6B=D97%Vx`|jeNnWB6S%{Oj+*t`}uw$Pt%T! z%H=Y*p{hC1$YrZB^9H#%n;KhiaOS5ZVT8sax9Ba=9;-;ebSs1?X*9MC$Jr=RkTQAT zB{Iq@auo5nhT0ix;XgF~shzb~6D+rIMti9b^;n)7gCTeScQjTE{B6CYmxjYQ17F4= zj&RH}AccmEfVp`oB~U;wbg19sU+Ydq>h(xq>YA$;%8G92b`2q?YU!@(7)HrCovbC=9L_A#VNUlgIY=>aaanI{DXml3~00x z#Hd2}2u?`2)-asd2=bxXQqDFsK-Y$VA*Ch$#0ScpeGYK3gH z3kmNNGxXvPBqSH$Wv>@9X{HmdCSBswIGdJv4~7H)!`&8E-eGYl-qEyUO_&6}-5xk;1JuG}Uap&Q#gP-^x NNT|DW&ZFw$jo$zkdCC9) literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_157_show_thumbnails_with_lines.png b/res/glyphicons/glyphicons_157_show_thumbnails_with_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..412db7d1189294196790f713b0c84b274fb6700c GIT binary patch literal 1190 zcmaJ>PiWIn7!Qa##?+Id9wcNJ2e!#emo$y-Bu!E+*gCqR1!0;cukB+=UQAwXx8pp? zE(&_klLxQr#haox!K;Xf-aPx~B*?(&m#*Cg%0iO&-k0z9eZTKtZqL`xADTQl$#LAF z>IJI->v4FFOdNps=HnxuVL8F<7F(cg)^}pe86I82d^K=7xPcvS<;GiFdY72PI)>SBHHn76pE&!j?7v;0_p|+6mc|_s z6$*vahAd}5Ba^Iz%o$|DWO{7D!igJ`h!Gm{sYPdr_E<>(rduHdQLVOZI7~)~f|Q8^ zClXOs5`!R(Yp9*D2Hv6ZU+tv15@E4{6WWVis7HHx42In8?P#p%x!ZbCFZPFVdaj6l z9N>^8Kne{R0dxIQOrU^{Z&A0Geyv(1q1Pjxt}3>gD@dxQniYhsvZ30trD=K7Hq7#@ zluwQ7G>|o73 zvAP*!htar6sXuO&`7UKN>C%Wd7gYXq&2dSX3TDzuj=18O+{9ibrU5@Jg--s%KtdWc zS{`DQA$$ZUEmyJSvXL_t+g24}g!Oi%Y#ccN{=wRL)iR`J#5oJ6n2YLP}Qm`VxV2HTnT|hVxJQ`j!9Y)+o6$2sgg)!tYcpitG3VB7m{=- zAQ)g`E-Nz=8v{#))R7I*kr|kf7!c(-P0~o9TDI@*`F-zw@6Ru`x9%>^ug)_Jvsm8L ztFT^$XX(-$y#KseI)-J18Vy<_E!s0f%oJ?W#BA9!+qjBNd+_iG=NRU~cciGkIM%WA+ykj1R00imoXx!u*Y>vR*50m_ zwYiOTHrH3dfQPBc_C42+)P9~D+Erm6i+PS6s?gm$cS@>J*=98oVpd9~5|)4vE6Yig zmSh>-VnqRoya2bHKxtKyRWZYkE)Kkfc1x}5rI9Z<<+%=}fy(o}UN6~8B}v%kQ8t^6 zZHQt5G!oIkr)EFlM{8pXI*zQ+38+JSHnwOsNtfn1V0s#Y7gQ<}!+tbM6r_yrn*ooK z0`GZoTtn@MR`D5)|7u6|L4f%xjz~AOpdPKYF&J`pzN4|CZB6uoZs-o6O{I#s-xo+37Rar9RR927`St}u=7Yni>>WY%ljDl873z^ti zY+xD)lB5k-R75E)Eh0hAW)L#OY__Bq)KOQAadVIUv{8Z84c ziV!}6laeYKVzH3YB*Ty;ZiKa`QZ|kp0RLc(jI0-glrBgb;&>oqTPk&^i$^_LaOr60 zI&q(k1&wl(=PanK2)t0~2mhU{CVbp~y&kmngFUP-$vazMVE$%%13oF=etN;K2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_159_playlist.png b/res/glyphicons/glyphicons_159_playlist.png new file mode 100644 index 0000000000000000000000000000000000000000..45ae172e368247419f9a798d61fafd4f7d290b19 GIT binary patch literal 1390 zcmaJ>eQeZZ7%$GvIkyB7n6QPUc9XDVcm24v*DJe?yY_Co$c^Q8j7161weQ{4^=s{W z>^4IX0*Q!XCecU?OoAF?2>yXzMCSO*#l!>`3?aA~9TN2qoPP+xB}Cue?#2=cP22Z< zpFY3m`8{7f+S}7rSJO~~VOU+FTS}pIBYM_XSD|;+?z@-JvH`{hV4szNBeDaqh-wW2 zJYmRLkOHzgI{YnY$FPb&we$cSNNy7p%kaydj=x~o2#sOwodsJ~h5*C|K~^)v#KKoo z1g@!JVkeuVlC}tPTKAX(`o?CL$%%Xs13*zaIL(f zpn7DQ%3zecM>{Gjs>-sSopobE+R!286oDvc1J@6ly%8c^4`~k6ejX{ zO%*sc#sxwY$8%zwrln|vi!l<<2gO)KjJ8oh&zWanB@jvcD#A)^BuG&VM{%JbO~;r} zC@w{~IM4G^kmZBXGB#nlP&O6dIrXsG11$SUtROl-hL)4IEWO++y*Ue7ZqBlCv5&(y zCuK!5Jwc0C$r4xKX#0Q~cPs-hmO{`T!hoWA)M!BzBZI=H(TNYlV@xy>5ZPFaV~G-0 zU6HbKG?XD#*xr9TFW` zebmlrie`Lo|EJg8>X1V$@(uAqnVFdCwIJ)zS+MZ?L4#V z$k83}{mFZKp1ASeMPqH#Emh#>jq`6_>-slv`cCb{m2vUKJO0{<@w1y-7C(N4hv&Zh wX?VW*SjGKcWNzbUPt{**od0fi{hn1-*!*vEz4O6$-}e51iCB+xKDzhNf5I}?_y7O^ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_160_imac.png b/res/glyphicons/glyphicons_160_imac.png new file mode 100644 index 0000000000000000000000000000000000000000..30bd19bdcf13559730ff304f5422141d968c149d GIT binary patch literal 1244 zcmaJ>&x_nt9M5W7)VBzc+5Pjzt_E4mVP+w+ewhJu{N#1+kd_Ujs z=ld%cmzT~QIyiHXVVFbBMXN>E8T!0BeSp6I*!*&fF2{(yN>=b18MrB83?Fw9Xhv=i zwUFx%Ke~nH8Rq%FgZ3&}b>7iE9C2=`!xd3N(F`-cP$aImjtJ5{CA3K(B3^_Kc;ddq5zebG~m z?GuvdJULqy^j^gw^9)&1EG07+?IATPZ>u1w|7SIhX?B(Uxrd4C}Jn(f{vgN8K$f|5M zAhha+Y>SqvDyD6i^*KQ)os|am0;z=aDb|ti8|YQq-mM%9#TTb9@{*58w|N#qpp1lCq$%MhxT zAeoTmDH-3>NkBq0?olHo<6Rh(eWHhM+@lGp_-M_|L&Bcwg~OyDcsS1H`LYMYfC5Il z9W1}c;z+!wX(yU=63XrF2-3su5Tlq*Zc0aV_*ecf9q-SYmeDS@yPZx)VD7$n`oHfQ zNBy6tX1}?1`}7C*zdHQkThkAJyZN;PE?hjn)VcHhyI(XaGh5RygG>4KU(dYo;K$AV zn@9e14_B|;{r&P!wbzb5dh`ZY5k#^3-t?W@i(5CCDO=#0#7>*8y%uU(NpB-X$QLxQVm!F1pBTZ6Qu-oV=&V#Tl`PPOd`C{_bc00;M z1y2J(@FZS#QWQKX=)}YH$oG{9;4#9KcXfM2fPCb1D%PC^ck{P@}8diiT&B61CF8Wp#m67EvU4M^8DXQnY zTbU)ZrAw-f{j`*SXo?ygZ-$n=hzLE8s&0^DwqCwwXxGUxSHu!m3UyR-Czc~L zvpiX`mly46cDSK3gY381p~!)0i9U1=5d|m7+|^+f*+PjUBf}# zP86h!ZCWAAr#aU5lek*iF)5>68vAO;m8B4|WfbFjWJ5g`hC5)$-NBAJijLjY3+s{B ziqo-K^$Xn6*<>&e%mkz?w0*HI^o}C~|Kgrx0PEZk0lH z_hG>C3N)GwF$xeq4<{v4FonF9(M8jgM5c{(_N1&6IRO5{nzCeQT*lx;oo84eFr?c?ApEG)Vn|A`PT5p?K7L3 c>jTuGUg~~XSc&>pZzVsFqB&_i$&x_Pp5RM3gh=a1if_gB-i;CUJOHa~C=yuGn)`sobrl(;Cyi7WI)BR?WyqLVU zGjrHoc0mx7y~!T-upoka*?&M`*NfoIixBELiXq9XSE;Y+t9n(r z*6^FO?Xa z*Ph^pARK&0`fF^h^NkhKq#AIWYMEq!7KFxfnFZk%X5s)3N!pbDeejnglBg+tr*)K0 z=Hd~#vXkT0ot1vLvlW_=w0u!)lomKhFbl*oiPOR=o6^*;1u|F5k~lSCTTN+~)LN%2 zx-`e4R;^V+1tC$_t7u8nb#y^g6{N}v+!8m5p#bLaijYvq-q9OAhj0pgy(k@os=W(ju z*R*p>m;^5FjUa6Hh8U+XxjBsJZT}ybe4*R+?0)%tu)e-N5?+4nKVH1mU3hlj#gPwp zpFZp;3&#)M{`>x;y9>XZY;3;g!cq0-_8<3_9rFF=soxIWdvpBl=HRMx`uAV&-#K>a a#{iiAON-M`6wV-s_+F|ggp7)UZF18|nuO^%Z5~d=j-^wupo>Y9J8hUGH0&bV7G7$+irj9HJ)UcE#JL* zgElH>G=~IPJJredf(XzIGkLNX+0G)SY!kP6d;0AUz*r#HiV+Sg9vB0g9YE-JMPGZbT*<8jE z5MpIHizXylMkiQNKq4=|Eoab#CdrzZXNMOD-ePw_s~OhN7n}-Qo6<<*`EIwH?dGy1 zZt+M})zpS4W$$?IlO zFHH#f)LCj^GY}+M7qBW4OQNM)f~+bCnWCy%Mp3pDMKSV{k}r+02_lT;jl5pIE2ZKVMO2WxON!EyHPfZ_1@>^{QP{xeBCp>dUs}Z?EbaGmFWG=>ekmQ z*DsxUe)+|(@!E%@H~fPimHSJd7Vnj<*{jVv%=uf7zO1dS?PPa0zg4e1et3GNdEv;R e{>$;{l`-b$+nLPW+fVkU|B$jdYdk2;U;Yj4sDIP| literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_164_iphone_transfer.png b/res/glyphicons/glyphicons_164_iphone_transfer.png new file mode 100644 index 0000000000000000000000000000000000000000..7728a5ab0f417c9e3f6edb76c196fb0369b78250 GIT binary patch literal 1491 zcmaJ>eN5bB81FJTg@{ogfei_@I5VPLKklyA>$q)q*WMs<41rAM7nJtpuA$f7+Mahz zw-F|D5Tm#djR^~JA;XMho0#dGZbC+8=5P^>M&(1Z5BS5m`L((158~V7KoX}-+xLB+ zKELPrJzwpvt=W>3y*3*`kesSYt`4rn@F~342H&>lZ+!xnH74I^)@!Y1LeK%?le89q zRz-y{r~`u3zT-ToK#q;t4NyLEyqChnbNQz7`g3Q^ix(o{_D4Zt7 zt*=#_7mLSbiKSgU?eGvZLkEH+$@zUWPjL+64)DH!-$}SFXO@ALKq#?G5KHg`6W}}y zL3=zT$x|Lrkn_<&hG96ji*fsxuvMyI3aSV!rxsR*SPx10sUSx|Ec2gOHlPE+)bs{T zQ%P#;asB2L)RSH(V3j=~=V57NVjF1H6 zzz~ch$WwlwBjDnB+J&XD(u$NVM^676%e!gLM>sgb6(BJjl95E#luZSsd(@|x>7625 zeZne&8iolemq4o!S4?bUSZR+%WKmO%3f$^JMTUUXZV`*Gu$U6BXxb%BI0@Evc?98M zd5D1uCs&6f>N`5!fgr11tm1qP$sZ=RZKzpI=9^e#J(`)Blk0Tm4<5RhRjZE9WsHVy z*_8V`GWwCVPy2no?3cN~-u%uCz6aPsy(dO4&3xGV>tJ_N%j=&F%)d3?ZxlCYTv<2v z-oc8Yw#%n_21`b`(Dc6k&ux>oiSg*E%|}3(mkD#j>BD<=H%=%H=I&l^Sh-7gTD+#UPE89Up$K) zINP&5|FNciB4m8mY;;vu+e=S|}(wcj1C${bsB9 K8t$mSx$|!)a0_Vw literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_165_iphone_exchange.png b/res/glyphicons/glyphicons_165_iphone_exchange.png new file mode 100644 index 0000000000000000000000000000000000000000..4c172f4481de6f9b8758a15bc162ed8eb88cfc07 GIT binary patch literal 1553 zcmaJ>4Q$k8816uiv1~w`Q(&8v4g%=z+TL-!yY7zd?s~_@b{pO{7|LI-{kE&Swny7z zw<(x_@-t#E5(Q)lihwZ?2*DW~!kmgkGjYO@$e2+Rg{d&M0P+{{>v0=PBs6Wm?|b_` z@B6%e-8jE|ZbsVVGz391N{X2vTyxM zY#j&!mTz3~4R9jJ=qo~1jaCyVqd8eLvAT{aE=D05L7av0D9hCY4Gn=hL2_aJN82$} z;9b~4Yk&wuy&xw`=n|D^HHy?0Mu%-7&(F@QHnB=v#k_G=A&kUG~)!kDI+`8wzTnA)g*7co<9I_ugQ>w{l9f7~bT}Nk4YSz@HH>Pbq_J_Mq~;A-V1UXgLR1rE z3DqsKAvvbGFv#?N2x2r47&a`a$wa}F;c+&KlO_TeMLn*BwyFie0~!z2R;wDL01pCH zjwu|hM{V8^80PNLj)oL@ZdflGQzD5tc@75=AOcBKAt^G!2r{QD6af~HjW9A7)4!H5 zE-V%kc$%{MD2s!j?3C9}l8nbq`OJ*nZu9!wUe9d8raRLOj08f7iHBIiN7%iL!%I*O z2TA(O4u_v{Q+~VM&e*JWn`a1HBB>fHaX@#fV}%D;&m*z4R{^XhD^;=_8ETdJVOf*a zupC9bl@vNNz;c453uft+OmYQ^uoCcoMHbOSDQMwg3`jd{G#iZ348tek$!_uc%pSMJ zYxVgkE0)CaBT_aTIrV?6&qgtB!om<%FNxuh4A0S;phZBkN8J%Exr+#TpU@Fjs)GqJ z@}QQDMKo+qU8FG@7C2c_ow(kE5di`cyZcytgvEq-MAHsw!b#A#!y^a}!$S-tIJpWO z(X-el6+u!yEn(bM@$;Pvj!9n-6VtQOFBh#h6=wxc6pdL|+jn~GG{aN3)BCaqQk|oI z8@sJ-l=q!+`HR}BUfR0yQc?eI%e=gTjlIiCXUy4u^iEFC&dW2KcTK&T{&)SF3%{=Z zo+!(1Y#tYyo^hIbGH#nDzW2DWc~@chyTz}(Sb6y4YmLGV>jwGrap9CzV=m?vpXf_D z8EfzU(Y(L+>$@G3+d6|+%`0veAZ=6Y=Y5b-Wk(wTe1A(v)=FU9A9$gpB?MJ+$c7kEOZ{r?73F{_7P*~E!*;C zS!rW4uebhQ5DVa&?imUWj_$}ANR1D)_y^~9pIN{9MCP}j>}_eTPi>lTK)WYa-!=Z6 z|Hn#_ytAkG&jU-Iuh7&f+VbxknBeGPmZgt*(=wHe85ppR{4^ zxr<0F$NbZx?S1V>zv_SO%>^H|o;~MWXi&3H2C>#wuzBC^ntjiVKO7XVS_Yr1=o+75 ZK=!`6X+|La`Y!z^UE(We4tSQY`48yjD7pXu literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_166_ipod.png b/res/glyphicons/glyphicons_166_ipod.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9bde94eb5bf9ef0d8c6bce1bf27657e5da8a4c GIT binary patch literal 1255 zcmaJ>Pl()97*GGAwJlX_aeI1Xx3xki$;)isBT&d0^kseH_OfsLq-VwjN~9kr(!|_n$w0{W@DFsI@@n$ujLa3FgWkS;C+i zIxXD5j@N(ZHZF49u19`zfiBd}>MjWdC({vnVa(7RS3KQ|9d`v&u!LKFRN^1syu}0G zEAekBHK`UGxb4rbCU|~zuIa9>xSGeGo&m+4&J2W@I-nN@QL6V!{J^fx_L*4Z!9azs zl=v-D3$;2hNP>YPR|(&YjeUOe-bc*}ajw1>Xf zsl>M_jdfA%cDq71FOZ}qLQT^$8?u~Z8o9I|QKy%S(#eqp6Q^$C$J8eg$SgWbq(e(Q zW4aYW7}siJ!%;d+6ib=db7Bz+k{E_rTm$WtHttPWH8GmiSJ`_jIIKD6dIK zMTQNbSt%n+HdVD?SY@L!Efq3nnSt#DDVgOavXayFd%)*E4q~>i)u9WkJVp&Mxhgff0%EpnS|6{EJV!6nh zl43w!WMn*7r#=nvut&=Q9qs}@>k~b2q83X?&cn-2C!qXHE9l2<-z8C66tf--dV`*`5ahAKcIdyNh zed0ZD?efNx$;Qve53O&UIsV#{@Sjs3@451~0cJRSiu<;Rtosk*_07%AiI3py z{%iWHKkc3RVJCQhV}$>E89_UoxybLKad#moNzvT>8h literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_167_ipod_shuffle.png b/res/glyphicons/glyphicons_167_ipod_shuffle.png new file mode 100644 index 0000000000000000000000000000000000000000..74ea9df2a6ba14453d846e5d808fba5bcb508667 GIT binary patch literal 1256 zcmaJ>O>Epm6m}X>P}Q_SLX}!jYdLLc5o>$A>tC`>ytbFD)D6+b5;&2Acrs+MKHd4At}-~03X zE6Z=roH%zv5QLf5lHXzP(_DVxID6haUvt^(EDhG^D%qq1SRlcT$p#WzDeR&Sg7Nl^ z@6o&d(<)ujVcYwZ=$ zBLxz5xmt--07S!(K}|Od@Vcm}KvPt98x>Gh1aePTES`lwL9ltq_#ZGmpM``XT z%3v^%2UVFAT?N>-&3$NEg;`X}?To@M64g1a}zMD-LnHt4CCm~ zF7Fq~D9<=jP=ZpF(UOq@BSwt5^Hzab17YHmsL#K){JPZd@LWsHr9o#vL35GL0NFtY=rvK=pjpux$VW&9q%bmZ z>es=28eQ@!oz2|EEli?rLo!;|{-W#`m{_*nFPtHER p_~6}@{dfMk@TWB0r7@o8>t;L`Z0b{jgoT{|w?p!u=WjF2IcDvS1)7=GE1np$zWOvNmGIJ(- z5h|4+tq6)0`p`?P5BegJfIg@cMNtwE5usR%MTJT$imBp5^+7$e*-ZnM4l{Gk`RD)s z|NC!qY+}4Hv~}B748w+s`?NAzhtV^#We~mp-hXKpE%!jZ1}pv)Y#JfJWXqofc+oZL zpbQMFJ+ln57`E{@yIO;_(qoe8yJ;iQNw?epp)oAGrxh6HG=TUdsM}tSSo!cH0=KOk z@i<$eN`VR*_P$OCDxLAF*_k#)i`X-UXIm07-~wpiE!XiPsg)zTb|th=#3X@tRp4}v zSS3{}P2j2@0-Q}}QYJ;yILD>wQI_NAM{tIs8InRbm!d}{mXjDB?_C7)7FttMSm)6TVq$|~Qb;2ewLNIGQeL#PZ$Sf*8QKA~eGgA88k2qu za|B|#8iE^?N^6F_sFx^|GO}d^B%P*6*G=N;YDcgPZqT@?c2sQ#fGmT^k3$pHV`^s~ zjBT^8lDLfrwP`+fu(MVmDCUz&=0G=@AO+`qTxe7YWM-JRycfD$uMm%5$sMX z+2aaAdlp#v(0B1}DJ1(Q3@BPajmD!G85BN^PC_QHGm4y1SzYH?qKCECrK}%00{joF z^PDDA8I599njjGw%aouE9nkAh*@3;CV<&wgIfhq92}xOC%7`6EjMbfX(6CM4i?U?W zgN}^=-Q6mdTxYQ>Ue~mJO*9F~c5MXFVQq+khbA{fBl^U%%XgvizEITUYU|<`uO1ot zWbYRJ<>A6eRcQBj{N1thv)a7WVe0r$7?TU4^__Wjz{EX=XCV@g3=tjA}oPl zS?q_!`M(O+#=hD6sB(U2)9a1stVfP#hzPIl#hSh{?Bmj_?3SP bhi|8_!K?8(YQtyM-D}fO6pu`#eha>+FNO?3!8W<+a+`$JHBC}2*g3m`6JN}d+cqr8jmfRehAdl$yle>2u+QD($ z?)oXKN#A?vb1=7!{;r)Tui1gvb7U5`N#98jXLxuX@%7N@peAy>#Y?ZyB*%@d`K>uJ z*Ep@aI4n5KrjUg(MRVNbR2Dn#0wVl8>iAJv`26^p!24cVIHxqEMr@+4e`+Z~vrE%0 zcWJ@ZJYnhtKbh&&L5PUMXJHVfdR7(&eswA{wJ7id6S7bi)=AAZW_S}Ph*t{5yek2~ zLs$S43WVS|FH1lcC3?d=n9vod%O!qz2{c;bwe_Y|8^)rivd|?Y)xY5{f9HqlT(UOUo z6N{iAiDAg{8d#^KiT=>|r*+y|jFH$xDefgM?MHij1g5q7f1r_}=Wf`=y(Adq>A4~b zP>3RuQc_^Rh%(pDBtC7R6Ij^ov9EQjEcAN5r$fbtMNNV#G;07@RRh|xrK%;lXYQ>T*S&9TT4FFr#w3=nWnyRW+Nl{DH5w;$s#ED$Qf-BPx^<5mLlOmhJz^8zLw2l=wc^s%W4eiL1ZUPfG zR*)VxmKa5Ja}&Cv2bKFdy52$EGFsW&`R~7eO^xNo3~t{UZgs5k-1D84k9WRG z2P#K?-o1Lb@(op}J6_1};MgnR%1 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_170_step_backward.png b/res/glyphicons/glyphicons_170_step_backward.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c50f627f51276dc8a2cd799b3765f10562596c GIT binary patch literal 1251 zcmaJ>Pl()97|%|--LO4`oJrP)ZN>(38S?5f$;!lPIVM6+8%fE2W1X1ZfWz#6tyTe3_luE?63py!XC* zzwi5f|MK3}=4)q9ubyTY=4`!YH0XMcKF=+mqVL{Y43Qc4}9p`%KKSV5&lT z750!+%iaPyP7n|a#k|Wy2qdWhOQIyfSAoDof#c~dVc*~LX0t5y&h$JGf6O zEMMzvC5onu8#*xu3p^KwSzJ@?lr+#|8c)qdp`_kB;5L{lm% zyd+Dy1))*ZBvUYCxvZO-UM=zE%vomOIFL#T9>vNfOR}nZiI)@&LQ_x_%g`iCmSv+X z%H`@DTaQxWL@vslW?26*w)j-6swc=HIB8-W%v)uviwRDk~C_q7F?+-b1@iKOpSIPOukueHTaR8khB8 z;8VbKcZlVVS)7WGHSJuJPC~Xl8bNwE8e$aD$xY~pe)poWM92GD-O!rDJ3H-m`w{c~ zMEh$pnXD{3pf>t!>G}4?)sGiz51#3r%q@a%MxWn2ut2>2=ef(P9fmcMvoR2>`zud(*7MU+mjXNtNP-`881h!kJtZszxDI&-0!*iSbu{Yyfn() uD&6?-w_iTEGWM>2dFusbgqXp)Et?|Rs`5#Yazn!|dX?#&_zw;ktPmgl| literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_171_fast_backward.png b/res/glyphicons/glyphicons_171_fast_backward.png new file mode 100644 index 0000000000000000000000000000000000000000..7858048ff6f4f70655efb8e7ca5cf45c031dea00 GIT binary patch literal 1280 zcmaJ>OK2Nc6rIRU2qDSB6ob2Zosc#LYku-PjRq^xXg;xsaujvE}9T%A&Y|hMwT2yLWUX5eRuA; z_uQX8Uzk6C;@JDg7=}4fnKf$kJwczbqetlP4%fMpDu~%2i{T3C+A(4@H*6wM@$D9> zA=_QM@)*r9%*bJyZjt?1 zt_syiM{PX29;3ze`MR^d>J(h|+*vTwQ>gl;1%21W^U~sWCTI{Z@27e7trJp1uW7v1I;pQkh_9g}?8FZ3$I7W8nAYyy zfrf^zvu_u5Vy~a4>+r}!J_<-eNr`<%l(~8_#e6$Ge2 z-4aEktU*&U6eX{lnqHn3@@cTt!9gI^a4y9v(-ySKx+1`WCW@w1C|HIDEk#j`ysYHQ zLu@5Th#fd64Vq%{Yi$0VSXGaaO~SYyhTd>g7TO^RlXe&ZeG!5)RolTqs+deWIpB(7 z{3&v+IP^ik6)JuU13^^ipyg?f5=~#ECnaZ@Qd!ICvS~t@9bnx9B^zc=0dHWR zX9%(`vOFc@Ix4}$LxUOBJTj0xoX&~r*+GjIB?(8Cna zm-evy0grw4fuS8*(oIOk{S~B#{Ut^L-Q1Y2D84oIg0A=dilNnezcrVamtQfDcC~+Y zcXua_+F+LX<|8vZ^5v_GUs#|~y0&z8>QLq|__?&Rw7JcEHd4E>_4W97r%O*a%#p{J zzhBCXW=cODy8hwTvt}bRdZhH<#s-z8J6Fb{tCMiFPR$%S9r6W?xJebOjxpC*%+o^Jk;`Qh?km!92P#5eDagI}1jzq`+G S-@kq`{ZFcx^TtkjdGmh>vz(^@ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_172_rewind.png b/res/glyphicons/glyphicons_172_rewind.png new file mode 100644 index 0000000000000000000000000000000000000000..720584f8ec998847c0726a0b61385ad0e2052998 GIT binary patch literal 1285 zcmaJ>TWB0r7@k@U>Dq#%pj8AFN#o5Fk&g>QCgw&$rPdDgMH~kL7|@6?4|)rhnYF&{PTbR z|NXaFnVWrUPv(^jMNxYy2lX0RUn0-g=m>dVxo7Mp%gfkU!1G}fcdZyvsuMO4sQ6Y3 z)sW>Zy}yp8C~D{5ZhZkSR1Yb3=rdNT!}R=!pebsq)Qc>85n<3kEjK9A_kZ|_2Ch@2 z-w~@^HPTSqJ-8gB`Q_QVy}W444qciCQ$2+k@Da8^&-a2v=@sd|U4`sZF-wEK3SKPI zo1_-1b3hAY1Vkp6wK<*#5HfsTgphv|2pli49JyhZ&nqHSgaQ~`H1QTYO{J!r17GA+ zq}v!r3d?r8U8b93!nnoqvMi@I1R+Z_vdL0_tzI@r4h${mD6wNV!fqIV)S}f0JGe*_ zrkf%7QMI~dI7kMGA}M2gR>blQ$NGL6S6@59HT0Oq6Sb52QiRwVO2STTlX^4{48bIK zPj@s_bnGp?s1tkrI31fs9`aFu6GDpbGa}5Dw_}$S(DL-q?xbHUdXesQTt|VT0dq13 zC8(J^ua{M52)ZN{G(*+Od9IK;OATxX5((oFtduvQS=KZT$|}zrf-IZ53Qb9p^nxfA z%0p}=NU#;yD0P}*-N)GSQ?ZH`BMXOdJq*2JtIV}S9475B0@^$T<5kOcgH$k)R&u}< z#qI~lG2_q&{Zc6I6Buy3L>jF?ViZXDJUK}@(-6vPP7@6Siu3^MY)jcNasv1t)+j(- z<#IYFYCO#nGLEfa7kg;XqpF7oJI_t~MDeVkMG}&AP}Ayon4WHVOHtdk!yuVr(;oC( z0_g8HvFtXBeet%Y9cq$ENVi)fNDf;=i~=&bF&WVZ|J>UkYbSKimC=nf>-&;F(`f-^@>}9;?liU!Mf)(HG4R^OyI&8|`}Gy=Y_7ym<7F h#zkuS-0F*9jXHn+!Y4m|myy#SQ^lCoFO`pf{2%I^q8tDK literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_173_play.png b/res/glyphicons/glyphicons_173_play.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb1b235240560a1b098b5596203d43ecacccc88 GIT binary patch literal 1216 zcmaJ>Pi)gx7X?Nl!+VN+q+Qss+#}q&pFJMujLnH?=@$>Lz~7eHMwCMW@3Cyea|HgAl^F z**r8HrISQK%H)v~%c!WxVVK1=)=qhgzNhg)?X0)fSX;<}5RC6bO={2iOHzx7C_ivNYSqnl!3XLXr$* zJlEhp59p*v&45pKfuHq>5jar~5>oJJ*BJy{TIvNmao=}YlrG9y4+cH}#=8Toe8l2d ze57fonlK63_HYE@a5%&?g2_!_M7z7c{0rmVZxFLRdfD09+R6)^Yy12ArC+a`0{KyR zlS@wQo&EdkC%0!Wo%reXv6bIfZp@H*@>uY$f0akV&!63%C--K~|I9vkv3j*8T|EEWt(*C$&rg4m7iMz8-M4?ddbW}avwup%UL*HwTYLWj&h>k- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_174_pause.png b/res/glyphicons/glyphicons_174_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..32f2515da57f3e3f27973a3aef3b536171bc1f3d GIT binary patch literal 1168 zcmaJ>&ui0A91j#k27?VnHrXMhAPTn0OPkjutlQEgbp<;|S8x}hY4X~JC3!J-TjRhk1wD-DMQC>b7DzRDk7A3!fRYRq32GGpY+2K)mI14(s#+yQEmbDiT9gteauEy4u>Lu=cqvvl z6XXz_G%*e)qq5z@1gAY5^X3lZZ`U2ykC@^P>*Sa#O8h6tt0p+)N3GEP3m8a1rGr+Y zIm$GBKu>C+YReU)U@Eo^6=96^W=b~6oC5yC+9hZiQo)iG69^(D4%fAr>CdO8%vMgE&h0xc`v+L%4DsIsEQR8Is@a3ENg%-DR{l?p)Pb)?CkEq#O*2hZg`9I?4ZLI(R literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_175_stop.png b/res/glyphicons/glyphicons_175_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..ed45c1eb611bbf484b0a97d71afe3d8615394aa5 GIT binary patch literal 1148 zcmaJ>KX21O6t@I|s-n!mQp-gGBoh0a_~KYei(@-9Qd3GAiHvpZOJddb8T&$#j%*AF ziEqFLLgEWBAfyVx2m=EWUxBV{@Geb4B&u4r@9z2i-uu0Oezv!Je{J=~svrn!jcvOH z>s9`&T!Q!dcJ3=I*O}8{`?SYKZb}5xr(Gg8BDYUk#PuhSzmSR`T=*5VJFL^(F+3XO zU9OWKM+u+>p|UkjTi3M6U7z`aQ&k!;mKd@;8jbR!LY}658I{XrZbMab zppnZaF>}YcINO+8uu0~nLBawWi`=5yr9)Pgfaz%nQPONK49D3lQIIlu>?ShGD{>U^ zxTe|}Ymt96&eYD@lZ41ElF?!6K|OjKb1>xYd`ELd-&^P3cE>Nkn3n0Vy

&BTss>w3v@OsiH@O57PYunYuA z-Un>0jug!{RRx!82svuGT(?bJ*LB@4X?m$P$2Q`Oxv@vMQ;rP)TSO*SRIHziHLR4l zjHYc$!+ERh4Jf18fF`1~kHy{Xcm%WAme)m3s^{IJ!*z*whIH^ zCr0STeMm^oCp~uc&&4z8Z$3MCU2M51}<3Ek#^=q%Ly!`n3)5GWN`{#SHba_P)zU|z4 Tlm0x};Qxb$vunSr9X$ODdK+be literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_176_forward.png b/res/glyphicons/glyphicons_176_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..e62388c8f7ccbe5c8ba1920ed6be564fc23ff0ef GIT binary patch literal 1278 zcmaJ>-HY5*6c7Dk?YdoUt5zv^NmVQ~A2+kfWWvs_GfAd9w6kt!N4g@&W|BKIag*FM zx#P?(K3G|#rC59r{{cm+l(Gc{Mf||-gFc8TBG@N=s!#ghi%+g6voqTTOGA=-&dvFq z^E>CBlgkV9rzZ|RaggJySH zHmMWGTfOidndZ2?fBKCjwp2T7xHJ@<%tq{oF`zkadbS@s?h0Y3N!or?Z%q-i3aQZ)^qLW+zPNrqb!@RXryhLT6ai-%~5*D~r>Wf%*z zBHv*wHYBOn>xsRbNRzgN3xz`FLs0~<5Yp9%Iej5YPmDZRBy|%%WWY zA82IgxjS}oHwgxLdagtQ5|W6eKnf2S0dwQ|#D@cP0*kuc>}%C3^4+fQ8JcQqxq__e znpwfvDwi}{v2;Ce+9k6*CFiqXnS7Qo!9d13G+G{VR3Lo}nx3oJO1YFXRom87eu(vUm28wb0RD%y^O{wX zbC#@{n3sTz=Nims0U7paDPTh>@UuQK0w-!iK?IMqoNmDQnRc)mcYK#d>9myfVBiB_ zAZ=r%T^+3uRnTe{~SKPE^#;aJpAU7#+C2mhyLX@4_U{qo)^Sh&Zig0 zZe953X-^-c&mDTH{_|m1ADiWxd-(@XpF4B?_l=DjvW0Ks$~8{-+Ir@|?TeG|?>obt zeC6`Q-{VhNf9$XG@3g8nUtd4lkbnDiYtNTIT|N5A(MLYpeD}_ibJtGIyj_2h+jorn Y;=?QNz07`iEBhl=?Ro1)dHIe10Ji~_m;e9( literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_177_fast_forward.png b/res/glyphicons/glyphicons_177_fast_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd545bfafb32d1f92a4e695a77302cd5be40b1e GIT binary patch literal 1274 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 SKfXPd|6l6PihZ-%{^CEHa)s#t literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_181_download_alt.png b/res/glyphicons/glyphicons_181_download_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..b20f15a4b6aaf4e066693e2211f073ef6f3f0ced GIT binary patch literal 1289 zcmaJ>U5MON6wd6py4GEm{%VV0%obX~NpdrjOcHjwlSwk&p`CS^9qdq0%p`Yb!sgH9 zj+0#|t|F+YAZuTWQjz+wSg7{r&4(%$+!h~vCv55hhyZEt30whNYqB=_Ev z^PTgZzkE15b9`*qpb@%)06lq%p z>J(pPtAPsJ_ViK+=ay#b=F);GS=7`qax#{&0T&{Jj9tfzTuM1g; z6+}TT1E7@@LFY74%&WShmU3)9ah4d^3B(fG!q}|9imC>3tRQIs=$s^#HAN_kqNwG0 zF<%;BD_(>Q&xDE71ZzLUW*>`{)esuU59_|~3|eKj?IS;G`vIxW3FOhLVcK3Icqyr5 zpDPUQx1d!HeV6Q&Lbe~lfCVCMv^EUD=Ar(*L8uX`dDj6$_9~R!2hs% zUeFXatFgQaCz1r#A6;U#@6MJ^sD9dH?=Y z`o$mC);3bp|6ceg{U5jI_KB~D8~b;gslDk>eq0^Ca9}j`O!3_Ca5{DLw|htSzFo|Z ze?I>F^2WruJ7eVE=~ZUWT5x9Q)vMnyhs<>A{aWAW&9 z;>OU~(W@GJU| o40o@dFJHR&{`v7=Q^n;Jar~EWuMNE>T~2;Z6@5m#RC?px2O(0PEC2ui literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_182_mute.png b/res/glyphicons/glyphicons_182_mute.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6942b619f4ce158007601cb22c4f8147409807 GIT binary patch literal 1263 zcmaJ>Pl(i37!Pb$#+9Yie`uu;vMws!ndD_QFPU^_r!z@r9q4SA*(q)h)n=2oGmlO3 z(&UXZv$uNEf;}lMEux|p6cM2Z3vKDvp0qtFc&H#-3Pn8FKTvw;r7yEH>q5nl za$Z;`wNRbo4H6+<$z;=x1ON|V223gtf(c%hfGkSvhG{UVD^QnJzJCeKTjVb3HM89J z#ZGylNolByV!PeWw6hr!HAIlhNx&x-?M2d} zd4Vxq55W(s)eXZz+)orsnb@&I5o9FM_mjAK+A*!6XEdIx9oM@d5^E?Xt;k{ZSQ;CE zS?*r!XrSmi8+u_Y@_KQ)j)*+uqkzVY6zDNx%=Nb;%nE3GCUIKH*NT}JS}pAAP_bY( zCqWGwWdO`l5n8gTX{uorjnbr~Ce9KAn}JM{aTzuXCCxB_Cc&HufFhm zqN$|;wi3kD4jhy?O|bYGR(&B>HzH(H64eRu2CXvJB$UKW67t48P!alAcT>s+ku$*mu$BtV zqLeiy#Q=iH$heM9G4)WtM~fcq?>wCJiSF4!gC!*Gq9wcKQDM5_b;BlhNDxnnNe_CM z0eZW2thmWyPrRvV2bydWlI_L_vctv@qkv6r#71<;DePq9{Yk|v);m9cbLQdbDxb0{ z2Ob}M?anLu_DgiXdh_ztQQ@O2U+n*9X3gxT4vjxP<&9ad-?+Q)!`r*y)}JokU)_H9 zd-s=VV_f|A1igOw+|VwmFf;twJCCl9Z+Ua;kqfD@xp$r6qu<^he!6=8-o)CiA4X1o zTzl!uou{v!Jog(ueQn>9Pk(*z)!9F8ecqTzUEB88kH`M}yZy%S9&X2l`th61_q^m6 NRIz5w8>RP8{0E0Pi)&%7ETiY(h~oxUmUAxlla**sA;P-5|MUbj{TZg@xR$G zOIq#FahQYz(m>*X_@fDN;=qLiLLj&y?ZN?ZLL8>4hwU)ffddDm?Kw@lN=&nCzxO_W zzwi5f|NP$8#+#?7E=(~DbGo*M8g!kd&kLur^!*^-4% z?BE7A?cFQ4@iN0?{&Jcv(yFhkR^a8$L?=J=LW*XX<<((mT0Kla8+RPP#Qy!m&n$54 z68pAX=j)+{yUyBPgtzxLn$}*=D%$Mo3RoVh)PRSH35K5Q$Lg@ej_j&*pNKgYj8sUk z#2%7r)wh5aL>S0I|~yq z&E2ydO%!eGNH6S1?kG;%;;@T7?30+15=M+Db9FOvXaP+Z1y(=#T0k$~u&a zJXD}&2m-2Bpe`asDQJ2{t1j_{#93nCIFL&6HpNPiS2QGOJS-wX(8XfWKow{xih>HV zQm9U_H9sb%Z{fsgf_0u?tIx!$T7*p!M9m;@C#|y84M-4ogAi!j5WHSDEyqs;ZzPo* zbH$N!728G>cwkft)p-g7UQlSG6=;ki4PT%qMKW};T9Gta*P+agvG%c)O(Lg&|6%n4 zL=|2_ysQZ2(oQ-$PzDwAZj=LLn9V_tTWiIJK z*P(#X?hwlzvp5nTYubq>orGk2G=lVSG{o4alN-?y{bKr`3v|3cuc1nF_(%KSM~_xB zD>Emu<^NLk_0+Gg8B(S-j}~U%*>9(Q%z~aF0_K;Kce9^mZ}o1>Gap}KUdr5_zSTR+ z+)djbv}U%-XEraFzkB|i@$J2I^IB@|=A90B+1>wbYJKKx`s?!#KV&oe*VAv!z7J*& zrqfqmdGSWJeE;OZSDD|tuP!d0Szkj3&t<;+Nc`!~QzzzbN^|A?6!ZNeyzYOx@k#O{ Ns_7f(o9g9v9|I~vh{^x} literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_184_volume_up.png b/res/glyphicons/glyphicons_184_volume_up.png new file mode 100644 index 0000000000000000000000000000000000000000..05476dd59025bb12b319873e60d4116ad001eb0a GIT binary patch literal 1411 zcmaJ>eQ4Zd7|(8xRCyzl$u z`906?`O0)(?=#JfyBiS%X-@U<8My9(&+di?;QNECr*FgMVMiEp`i*g?Bw7H8%f=W$ zQ<|6q86e8#!%LtOK{nq~vO~^L`dL;ow4mte1YOO9Xawo(c1=+#00$idIYp0Qe_Xzb zp^6;Co)4#qw8??I(lcR!{)yhKG*OVEGS=ONcDgJypaDljT}{<(){S8myDZ#$VjM#& zDo!DWt&ti^_o19&0W=&81tfwbQJM~t9buX#pGGNyq;LY>bb#z&!!%1p(CURjZhaA{|8HV8_VJ4EOVN<&8h`Izkryf?hixuvRWjPCoj$vgDL#?$+U*2#GJ8zgM*H5EQ zrbS87J%Qh=WR)whlox=Uv()t#z%eZs1uo`VSq$Y5M7st(qb zQ_E&vkqq7L#JwI=6$q&8*0A^nixu&PrmbnhN$|GoBM1-cLkx5{xfUGJ`GMp$1ljad zijQaAAFd2;YB@@58_A8HIeK7!W9#0tHnFv5zpr(sZ)?wJZ zcHPOjca)D$4Il7xF85I>(4eQH%ipd{wtwC>{E93yduPu8--S!f^M&mT*Hz!-iyszN ziVNjKPqet`Y-@g}4;$z@{#h{o8<;87f5WU!;w@7@?%D2t11tYK8CZGDdM)K!t@D{D z_=7*cWxTnE=pN;6Hhe;T^~>U`?;pD{a_-#%_UK>urM83rEIeY^kN?#BkY2CN)gSKK zVYC&_cO02+xzg0St;sjxA6Y&=wX$z1bmZcW$z^--`*i8|o7Zy_=T2T|3Y^_JAPip{ zj0i2iMlOFkJM-QAgC~}5Z_XX#>)-S5qwY|DZ<*ebYP)s*&>i=sx?RYZ3+l4gb$ZbI NEvAHCem*h!@_%Cx*K+^> literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_185_screenshot.png b/res/glyphicons/glyphicons_185_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..469f03f96cfb19b413a618c8723c551bcebc9aee GIT binary patch literal 1457 zcmaJ>eQXnD7(Y;_84QdXbG9mtfsQ9%ooW9q!V~K>zeZ22; z&+mDD&)2)Vs$zX!?uuLlLGl7+ObC7pjOV@__}(}E$FuO0ud{V}wbG==ITautK?wsi z5aF6Z2yjBOZ3L7c$X(aOnmWBMxPj)Ch=ntBEQv@Iq7kH|G!f5`8R%;Iu!Ke?kh-K|6sBW*Q;oDnzmw=V7LrW4gG!OwghbAJDtkDTKmbOd7wIRka zG_9hyy0JM@b-^msr>Fq6TWn^YAW4*>EM$?LqR6LFD?wUu0^XFFETZicZFQiT3xnQN zp@|ML{){iUb7L*K9;IwGHh6_W~gD-lCsVv%(7<6T3~?2t723a z6&W=wa$zN=yD`XgE`&%l7@RjOYnepBl;H_3ijx)sk3@{P(%PCH0=H<~R$Hq{MgblI zni5laSdS)C77TNDXGd8@fuGll##AXCr@-St0udnV8YD%g8A0ZBr7FS#auTEPG2?H5 zabvNVDA1IhrED&Oa#B7&Nitp!#abDs)8S)1K5r4>Fq|0%76PHfB0wwzc6VXo-`XVM5FT zXyRg$j;(8!lF=5CS7faOH+oPKAt1e)!{Q4pro{`IHmeCI!C20ZAl%FkF_7Wps&GVa zV#DyfSX3WiJT-}lt8br>7klm>Rtlb9d%9t4>yE!%FXom#_5pk3xt;HyIGVF>(bC4m zJxuWO=FksIjqn56 zGr2!CIT9vx~>asUhr?xMzjCQP@s-6a2C&#gPw>`%~sr@$e_F&*C@!*;a)9oqzYPjk$wE^{*ulzi{Tg@KEuuSJsSuN<56l_MX~u zV65`xrX`(MX|*=|P0!&?8$#1LOHJoGA9|^F&u`(;&0CS4)63R>TyPeT=l3s;Rj=_5 zef9m$C#H|D@{N8m;_W^+d(3-Yx=>ixo6}ubKi1oo9RC+RcChr_siQkCEUz?e9B;ev ZU?bAmi#WT_?x{5n(EwY)9QQW9@*h2Q2OaTZr6L7|wQ8*0sBeRM!jAkY!;DPHwX~lcY1dW|B-h(AjQhrgqhrW|OlsVRGB# zq%%8GSj7ucC@3OY^g-;4LPZd%)Jt2i*wzO{QBVYH@ug5(AAIP8is#JEtP55{l5@_V z|NH;%zvYF6`CVh94~$Y2HCEnjRPlNrc}8x-?@R5%4ZPfs%tcfSmr>h_A*DIt5~Rz% z)qquKIjbudV4k9euetR_v{>1r+M&-{M2GG85k^x~ey$T)b_*hU2{zoIz+C_6G()>i zfjJ;m_)4V1rn|cv!&-N~Zg*R@;xKcwbiSiv13p9+-SNF3Q9A{uXII60BIX#nr-E7q zW}VbxWr5bi7}64(&Dgvk&;YQ)j0Ax2FfH5N#v9qjJjZ)ti zJ{6cILXpaG?RJ}OXW1}raDt*J#D*wlutp|X4UpBz1j*#Uf&mjdb|d750ZlAgOJRx% z3}(6>f*(~X8-|0VpD3I%u46@Xxvmgsjo(mtHLBqV;k3Fd2#^8 zx%+=d14YN)(2LU8>&5BV9Q2?M1C(G=LXQz}WP+^1 z0~zQgK`@FMFhxU_bGoVN#ThOVMLNi2R(hMV7uK{|xV%cs$ z1UpD2`&?n{9)eCO4t=^;3e~*{1747EqvddnH~?9|CplX(#iEwgB@;)+^s&ySlno-s zfPZ1l956IKYw(gTFdQc1*eY_72m3v$d8ohhT+%11X9W$Mkc{_Q@2c>(w@C#>s@DxwOQc)@zu_&Z=86~8yH`|B%} z7n74Cw~yX^^qvFXObx%e&5zSY6!&&fKzs?Q5`rG8!7EfMHL=HuCyte{N^FOX+H6W91E9MHO= zEI()cEwR=8%no>5@}*8`8mE9(l=|v4^@ANM(0~qE(op~YXz+bi~&7 zGP=39-VgS6f?BAqUPtw*4F+N=d^C-tB)6vxb!OLwy%cLInyHALhI&Y9tGj_5o>63$ z%Eds(7!gv!6_XJB2{LqSXgb`ah%2^9Y@>?imkQppaNF*=?YS>FHPn$1sjX>~$)q$X zmv}bRaIIF8HVmT(8pV7!5&pE8eO9kbTa*KWU6hD$bl#aLVK5l(=`#<6lec}KB literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_188_brightness_reduce.png b/res/glyphicons/glyphicons_188_brightness_reduce.png new file mode 100644 index 0000000000000000000000000000000000000000..3231271de6f3e5647ad803ccf69df786fa29c819 GIT binary patch literal 1281 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 Pd~OxB3H3t$m4*KRnkuaZ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_192_circle_remove.png b/res/glyphicons/glyphicons_192_circle_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..6bdeeaaa92165517b8d11613fae03e159a8de77c GIT binary patch literal 1374 zcmaJ>Z)h837(biYjoLCN^WPLbt{>Kdm%GcKOL9xvCAmu*w{#^*XP8rSy?c`!y??oT zW72-Hs}`v!_(2O=a3XcAp!=YM4d#%-#8qk;h!Of>ZYZL5x`BQvI`q9Xi3P`wyL;dF zx##yhzvti0jgAcUbnWZHFsvsz%%{=1&v|xrqW99%hu6^ZC=_xqV-#Rjv;Y>Bjd6e{ zHL(cNK$IuTD%2`MBKg9CWD#vub5fFfSgRNdxk5u#z2LwiR|5qLud zPDF?;Qn}P99yct2``unrq8SEfSvTYJvn=xz?x7hEMWdS~86W3oIZps@UIg-H$ptRW zCz`&{DMFMWG&zc@R;%u+*KJruiV1~6jt!58L>i<$sY9_w>UM9-0uOA-QcS2AI__8$ z$Bhb%5Qynk2%4EnwGHcbGf^mIR82G~#!XY2=ET*|wqY9lN8^s#c6QPPR2tYu#gb4x z3cW2b%H7=^wG?Hkt!Gv&wGpQ*Q9uP6(4mb;F%3qDId{ZTPyt1iH>8U5HOWVaN=1=5 z)-SN$5X}bJc!FX0Sd^2k^v37WSDq7!{U7@ zQBrhA(C<{T$rV`2i$G3ThK4sv!6|oOKr=zqXaN+X2Zhg|Q_!0bJh7-Z?iU2sPc*Ue zwv@FZM}Yrfg#gP(X)jOv;|xI|GP1-$1*)Lgqfr$$cdFv_38#vB5ha9_K|!pjkQgYc zlV(Yg4BZY>P7kUI0yK78SZbTahIm`kwlvWsINSCJqC3f?X3-k;yW28T?3==`3?m-m>iMBa5K_1g9BkFO~Ue;@yVym{=<^5R?1 zlZDsIw_g6_&%T+CORt`~_x?+B54~58La_Jpmva*gc4&Di^N6%?FyDLmg=ty5(KoZ} zfq$muFM4m}+%LHnS6Ax?|9Iog+Y7g+PhVJ^o?WSbbD+QeHr~ImJF|Y#_p?1e)>-~b zUOIbmuzvDt`JLJD-s2lP$^87LOWnMp{QAoi1^Z-W!zaI+H?DMjx_0!ZCkLKg89IA{ z{qBc)$2wi<%Y4-R898*D{f>#;E;Ao;$ZXd!M{^ dexqaa!92!U532`uUO(sj@sh#_ee`wrv6i+?vx?yXr8`%BzZPsdq-Q~w!a(A)UnM-o+X0O)v)N?RtntXc~FPCJ= z_tt9>-0D=S2!*+cA~=*%9I}ZPq&SgE!FAxUGMP@cQS=WdTPOWX5X5h;cU{4;kmUQ` zH}CV_=e_THnHuPSvU%IiZ3ICyr}xT(c-`qgO^x{d$-ce|cxgvU4h`9(XiRk>A?o%B z1nH8Rhl5bn#}6*S9)bw08rdAmW%>loE`?OzCR8ao7)=m8dn%5q6(Is6FmG51^43@1 zkigIrA#f;{`SfY8Q#4x%#Lu zD5q+%u$CYT2sr{pjg5_k#=;@n%~MP~9`}8)Y!F)ny>Sbvm7wMAs(X;3r@4lM4BG;} zM|H$5qXdbWuBT9PGMNp>mRBnjE*Vu(9f}FjRH@|WRkileAiPcEj@Djw+=0{}^z5>$ z;qw^XRR`nR-91poU&_H^VBs8ny>^dtu1nYVEpv+}U+7*q z`FO{*VetBwtA}&ew|_RC>r!`oJm4PN|2B0>`fy5p;MxzfFBiPEGl!mvM5b33KW$uV a9VV`R^iszM3(xw$Q6jDM%cqmWlm7v(mdQr| literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_194_circle_question_mark.png b/res/glyphicons/glyphicons_194_circle_question_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc7a1b210b22b3caace83188612059811d6b5be GIT binary patch literal 1427 zcmaJ>eQXnD7(d2FU~bBm5OHESZ#ocZ@1yJ6_GmZS-gOk#xpdP_5+k>}ckQ|B-Ff%c zwj)^_f{uU8z>qi`7#L0$qVa=FBOgjM24g~|F@6w?f2fI(uo01nnxOA>?N}n=^4|OL z-1B>$-}AiBb9*~G+G?vCstJOqjc*Z>cx`ar<;(CqwYB{`UhY9+FX}S-QBJZT5mt;o zNX9c#3MQeX6rTPZ1_@&6tlHg+dK2xuY-HS$qvOtJOpGRoU~Ar#P>W#QNx0y*X?o149k)LxY=ee0PIGRV_1%6@Bl8hnfC&o^O2>8!rm;U zpHB+0k}rG;QE7xso~CoToIB@n8&-;D1A%~JgX3IS!(|tAB;{SY-B`9DKwGv{6RCzy zIu@lqBa1>5W;!22#!Ms@4C{6&Q8;CEUNULc&Cr>Q6IW5&MoD;+#x1q&?t%&FB(#mJ zCFA?(Z!Cjx?r!g>tfPR0Hj;E1I!+y|dK2rrEtZd3P(p^)Z5Ud)R65fJGVHWrlF=?e zu1`p^syl**oSQ6hg_imZRAQEqA&XbRtG8glVB#$6!!dF=d={Vlo|wo*!k(yC6oHp2 zVUeLCZNqPz=#HGM~DXSr> zC8ZV2v??3A9i*Ka)Km;8?&h)dB8x@wqM|Kp;!be33oVEb3r!4l+_@HR(c!7VR)Scv zDK3P&^A}D%cDe33vgW|ye=jZLDt`F5Zp~SJ22Z82`fP2wPu`~PdG^hVr(e3dKUn|! zF!Px*{^0J>EBnqHwSOOk#NO%6&u?lTIePER1C6Jr!Sd=P*thx6F0pdklF7>btKK+% zN)Wg?@^SX0qJJ>CcJ#Z$t9~4bD`eUXZuHIyT6^e%-peDfY_f>VrGScD{Y=&xQ|& z3-8{sensW%82^cVh21_{7#TXT_Qf`CdTMfIc1n%}-g|hceGRyN=Y7At(9&_^+Qs^| d5II*-L$t!*j(mI9Un`v7WL)eJ-iqwl^&e+7<8uH2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_195_circle_info.png b/res/glyphicons/glyphicons_195_circle_info.png new file mode 100644 index 0000000000000000000000000000000000000000..9256ed960d2d6f7f26260e2a0679fb59ac44aff0 GIT binary patch literal 1364 zcmaJ>TWs4@7`7A`)k9h%Z~ZJLg%<5Jf?Nv!&YeX^u| zK--wa#*`wuJ|IM$_^w1)tZ7J zYse*-hq5~J%mtVr2;Xm7VH}O;26@FYDB07YYKD!`1d-^g*|IVX5txD{%}kQNFD;Wm zQ`+0OomS#1+1CpaH69xV#;lRtxN?@gs$Z@f>B&1W3V9ayo8Q2cQ5=zBbAuMGgOa!9^Trw#Xk7q=I z&2Sti#-dy-)y8H`7s;jqJ*OU4yN2a%h~?7`l#%5WEK6^<%5d32mRq)LkRD}0Pfk`e z(-S=CRkFnuI@%$qW*o}^%~J5%br=L04zrHo7(+OG2A{ZaMhc~ba5^eUY?N$a)om$j zM~(si!%8t$6oO$f7)>)IjmfAAk2IviR*wogYVCB*>l0p=%@R&XK!ruQq9d}mq|ex8 zO|eWjL3=%@YZ%bnZDQ$d7MtR2P21MQli+Q)Mi3vih8UW7aveOPBNy*o#pAt^6@^0W z+m8<%={g2(y{X$iHg|Y0H-CDg$85~4beJn2yzy+U(SLH_ROgp#cdtFP`suFv`FGA9 z_NmLhe{UHf$bCnA%RL|$0Ds)Y)yKfD%kh0e?{mjHzVKh#G4EUdW&eqn)ul(A$-#6PLtowY+LQIUvEIF}%gKMx?Uy&+Jw5Qs6B0+= zytdvw`qqNJJko8L3vqIAXmRm?`@)CTeJAUQ9|!O0oV(*M?xl(EyQVs{PpG3~^{bQb zKb84GS+%mAcTTJazS~`<$DRg%{`A<{>BXy;{{HA(<8{|XT!KIeP|nH7{3`Np-^oVncY@7Zz2=0ylE5`J zL5xLmRL)L;iZ(FqfRX9Jf-*g+#8jfc50BS*WWWGW#_NV|x_muBH0|qq_ z1hGVFJU5J|EC=9`U?`waG>x-tkPb&!mfnOj6wQzny4e67<|8c6MDf-|Aa9OZ;`3s< zL`Qlw#caW%DFmuOxb|U1J|lL3aUqG zLmP~8cY8-|MO9hWv#XBYj8j!epaTP#&_$%^CL_e0A96HQKv@?prRsgnhzX)v)l{C1 zNNgxZu^gL9)3lfrScwriE}D{rR5DCOJ!hVQl|Up3st7BDq;!}LixexMl1WS~mKFsz z&2gLUeNQx#%L`GG3s6idHdQ{M1Yo}{opYXbDmQg|iDk#ZS9TI(IeafzA zie!1-m{buzL8t)q!Q7F{U zpV<0B=U2GDaM=fUd@fu+P3RE(9ZzXve9t@g{&M_{GnMXLweTq1a?1DUY~a$wniIu`?m2St#~IuF zeoxQ2P|p+Cuh|2CT=ze)f*q4i+K5+QyZQ1ub`_4W-ca6KWc;V=icb|C$^I@ys UwXk?;`;hma%SeObTykROKfxHz7XSbN literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_197_remove.png b/res/glyphicons/glyphicons_197_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe33493a6743be7395fa1f165a6063a1047c438 GIT binary patch literal 1410 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 A!vFvP literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_201_upload.png b/res/glyphicons/glyphicons_201_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..a429ecb3d1320d8be067bbf86f8df116a195c5fb GIT binary patch literal 1435 zcmaJ>Yi!$86ix?hX<4OqNU&6axlUov#E&#iVw#pDcGhf7SEW&@c+RzN5>v-E_6saJqP4+#?Ca5cY){9xXmLQk7j|oDSP%?g3rkub zz~VU}1Cl_H244OKwAgI-{Vu0^VQ->?6}6m4uxvcVoQ}{oTT5F}7sP%5u|ANI)e!#2 z^hF$#r4atKFF_{sD9Fm~g9hjx>`aM+{bEqU+gh=fB8wd402HudPEk#^7{W__StMI( z0>?@wus?*akm^lzVNuNhn9t*NizG#14CA4ieGEhG!f2AB2@>6mn`&l#3`_g5@`a;l zhLmQLT&x@m?Lv4KLY*auLZRR(cs-htA*f(5X!)RNH?nY>11c1XZq;;EJaE7i4Oxe> zrec;yp-;=h5RRCxq>$4SiB-p{SuPYR8Br8;g7T0=E@$OcvNmB7+@Wz-Ycn;V10o4b zEpLeEJkqWT7}f6HfhvZQxN4{84W*Q)BoaUYIiNxlk)leB5Oa2)A)^Bn6iyTK*4H=} z!t;4qVi_OLc!MMpV4^XK;v!*&r@27DALYZ*NHgiTf>{pM0+GfeAuLIeUY=t(k_pok z#nZuHj0-cdKp?>ReF1-@f{m*t6jTvdK`pF&2OGU7mW>)ffSQrgG^NriU0DrkW>(X& zXg7mxO9-N@T8iz~NtU?+Lw*HFF+~WNxpYt9@iNv*~6vot_>X?pVJ3;H?WaA<414>#?n~ zUk5ygjrSb~#!vp*^xMu(=aJ*rhELfKaI>F2e{f;y+{ldl$%}h`d9N+Cej@R4tWFu3 zCzg5};n|_-?8b9Dw9f_8_2c}lxf_!^K78iOp4}&JO!j|of5|a^xcY@Htuc|_H}mSwQR{aZ=R3KH$o|*=13}2;;Q#;t literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_202_shopping_cart.png b/res/glyphicons/glyphicons_202_shopping_cart.png new file mode 100644 index 0000000000000000000000000000000000000000..d979400d014df84ee4c01d514d9e58642e92e3f3 GIT binary patch literal 1353 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 BsQ~~0 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_206_ok_2.png b/res/glyphicons/glyphicons_206_ok_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8d007bcabb8e8436c69df01be1b1986f3502e4 GIT binary patch literal 1285 zcmaJ>TWs4@7g|M~rY z|Ns5Bys%V#{OIJVNs6M5mKU`ec|Sm&d&kGfFAP7pBUWI&ftOJecg+w|ij7twD0^lL z)}U#xKmR?`PQ8H}l{2!1ytEnHqw#G#FW-6JQ7VAoggkq7E+5 zgz0_?UQnqVIQFAKp-9P?o*6J)nq@pM&Z}=7;TpV2815H;$Rww>i)(Ui|C=+6beljRK%9i(s~5T89kvR++Q%}7JoeRxhIVL4HX#-dR*)PHmKgeEb3?MCZ#;5ioUHdJWlgE~uI*e&+`S3z zqKfU6(d5ZX<1em`CXesU8W;8+?EXH%|G0Pd%b)+axbW&_@ZR;;PrUNeZjs-nR;HZ9 z#QPK9y|t6Lx^wQ+izDxzoSoji^jvXkbmiE&si}XDJhM0k?ksP9wmqH)r;oq(;pe}q zZ=U#SX1YF4kNq=q>{Rjkq>A2YyfpLhjgNx!zfs?8Uj5?RV)e?_qkoP(m3Ujc|H$+& k*Umqby!`abY&9`PJ^RDXbo0KC?}`7I%6e7XF0E|+2d0pj{r~^~ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_207_remove_2.png b/res/glyphicons/glyphicons_207_remove_2.png new file mode 100644 index 0000000000000000000000000000000000000000..319b6799d8529cc374ba2f49505627b3da97ab61 GIT binary patch literal 1238 zcmaJ>TZq(F7!C-FmoA9d7Jc!UeXxQvxyO_ucnR$~LT{N1w&nwTA{yR*}7!Q*#q2gR;N4TOj|pc@8Js&z|z&#p%IOf2xAr$VMn z{35AFbsQKtK|smoGOj2|0K%*^sz4}h1F|T|f=F+ekw!HIYH}X*FP?f!yeX|_+I?U2 zRN`BN#F`*Kd{gmJaHWH?IuiJ~bJx=t)eSy2c>7FSO@B{lSh#yhps`b><38cK0HacMoKMh0M- zyZ1X9D0=RaUffQCUYwpQpa6v^A}J*$^%zm++MdLx1#|)vyKVNhVwU)J+xIl6STI)* zp$ZLKlFYIWE!kAnykY4^c~s0ZXUxEIAeCf2ip|@qTvn8v2=$yKS#qIZn>w^rRW?kB zl=z2{XD2uWy;5lYI~a(PN*gUtW27WhiJsJ)ZOLUlXDF5h6~2%4mZfYEIR(6hwerx^ z#hfWBhQte$jOS{^CjsjBs2-61F7R2OXn_+oX+km{nsV9!;kP$~nYiV%qXM zfZlEqD=f3v6EADpfhL^qH-1gDGU)@^u;?m>hT>Z1XKR>A6CKt~CzWLWJ*REf=^JvY3wZ}7G z{eM}o=81H}}TSjEM%rLX$ay9$Fwf9l(dc9Dv?OjJBMJ&yR#t)9Wm-gg(cU<4D zg{hNGl&K-{50`A&Ux@#>_<>>^Ak(=KqY-sN7RDdOET|ZDD47OXVtlW(NaFNz_ulio z_xzsc_dM_O+=-Uv1C?8LZgDsqm61jvhTc2TQ(aMxR^prbc3XjB8*DW?VOFw$BcK=^ z0E?ug1c(7i>FNFy)Hxib*VT9%Y>PJWvXOF2wv9WNG7;M0sB6fXlH3I#)&UZ#?#GuV zKEyFq@#BY>C>b?FAgMO?TA;PJIWG5h$vy>dsK@GZJaUi%P{ML4O;7VVKc4r?BiY_2 za4c^EyZrbXskUef7BVb=F>a4bCMgPISvOV7uq?G7qe+S;NOZF%slQcb8D zI%a#6I*bhThVurC*odBnk}d-~sEt(-)*I&NAj8;L&wpb1kOd@YSaHM9imlR; zG@y}A8YUKMWwE_cNmg}xW1oGJ1+KtS4+AA^87VA(6uf#11|-FyM)RT^X_P*NG|m$i z>0rPUVnmT;@B&uZP_km?2=Fhg=w*cf=@CdKMBxM?qsTl|p#};)8qi=t(p0-ocumq1 zs30x{bV?Zw;`Irw$4siSp{MHzy9YHD0rJusme}AizrCSpiAXQ$97iIQh;EC;9g7M)IM1UwR`~a#zLhuEYIT z`ITQHrRwbR!Nqq^ou7kd%ZX2(KGIpU!{2_-{jZPDF5g#m<+JXEt>Xkf^!#@T9oF`+mG;CN(%S8kq8bRlm$U zHs5fWygdBH$k^)Xx$cj%`<`0-dKYzk_xXjB*9U%&|8R8Msp0xF;e~m3|I4uM>`?Ok xUoVWUe7Tt)d35?*j;=WLXU%(E`k8C4j~tWI-iy=lkDu*dWkhTi-VC-M`x}jz^QQm+ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_209_cart_in.png b/res/glyphicons/glyphicons_209_cart_in.png new file mode 100644 index 0000000000000000000000000000000000000000..727e6964e745e3396b71873865c8ad757edb2315 GIT binary patch literal 1422 zcmaJ>Z*0_L7(bm7xNI(`Q3ebxofDVruI=5f*Q>i>ukCFI+?d;tMU0_q-|g!9&-Oj< zZp;Md2Sp-belZL+;Gc<_7%{{TARdFDU?y`RS;&B}4{Acd8K=f*g7NL`ZY+_|w0+GOM@-}A4#JK9^TysNz)kEbfxCUl~8HF|26FGKGihkrSPmQ_&ffn8=F%t|)!aEjRr zu%s^agH9kR`4`TCW{;<0PVMf2J*myCZ0Z5Y)d}Qu3!y!p<_$SZk_Q09dO^Qx#PDB_ z7jR5fV)(XjicDENNULpwHs~5`@0JG# zjulnlKn!0X)syPLc+&=0I1uv7Bt>B~9iW=RG)*;PL6Qm*B)Vxo)x?HrHW676jnPwrWAu zG%(kq)N5v73`a~CLeQ;LYSFOaloEwfM&u-mpaLYJ>uy{{Z3lLOTQqK~?R4iYKy(7f z%-AxjM_*kTjBFj1UPkk$4%KG#n@yGH{)`SoIbbdAiPPE05v2IE|a4~rrl z#!FabNy^HRBf$T#VuThrG9-{;p27)4Mv+;lLJgF9l+$2or>SnAu$pA_qlEYs&?jXy zh`01>c`L2Trr|UbZVzfI0u*-(SYnCAqIgNumNn5NxZA}MM2E#81_qj38;xk@{k1nd zp1bIzz;)+lj&9xKdj+f9y7C8K?aRKJarb89tq0dI!&grFYRB83Jo1J<`q-|*am;(| zz~s=bw)%YyeeWdx@qS-8^}(9T+5Ic_)qK9{-kWW;X9L4h^|H7B^&V@PeeFY`>il2F zwX43b{WAx*|IF;HrRqPa%aA*mN5>#{lfUOcW8R2XPpPAaDn^bz`x5!oTeFAi8{o%( zjth@$x!WhU!nM!rZd*S%>OFJ+$b~P~<6mx{IC)}j@92A%g2R6tnbWJEKioKS@%r?x z%i@EZt~@+-_BUzr^vVas>q8HX+&BH|r&F(An&dWRn&%q|e^*_o>wR}#-Sgay%2Qn} g8@~;YeU$T(9(w1bkY9dy+WkW&#dhJd_>STK0P7FuZU6uP literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_210_left_arrow.png b/res/glyphicons/glyphicons_210_left_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..654c1b7db6e681735e54b1a56f9958b0fcb11bae GIT binary patch literal 1227 zcmaJ>PiW*+7*8E6Yqg*vRK55}p(yN3@-mZ55<1&vl1z8N)H)ro;H7Ea>r8Bt7n3*6 zw0dY|k(J$pQZL>Xy@)JcJSwh;3yKGO*n_xNkD}K-xqg|>bPKy|Nb=tM^8LQ=_x;Pq z8|!QHb1%;cf-v8{>~vs#0iNeC%)8P=>~8Tb?{za^am6omDx)|Bv>+_6j8Z??qa5wfUYIn*f4{pWqL4Jiw^UE| zQk(X}%Lf_VJXr4r2YZ1*#Fa~Ed1Qitm~tPD;wZ_@Q9~TtHDO3t@)9^*4$XJnNxV18_nW|@-VH7qLr3@P7d_Up-sGQ`BQwt8wgDgyW$P!do^mo{RH$-518bX|U z-kISfpCk%WCXM`5!WCJH<07uHcFsHW0gXp$=iU93N*$WBK^8zgb{D5$$lc=|O%+LS zrk4(~XdEXABpT6}COijHc+3cxn{Q+x6wr?x77U87ZKoj)1|cyu)zzwotm&HF!q{nA znyWavUbkJ#Zr0>_;jA!l9te^O0c=$PY^&zVnpMNtRScu$SXxWhb*HZC_2v}YPIB%i z0WF*s*zf_?c`VknGwO4ebs3AMt+LT)oaKF%B70LquX=tECWYX&qLLG?Gz;IOq?NH4 zjZ0yMk6<8U9U83;F)9!~hLc`xxk}Tj+N$ensyM-tb19of4uFTSZe4RMx$4NOjYSE_ zkig_2kLaXFt%y%{QCRee8Tm;M5>h5~*B?Y&ywr>K(|#DRBwv<_9*jZ&jCZG4>72!} z_*~OYHDMBp?b!&z;cSR$0+XA;h|V;>_#MVOZ#!0Z^ykjK`}bE$_{9rzS37H0tS44K zIGnlpS+jKXqi}WQ@R=|FSp8(dpM8^{JJ+5*nP2>E^{WMGyLz3Jj*wt{|I5#>Y=7k4 zI6>t4-D`hsFU`JF`uhFPmp*MC6Z`mzcYJg0+nZZ8;5UR*t#5uSVM)(?N**t}i* OUfS-u^G$R6!~X%4@`NA& literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_211_right_arrow.png b/res/glyphicons/glyphicons_211_right_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..1e94d903fdb93f016d7bec20649e653f3325908a GIT binary patch literal 1223 zcmaJ>J#5=X6lSWpaAF%Uf&fOcgk=yQ0V0t{nJ0>{;!q@&sHkj1R#5}ZV2V6T7n3}O zJXNxn{Io-hF5R+b%O9F8Q->D)0oqJ$kSSY-0GZOYQ=CUxaty>ULGtb%-}m14{`lR> z(v_Lxr;iJQFjK#3H(@;q&xy&8;r->`Z)agS#ho?2$~Ji4O^9IntWCsv=yphxxc=6S zzsQ0hxd0sBlWOX5(4Z&svTQfrMB z(P9Y^wL&rPDF}%e7tp+hF}f(K3Q}bSZk$K+hK3EbB#tf#ye0mI(X?wLUvR2OUCv`e zmizsFpLoPhltp4@(QUIHuSmdjH-s>5 zH1-Tf=_pZ1j9IePbL8gNyJkig@%lPxv`v3D4-kI%vl!z^{8)P&B4X8f^}@w5VET# zc2rx}OO|6=)p@0qIm-;}2ZE&F1Gb1tHN95W6l`h;Icm9FvrSynb=@v$dZ{|b)}xfW zkw-G88J51s&L4_3tc19nB`wB+ajUF!8E0vi#iF%}#q$ly)r818nl@;-}0 z@xG=VYr-UC+r1Hl!`={+2qrgy5q);Qbsol>)orsic-j7cXJ;|@$@I~Q-yh^2pL>3J z_J;87!~-f$-W1xo>!&Awn|Og|znNQ~`smZ?qyJ95Hh&Rj?(Upi|KY9R=XO?)Eeogq zoP4!1bYLTzj+#Dzm~eQ KWIw5{-+2d$4u4|+ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_212_down_arrow.png b/res/glyphicons/glyphicons_212_down_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..1032ecea195888ac75172514ce833ce727dc43d3 GIT binary patch literal 1275 zcmaJ=Pi)&%7?^6rR&m2i-fA-+OLUK+t0OM zh|>e=DskX~_^SyxRt0uo6cD>?Rd+y0OjI0p+X)c6powYHrfG-+@1;psiD}le-+Q0G z-}n8#fA3CD9T`o(kY*TWw0hL2lYKvVpV{{~`7WRHkCAN*n@v1}=5g1GAfq{G4zg9> zYQZ|RoZjNku*fib|8^Tq+^n5YZRBSys*_Fpkf0f+IGKc&y#O&g2U~7X;%;5qyo|RLpa1Uj;9e zxNTC++BB=92(nT(m$3x^SXs`32}zd0tE?yhkr&94GhjlMWL3@yWMWKo6Dl8#e+hjKy8R(hG=BsUVyD66U5^~3kHns$PKZJ0+w2|=1>Qh zIKp&01V60Rb_@scAW$O^pg)42NDF|NZ0G#;uQH+muD>o7*0$R_oeA0L8A z?jG%EsOZ=`dSNH>`f)lo4?XC^0LO$B=rbbB)svA+3TSx-vODx|)hKbDj_athWXidM zAS<$70l+A0vMCyhlGja5FHZ=0>WmuL4J4ARL$EoJuPBuQL2D8KrdTLc3{9>miels? zC0`z5t3iydz=qT*#kvo$$|JF=9zhGEsDY3-Y?bLY!YFQ|kkw~o_F&Dj-GB-X(Mk@u z!pMCKI+Y0dY`+w$`w#{KP)MWYNsJ;1ACQ}ptC(V0%juG7$`UugI=fOfjGO@ehc)xE zp$R!dkaWQDgp6aW*u@?k^r+_H!O3%JpQxS{v`9iS4xG0-9_9|Wyk6LLZ4|^sp7x;U z5XB`1kdV zr~X>|M>{ie<(0kK`1kvdT>bRhm8ZWz%XsV7vv-ee-hAn}xA9tP zarQmt#@oHrAIHxa)7QSaGI9E&vESFn_BhSSduP|rpFQ#6xsCU?*6t)@Km7T|$n(sp V+g9T-@z*BhTQ#SQ3*|Rg{sUIYpM3xT literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_213_up_arrow.png b/res/glyphicons/glyphicons_213_up_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb64fa9215e916fd58977d6d7b21748fcba9af3 GIT binary patch literal 1266 zcmaJ>+l$;(7!S1eMi*>tA1qQ1XDhU@liO@EN!V%0Vf96JQ4jL` ze%~$Y&Bk+6`;P46IBu#|MJ=`-WY3{JyV!f}{pfkNJWcHdI!~5q-%T-R`eX@%TI6dcU zr_{xIV&QI3T}|=)YNPF~u6Vi+Pn`sF1A`feFm=Ho3ggTel;Oy(!S=aWfMBFTSITgc z)Iz-pERtfN@Wp~BN)k|2UYb=@Rhj{^D9M7zZnYrI8j5PjB{04q^OpL{MhiJ(U+h$d zT}l%}5c>T--!Jkc?Ff>t>$weCE-;NkHjJq|D8$+H!~(*Zmj($9NDOj|?h@(IGGt6Q zLx_@keamp1jT6OECJfv}ka$suqCBpVc1BzHA&p0BXYFBvg%-|8FZEbGmZv9Rmb=G0 znkf3-mR{0J!%>{RC*TlAIHnmRC5;#{=EmtXUjtt zjwGRqsoFBqw320;R%KQ!<<4>g+ks5N`wUx@N{;5}NK{Qll5APm9b~GGrfI08Xr;;o zTZ=R5#vaa{=GfpN)_N?~uu|+&lC}v6C#}-#5=yczNq{x4g5!193*uaGBCq6_D^7!p z*mqJAfl(=p;1LW&Nn?#xVlm1re2Ja3qGQVyvuG){ttxPg^|z&L5;+6>4{MiHWQs*3 zDwYHVM#lFH8qg4rd(;f+coznFpBSMVcUVFSK3;ZvA%!P9;V|h29*MI#A@9L3V1UtX z6Dw@9I1+Db+KDEcgnYX-g6yz0#5iV?o3au87=E(I#`}XBGTVcDf4uwa-tWQwCq8Wa za^{&I*?qv+nASEv0`-j(g>Liymv?r*`Q)wFZ*s7)$bkp7*PO^dGqv&idvBe)ba?%{ z>dyPmUjC=pGJjC+9=kk)W~w`{zr2V(hX>BSgf2`Sym{Cj^1rQLU4L-?&f4+Y-=agi zj#b_{{pZo@PeU`ZyUJHz?`?ke^W7KzwO@HEdi%=sHEsvD=Tm)cY4?$D^1o2cZlEtJ HufFjgJL{B9 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_214_resize_small.png b/res/glyphicons/glyphicons_214_resize_small.png new file mode 100644 index 0000000000000000000000000000000000000000..3191c607d44d12749643877f6fab57e60b1bf8f4 GIT binary patch literal 1401 zcmaJ>Z%o`|7%$r#CyWmQD%+x|Wy(yvYkSA_dL6gXyY}Fe19G4v)9Fh4!gci8+P>%A z;h(`a&BzGZvMic?n5a{uG5g@Q1mS}i6WP=lP5j`WkikMs3~@6AmtipT?QwUKxU6aW zzVFlL_dLJnUq?FITdFFyRbUua6>Aj|XsvS|*Jkvd%Y<&BWh)eWV3*McGm-@`UNL$B z9!p96AOR#L_u>`Mgkc-6tKB`YC*H=%M#>{OI-YFGL}(0a+LJXUc>qAX7xb%oh`2HJ zIf1K6h}i3oQ*ko_l4|Rq1-b^?yXCQ14jD)RDB;;;k*I7a1qFx zrSx$LAzJW-P9Y)*p~;bCCX?}Gd>+H*Umwp0_U zhK@THrCuWqLj+>F7DCF5$4iEFyO1c9GBPWfB<-QdRLY4fuWiEw_>aaNwe9Yl3CIMn zjkG1Bdi2#7!6M2gNcLd>}iOGO2gG{KP5&exa_ zBGPG9;TXTj_<|I}GLa}v3t^rSy#mVyA|f9NH&Ow|nPXr*5J@}=!cu&I4g|s!#qbPG zi{4-`D)3B{WmzHMX9M9PHm2K9(q-T{b+Bp)%SZ2uI6K#wA(R9l_&HB@0}ErM?7|sAZ(^d?`5fP7G)kHCh10=tbev=*0S>qBqR@B7RY1 z{6qn(tV>xba_0Y7F~A5sgeFKtMv*zFLJbspl-FQkr>Rb#aGIp|qlCB>&?lue zNbK&{a%NJM4c%@cogUOw1jz5!u;e<6dGWfYEo!1kaJHopM2FH4107ASg+}y^lg~34 zR`y6t;JdTGTzuw-`;OpSPM^I!$f-GC ztJj);&&m5;i*3~>PTe@;df;LvII}%L{JLT0=J$kj;jdKhksX0!%PYMrSI-^mnBWfA zz8w4X+SQfcy8a+sQ(w9^zv=sXrE*RgCZ4+aPVMOaa`E!=>b>l~>#q%0Ex@w!T-C(3 z%8s!i^3rqieEG*i=gXu+BcG5xAKb2f<%=KZ_g?Wn{m|&~o#U_GQ-@6~zHsZi&$doF OKf{>VE}Rb^IQ%aXpWW#I literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_215_resize_full.png b/res/glyphicons/glyphicons_215_resize_full.png new file mode 100644 index 0000000000000000000000000000000000000000..247cc3988c5aed76f48dc0aa5398dd5ca0a03d51 GIT binary patch literal 1344 zcmaJ>U2NM_6n58jlx~6Tfx(#2EO#3qNNgwdwPTWXj(=#x(p70H+6M%#eVbVIANI|X zR3NcFAWiF#+MzulvAt{(o6rOj(kA{k#D==Xw;iRH9dfYWO|d3 z%sYA+7NKr7UcLe|1kt@>mB!I{VV`JtPC}0`iMr!sHbG%MMGLqtx(vgKx}Uq8A) zk(QaIp63co!Ixph8kz~<=*)1*n3*=xCN;Q+%+y6}z=237>yGV)Vm(VW?TUCFZPOIl zgrMmxwJK`7Fha^+07)*9iW>~ek^m&w0S*B6X)?*MNt(eoh_eGC2gD>#wk`^L3(P68 zsAw%;c$K9p2>BvS*J`yyEtT+sGR>yb>BvSh8OMlt*l>|vkGo-i+kyf^Bd~mAc`g}Q z)F-_v%2HVAY6y;BD0B?FVJlHMWprKlX*R*ojuXYzM2Dyd@5s0-IxIDONEcz~RRaT` z$5eltjB|HyM{S^KbZ~w(u$yt31`TcKKo^Br6x&pUm5ciW3m>3vE1pq}zUGxIRjpd4 z2sjm_(hLxQtg)<;lYp931c8@TNzM&0eB>-Lu$G8-5+>#{63_BHMga-1teQ-xHAMoN zAP5T234E^2&ATDeT?0l=Bd&Fao4O}glmnA@Eo#v6ry!E1+0JzjmI%2ari7=2`NoY=A@L&sVd;87S~*pvQFgS z|6G*^io~Q8hLc%}#$rrEL>97Pt41XowPv;z)rn~9ZW$*eZo(3n1%kbPV zLq|1eTbR(Ct#au#7Mt5^infi!oe)hsEr=JLCWbEV+yJ-e18;20;`Y9kSEN$?+YgQ% zjD1dSTHk$@n7bZ(Ys)t$=QRFS@7!K+Wy8{;<7dv4WP8?3_g;JWuY;G~Ebjh=`J$d# z`F=ir`Hgh^yGoZ|Kjv>9>v?E_K20oZ!GmYl9a(%|HV4Iq za_y&A=6C-7?}G8&*dn{5B>g>6+i{bKQQIHySvtTO+RiQAGdHfUC+DB(|8ZjPXI}?L zUR~)CAFI{=oK@Tt&k>*guy~kz@157S@9*36)y6NEmtI)-c-{HFtsgGDz4hX*^GA2Z u&7U`?ht%U;6J1wt-+$uL$$w5YHZsI1i~jACv7@J>e_CE0R?g;Ln*9%sXS^@~ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_216_circle_arrow_left.png b/res/glyphicons/glyphicons_216_circle_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..c69480b003d6101b6474c90c8ecba608fb58f2f3 GIT binary patch literal 1395 zcmaJ>Z*1FC5O<;5XiCJ&I>g!!cwvq=rmTX0}1$mP$vx`H1P!{C_-BY5}FVdtZETxLh2+mkS6%Tka$j$t`gHM z+wboAes{mScjs5TyY{+WO)d<>+{sQMjn*dTd0-=Y&+a?$9a^@*cpvOBhG9Xp0LIJ4 z5Wtg~m<4Gd%B9gOpdG{Rzo}&UU|;G0CmEVgbZmS@%|vJnYu{5eMQH>;dA7GMt~qD;I&H zS@JNK77~?MNQ)3T2u+S83x$HO5bzmRmZZbsu;at;_aY0gUDBag^y+p?)q?0a=T8Q#Y+%JSeY%I>lqHPrG1alm$2cjLHjIb2X(kvSdQ4G(} zble{fCj_2JghC;K4Tjig6`Ry;DC!b$f;w2`4wk(qmWx?Hgoc$d47J)S-8lmqcFr*I zSPz3gnGz*McQ!oENmjT5OBn-l!ZI|xd=#8=HwJVFH5!X@^rQ4?q=f>BxIfAVV!?Qv z2@(~oysl(xnKS>###u(-senKQV>Ce`GP1-$1*)LZqr3_$lBzg;!l|O3MFsK7U|7tn zkl3A7OJ+`y4Bc)gogP#b1Sm_ZSaO}m^7gu>ty-c6@NS{`9ixxp2Hinf7|$ zoId=-(D8aux4p4l{_EOH7hAQdjx%3A!|&|uJon0ut0&>x&u_Yo|NTtD@G^UclHMY{jp>!&^Zi{>YVhT*>l zmS-N>wPE($@AC43`}?J{9j|?!A6&k#-!-u^dpNlGi|dVyZ%Z!;4@FlRKRBAcbmQ`s zDYxf*wz+oT@fE!3TFq5v@yL={|INq$K9pJ*yfvSieCPaJYwO&fb8N%d*xu5Hr5P#m zRw24^>(4VMj`i;Q^|@PHe|T*E_LkY#f5bjLap<3hLF_c4hM$@m)1BX7GTtS86dgSB EACW-O&j0`b literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_217_circle_arrow_right.png b/res/glyphicons/glyphicons_217_circle_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..1f37db2f91d08dc283885dcee66165aea72ea8e2 GIT binary patch literal 1406 zcmaJ>eQeZZ81KYv$HK@YM7}iCZUNEVwY`ttUAf!VYkTY#?ws49)9}Z-_PtwKudVHS zySu6XASPl$LXe1tz;xMyCi4SA;^IUcF;o80Xq+NuG6_bM;B@{$jEV8>?QSfQ(6n#g z_v!O{p5OD;gI%dz4fUJrF$`-+bO_z(z1ewOwP=02bN3hMwF!#7u*b;2f@A@VQ;dFq zCvs92bOT8#J#!I6Fl^QDYPuKpCU>*4k@HB7j;EM25gNlHZADX(2LZ(UK~~kH#KP2h z0#}tN@nj%LB~2a-s2#%==owC><>5g&tPpLjc%;Z8133UCyqME;n=M9(vRxMK9WhDZ zWfeFWC6-9_CcALnumB$L_}nr@(>TL;Xn%lV=oZ{d(O!~5H{+)LY=B|CLA-Ji$eX2P z*lr7nh-Bh(809&?H6RL)e zI~JvWBM+klV!9MU&P*nk4eNF#Q7C0(Q8G!|Ly@_h6IWT=hTY&cjXP@F>5>V^ZeSaE zOGfp`G*!VUcXxMGRaE3O7@8Kn z;c#5wn0P1@5`uwHFjmDTbQ?;#3>>EpR=tho?}}x43rNtg(uSc`TcvBjfQCI_m^k0V z;14GyS=AlE4yTe8uE0`+UeUBwO*9G4c6kKRVR?vwjwaVaBf6DqzlC8n z+Y$noE?z$SYE8qZ_!{xE_4rTC^Ye$zb=zuIze26vS%;R6_IuV&9)TM!jCXDPZtSTu zM_c=DE(k8^>T8X$X+HDbgA;{`d+!s%msUMjcZ)vyhwE~`MsKJ&>~bCY_zc%qU)aRX z%^bR)bNv~_n_JF%g4p7VkH7Iee(jgz$ivAKcS55 PbN+}4F(tek>)ZbyZ*0_L81KQt#@rlRLfp_{(;KiE?%Lk1y|(VQ^{#i@O>WM+B`g?~u6=h`*K51> zJ?^$?M1&9M2MJR!Bue;#@q@%*!~{uDAkjrMlNglM}O`3&Yml(uPOiNOFgum^r`f>iCN}3!yQrtEXtm$~b`dD9C6=n7IAP zc>>qeFtL+KQb{WcvReO?4boGC!^+gS!mC72H{MkgkbxY4GG5H-h9eZiM9Hpz_O6&D z@RAA~4-?CzMv_B#)U*N4_=7%$qG_CE{d6b8vh;R5K+yq`LO1K9I|YUn0wKJ75y+dZ zjtMC#UiO7fVIm8mC6HvHQ1BOme$&p7G|%&{jX=PMG6F>eKoa(9166-8B9(X;ZlUW!vyNT7opFrb4-(IrNRx$vZ|p#sXfWGZ?0YeEVW z`MjnIEE8jcJjHTsG)~h}L}X(DiQ_`im>7+8QX$uwYhX1HN&G6pMk8W?iZV3CiY!gX z0z4m=L^jTGoD^cXP^5xQ7!H&T1-MRKtacYm-4`oFZ6HI_9yU$A(keq)6PixewD4$} z#oLpzq8YBB!>weQE3maaK#kjG4lk8L(C)#2qB+!PArxZ(g-@ds7mUXO5iuBLVlkE> z%2;(($|{i~!2htZ5G#pPP@=FC==`G;!54pYm_L^32h?D_%HW`0ZF{ zo4WAyjtuL%8$Q{3W{;C_FnQp{dJlUk; z7asr%8w(T1vww6ybpGYDSGGzY&>!|4UHcVZv(MKt=kp$D*pPl5KGnMa$h%+c&i(nQ zb9nQeZNHCx{?Wuc=g7;~4m=ThuIAX^pKWVD-pJngxQd=WajE+G%|E<)h-a4Imgex% zV;8R7Z14GooE<4F4bJ0lEF7A(4%VJZPj}pEP`^F%;FqL O4im9K=~QI*zW)H1TG0{! literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_219_circle_arrow_down.png b/res/glyphicons/glyphicons_219_circle_arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..63d367029b89d74081d56c9d9a6f1c790857eff1 GIT binary patch literal 1402 zcmaJ>eP|nH7*AtyUD?p?gXyq(yUI{%avw=9$=P(h++Di3rYmXGl;Z65?rn1Ra(BCX zvm_PSu&X*|VO8;uRahMkoQOEFlj@+W9b=oDivKw0M4{~*h?BvDQAK<&O=`jEad+?g zKKJ~d=l6Wwfv(Q>we_3pT`t$!_;w+Q*3HgScQ<+;f1=|{wA>HHH0(A8U_r8gi&Kn# zfW>oC1|)%`ly;v7EiTtxH`G)brV|~kY~;L>qvI{+OoVp1TDBEUNgf0c>jxQCkKn(3 zHjQJd62YGiB*=uxgRHuJ$O7F%ohf-}P!22jwpOgA$RYzd041!L({!6HM)0y-7VRA| zfn#MAI2gf~NTm~97;jhr3wV7VnWQL;VZ4+-z%bNf7)??%L86=SP<}SRuyhcsTsZP( zDFbX$h*f-{Qv}aKXtD%RC=|Q}pVzQ51Qia49UC<5K^h*rq(iCb(e0+H1p(NyrJ7JR zbj-0R^&5E@!4cD?5OQWBv20kkD~UoWBZ`tqP+pSA<(#<6+BQsre`wrM+fJ2CKqP@} zTy* zkq(Dr0>{Kcp^y*^go4p3Hm=)H(q-T{b+9VJ@==Z^`G6l`ng7JHyagm^SSiEMs;$zM zHK1W<4HM(L8SIgSB&)h3c+{z6g)6YsJwSrOpfTTjG(Sj&O8ih}xQ^*$+ z=_u#p1ER}7s2Bf?O@z#u1GP9~|=ynU?^q{69KzX->C01B0i&r#lRTE8uvt1rRbXXo@prgsP z(1@nLzJR8?29FC|s(9tpo1+cG*qV`p>qF7@zS{QPwe6;J|8TnDzL|#0`(AqRR`QFl zhQGPy{dsa-t9xFQUY**qb^oDT*NMGHHtdbAPj_8Be`CIR>LlN!a|av8-)eSWZ#=zW zan10#cY2QY=mwnjTeu_*uU2$LkAik00}#S_NO5{@(uZ?Wd+M_gtF#sBJLY z(H5JhZ_i}nC+KsoGmQ^?yzfbGb8YecF>K*N&BmV!tKIj!F`GK@=l;d9=ia^A``*pp zNBeG`{r29Iptm$px8usE*D~(m^q%gmv$Gp>M-K0pc<9isk?(dUPSlUSP)E9&jL6)j S@v*G)H;jv&!Uxg57ykx8!rsFG literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_220_play_button.png b/res/glyphicons/glyphicons_220_play_button.png new file mode 100644 index 0000000000000000000000000000000000000000..36fff4c0d910d4cbef91b31aa39cfcfedee8ec3b GIT binary patch literal 1393 zcmaJ>Z%o`|7%#9HWFtb%0*q-&`LG#x*FQ&lcMZ3tckRLH4#{zGBH^#>l71c-RVBn51{uuPaIf8OB0lOVUIZgv$72^K{fjU z9!txEAOU1Ge`Eo)V_4PiTCx}R#t-m{nfA)AjyIRK5E{eU_vb8G83GXR2ZNdsBL2Ae z8G&nRh&af`skjvZDXnwZ20g=FNo9CQ397{YeRzA0M+VXW%6KlV8xEff5k6wyC`7E2>Wz2f5z_`Z>-BjQil%Xn^U`fB$I*LnhN2mgLO183+jy4a89!dS2;|LH z2l#{-E%`#H5Rrn=;z=@_&3dywuW1jGbTAlnZ7_@nX?UEx0p*;>a9Yb2MBpg4Wdnq!VcH=5)J1_z6(zvI#lgwLyOaRBs z*b1u0Kx-L{a(916Wkprl(6chOUW`*!NT7o>Frb4-(M3jxIscTcp#sXfXet@^YfKCg znT)3L94m3YAjJi^NR+06+Uoye=DqC?Osd49FQB z68i@Ayp_@v({S2Jw+D3%0gAhIEV;>IQM{>X%bI8s-0j8)qQk}z0|QO2jYd=mHzqNx zqA4Z{$=ucXr(doer|RDJ;?2vo>amZppaSroQmPjtf;2^VfGD7UzygQJlh=OQKKJ=Q%}m~Yw_E$=Z1|x|TW>u7Jn$dhsXZ| Dluz2F literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_221_unshare.png b/res/glyphicons/glyphicons_221_unshare.png new file mode 100644 index 0000000000000000000000000000000000000000..3831c36d8508fd8340f18d4b7ae67f0535d0d977 GIT binary patch literal 1352 zcmaJ>TWB0r7@pQ@O0a$Zo`7}h^f_cXl%AYKF|(@7F*OP2}U zG?K(&CQD_#G$@;c6FwN77|!bx6lSIR=i1wkFB=Cj` ztR#tbQibdYo_2kJGtqcNr)U~y*(jZ0SeD+4$0#~RQs`zQbV6iUF~;G|i$LCdV@%A+ znWisvN)lxVJ&`19wOX_mkGg(|qy<3;ZNy>`q!9_m9jMhKPSD%3AcH{nO%Ix`gNGKi zqFaSY0x?|=!S=G*4Z}{*OcY8PS=T(0j#8v;hjBHu1DFH1Y1~me$d7w~%z?nI`Z}t| zSZ@oAa(8z}Ek#4$(DSOk)riy3NnimRI50q@=msOiTs-KTsDPR!yLvVJs>(^CS~U%k zWfV3pP%O`;Gc+xyBvy&ZJkO;SDV<7CT<9z`uo;LXQ3GKU0xe|(TA^5pqiH232pL&o zGd$1B9K&;|7FKlvs5v?aorYNRHdekXR!sXqgRY-Mkz$|4h$%oM~%jz7-J}W8lCufMv0}Qc$!fZmLZy0V^hjn zkt4wWunNb@5*3#zCQTD0B4g+xG@%8WJt|qSxwFi$Pee;|N+=-_1B_`^3ljTE*0@(T zb=L{{$*>1469F2#bu78bVne*CX^QNlZ|Lj3p{>Cy+xl>=Td#g|ik8mrclg|ua7eB%i^ZBWc1Ld{08eP|nH7(WoSD~p?h)fuT=FPpBoO&8Lrg*n*u?rn1PzIykj zNve!$$8b~d0|z2=46ANT5!}W^i#m~^9Sl~TS~k#$u!)F*e~2IW@m`u_1;>v2c;Dxq z-}C&QuXlfbWGK`b?!+)Gl-({D(03DhHgw#I-r`U997dnJpfUzWoe5Y~J%EY2GY;^q zrItVesCs>B5%go&Ek7H@F*ueR7Bt6-sew+cX1NHBVf}+OSJfr~#K%F&uv5e@3m*}< zp{IyP*c_E}B~UiD&v;;TW~8XiOlnD;7#zU+YXUN00jT0N%d~x=mLeK<1+)&tB!M?n z;ADzeAvKoETGf^mIWKDHRI!2L}6~xuh_F(~Br*T7VzgTwxSpdFM@ibJA ziAW2Ka(8n_Ek#{x>$w%rY{aQ+Brt&mZ0I9Wbb}FMF6{6OR6x~~9jy}l&B`gFQZaOa zV-+r*q&S|FGBhoxMNVO4o=-@MD5d+TMBpqiuo{RYF&$wkHYvx`8H5&jnpT)(G9!yz zhUa-X!Sac83!AllsM;C`oCa9qI+njFR**cPLdPpQj@fFJeA$7HUv^wv8s+eNgLE+PA$Hy}YlNRF=t0){xG_m@sl(i%0 z{*P4>oGemtnPMfHAQ2f|6QBW2(Ckssgw2&{1brfys$D_}iRxfNt(cG)D4BJ)Y-o<{ z_me>nng#+iRx4O?mBog5RnxXK(If=R_6VX)dx(LJCf7qF8eaM^I3BKMWwBVhbn2mx zL!aPl_a6I~Ne}Jb`^gLy8441xobkBX~zTZ#8kDOS(D6aXTWA6P6gMZxCxqch<&&k#6%suKBWec%iE&c4nS3o;tg;>)x+79vG!IpT0bRKfI?aI(P8R zedn~N*T1`O@o0HieKzz~{hb2`ADE}Egxy_BFa65@`D1+7@L6eRVcq%5n*ZB_=a2JK wcS?($-z@W24}Gz5Ve5O39iLu$e%-am8EhVI!KVD)OTmejRYv5u)4QMi524?{LjV8( literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_223_chevron-right.png b/res/glyphicons/glyphicons_223_chevron-right.png new file mode 100644 index 0000000000000000000000000000000000000000..141b090f4bd23dfdf4d30f0e3789426033966e28 GIT binary patch literal 1239 zcmaJ>&2Q936rU(+MENKYQd=bz%E(YsBzEob#wPJgW zJh`rAtB0{zkmbh(jHo=q$({3E$DRt~&F&JZ2+Q`&Jip(2zxU;v zt1D*@?VsHb060`#w(5L6%%2bTP4V~K;h$#sGQ;d9TcaDS>m&pi9$hD}8agdfCyuvu z@d;T3VDc}&(PYiqdEKR9-pO?Gy)foz02Y^evEyzM2G>c;k4nPd-+eDY-zy29DK)7U zo22b8Zzp7Jd!^xSZ@QW%ES-jnJ)Ii}33FgC45C!;m4ty^o$oWTD8PXV+bjvYq?)x= zXwrm0C11$75<(E;JX%mNMyH@GAz768jdN&0SFkP@;qVf;x5V4f>sDpxi=RqDo3U6I z#csEo?-uejX^BYFw9JMq=eR~L-HMpg%SGw2kp+vSZsNzxrxDC7I_tEn;5#=Q@470cf+9|7(*EHU!oi?^&BGyStJBiEdv2kn!=DB;jqmiQL zj`iYB5)9(>T#*DMBoRwFDKucjnd=u4pBK;xEb4Z$uT`rgbUMDLW5vb=O~NWRD+pO- z1KYBtszuW_%<_U%%$#Kg_5!&i?{Tc8XjY+Iu_SD$2-&ixRV)KnR8_T#idrm>u+=DK zPUMozX@>P*W6if>bu%Fjqe+9(VALwBZOUlcrZF_vF#M$ExPFugPG*%HawUm>iFlQS zhHy{{-G37Ur1C~9@)%_vKH?{}P_gB*Q7{$T#)>e+dV5kfjvW6VYZtL)NCit$OeBb$ zjOXgiX8{@Zs1dN?F7UHH(E}%H@r2|&vf*?BCY){sTXEZWX_PLCSq}z22Ml(*SaFZV zfp|~Tjx_lsWZUrw^22zDNyH~N;UjwI`k#;acz;#3j7IOp`oAwHqi^;-e(#Ju_fO^h=hr57cBUV_1JCp) Yfcd#_0Q<;+tN;K2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_224_chevron-left.png b/res/glyphicons/glyphicons_224_chevron-left.png new file mode 100644 index 0000000000000000000000000000000000000000..97c783b47df58fee42171b2182f7d33175c8fe3f GIT binary patch literal 1231 zcmaJ>&5PSc6jz&&FR}?~Le~j}470Q}w6-+zYAg#o8(EUGhIq5}8sb0>k)^RMR?;Za zxV9G>mK*{JT}s+}X=zS{6bd~QdI*H1v^4)fLN5IWn(Lmj8F_7Ip&>%j%sjo{d%yRk zJF6=f=Z>5?A_&4 zM>qZ^B|+HtpVw@$R{fIZ&>&~0I=NvGakLr0a!c`0|g35O{7GUQy~& zJu*noTi%Gt+Qv%L*;sdqE?hbfN<)ns2ne&mFz~}f82FWJQ{-3qTQx_R)(DEZU{kC zug?sJ$s|!cW#Z6|M3j@nAV}jHYbUHh-q3ifcG4V0L~M|R_G5?Fqq8st^W44L(NxiO zW_nRS_Q!F$j!1kGkdP&u6dE()%(ct0#|votCUyGh*P2;|{l4dFSg~-vC}9;FRfNon zjxE_#)q-K^MrBbdq|Qs{3rR^S!iBG~W)pJRw<^bnL#*;Q6jUih7?9{=`lP|0r@JDs@ZCg0`eQR5||Iy|)JofQ??@DI%+R=YM6W)9OsBrEp_`$OI RU_SlD)T|Zrm&)~9uL0i~fW`m- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_225_bluetooth.png b/res/glyphicons/glyphicons_225_bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..c12a9381e9be531e2c5ac396a8648047b5509f71 GIT binary patch literal 1305 zcmaJ>Pi)&%7DnaHa-3toBv$=z_6tdS zp-fb;3Q$i-AcQoK5Yhm37o>>;15Ioo4osR5+W~PxJxt@WLnk4P=QQamG0n35-uwLh zzVG+_^SQ-^R}W9kOc4ZexO_sZ;`MR-9GRTJ?_aL|dI~Q`k={TxzlC~62nogVn-G*; zqYbOjuvX6e408mLykplJs8M-cHhq^eVjZgQ1{h5cx%qxzn9C4>CT!bYp8V&#?@3@= zdGZurVJd+NJNAjy5Y|=~>gMXQDOu$FaggiF*nkU>0s5}vMRGq+4(!T!AB$-c3{=o^ zp4=tXs4N224GbjoB{76<~xW_UqhUj`h*ax{Z)A;o57UXZyg7+xgy7FsR2s+ESm z@F`Dr5DH|P?)7?9FHQMjn`R|RifwRQ3TvdI6%QHxlo!p8ENCz?LpwmW?}6B&(e%40 zPhzIKA-F-MvS-+fhKa%{qx(icvlK(SZXDM@J3>|XfW||$qxwn!=_-u;ZfN3qv}Q+O zoV!Om8Yx=lo?g%mok5(INka#^&_fX>#SR!@=JLtV#sxGS%{RO8*Rqx;yItFo1zs1@ z5+jI$T4GtPs0ccziDFjO6}6aQvaz$+zP!`6jqQvn!mth1&WLce)q>`oxB~cW$ zEH7q@BW&4=kl~pyb{b>t2iWu@v9cOM1NmXy_nlFzEOvb4M;$)^YE1wyR1DMhV!?}X zC5K#LXukoiQs}#2Pzu?82m^){aie8%j2sT1#V0Xc(z&9NR(V|)cyfrf_N8nTIR^X> zt7ipGVbU7It1L-lGL|VL8#!>;ql$xuJI9XuM0O0XjT4fxV9V$_h&fTovGhKR1M$A59cki8h_`zqh!1;13_U!#As*2`x92Y5@&2K#DfRxX=Fa{5 z^GSK)?14Y7EZz9)w@H#BE)vp=vXhuTw)y#!Z_g7KlhTYKCe+z$QsLP`VRrIlp_=^t zZsKPBx%GpEjq4ejI53lZ=G?gT{?@iqt6g4G$8P>Kj*cyj9en5SCp!O5e06@~YU}p- zjV~^}wK+H4YF-|ndh81E)F-#rQi;jwqvD~>r`L$g^QUX?y&`XQIPg*ee6*AJaQ)ra z!o~H(wR<0YsVyvh`|!J*!U6R>rYkX&8d%njDJ>TeL?%Cc>3&r6Dywg literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_226_euro.png b/res/glyphicons/glyphicons_226_euro.png new file mode 100644 index 0000000000000000000000000000000000000000..13bf850ad052bcca546642d8a65c06af556e6d75 GIT binary patch literal 1404 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 Z5v|qMKi5yc^_}~}%Sn^s$K$gr{{e`@x+VYs literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_230_moon.png b/res/glyphicons/glyphicons_230_moon.png new file mode 100644 index 0000000000000000000000000000000000000000..b81e3a3aeda39a4047f024a1cec8e4519270ec02 GIT binary patch literal 1364 zcmaJ>TWs586i&FO>jVp$SSzL(m!eKA@gBvfKx+4A|1 z&v(vuZk`_-9p2f|-Qn?gcBWHe7QJ_)XU~22xYGQGDfH@si98%P3$P;Dz{4x%6u{ED zG!3#qQf6l^f&q``&R^AB9_BMoak8lgCD$fc)h&efcm{^5mL!(|#HPTsYQ*qsAAgEt zsuIH|!WlAS381K^=4>!NH=2{@N^(@ehX%2MDu*2C07_U@*9?cN#_)z;4#}>Xz_Er2 zEXD9GQu)jnCYUzB!og5LCMgPIm>|_3W*F)KMw1jxkmzOtR6iGHI68tgFC0a)l>(O) zlg(J@6vK-US{y-CDwSX*6g2H=f{I3?t`C|HAd7%AYe1@SMKu^9=G@b^iW(?sqA8c%uW2!cm&>Zc zG2sLgijoY=2uX?(<2;j~MV5^S30{czlMy$V>tH(&X@UyElJO8phIy7`c%GsXbTpb2 zc_zuStQZNik$4N6HXJA!GH`>sSQTMeUZ5jl$i+tg6UzxUkf3SjOjB!(%2?5arc*R6 zOc-adzKkTRhO5}`cCyJ8*y{5@N!q54HCn-`w_!k1EE=>3%8^FtQ|QEok_kG_hlFq< z!G!T9R@qjvcIM2#v55#H@?=OP!vcj9h>Rk0P=y+3&M2?JrlhIvoN$_COrwGX6i|@L z8pH>uwOOmE%BJBA5bg|WDgrd5EiAFkV?(`dXj_(O6I`*qg6Pm*Vql=nwb6=h_Wk)4 zTJKwFkcjcyO=-xHuQueUIG>E_SAl~+zpy!XWkw)Uof;n?t7fm^3mEdPnzv0BfSk)_@K z!^_qi_WeIj)|N$XU+RU|7S88Os%9i#zu33=+0vQSrTXH-kFGsdpXpuCef!q}(;GP6 z`N@&d2SeRm&pIQ%uJ5kQoZa`%jiZGfuO3>>44*vzW$kju{_8J3Frjb$@KfmO2aAgj zO?*_p^jrPiyN1?B-ag#7aFYFc{raK#Gn0@1a{1ny>))(h7<{7s{@I~(G5@@Guk^>& azy;6h+7aw%x%9jHpGzl3#pU?qOMe4CHpjLA literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_231_sun.png b/res/glyphicons/glyphicons_231_sun.png new file mode 100644 index 0000000000000000000000000000000000000000..fa42801298c43684df431bd8946bae0193bd3bbc GIT binary patch literal 1319 zcmaJ>ZD`zN98VFo6gvi5*3F?0*&GwRyj_#ag=SqY$=OryR<38Q`a#p=xx2J^Tk>4* zt{}`Yhq^L{$WYuD1wRev7~6+!iaHol_F=vh2MW^S5EOia>58`Clk45B;8;lVJkLM> z-~a#nzvZ>D!sGpY+xiHC=+BL6MZ6BiPwzeWy;PT1@Uj)@lW5#8qq-47Lb3cQ2y(7b zfkkLo&HW2-m>}-@%`Q!%$^282>ARE>>rf3hz-WRP9%%%IIRg=xf)(47$=@%2N&?%G z$!GXHlMhr_wMXYdI6hY>nR7E{+9F5xfZ>LO4Y&{)py4`RBsFBRWmm%cSWJ_krGjQ; za-GyF^q66}z~3lf(C?Tf_TLaQtlwQSoL zKFMSip+KVPdc987lawD;Xf~Zr$2K@Ffi)6Q(?doh;YB+-7Bm={p&cOG_dsmXnDT2# zCNb0X5ZoZ2?;7@^cA{{~=!Ox{EXB~S8^_hsj!+TaqH$a8sMHJ~U4)Te3r$>)@{SG| z=kCsqI*OLr)eCB&(~8qFY3M)~dMLuA*cKzqT-q1fxPXSE`DQKtn$u*mR@>#Ox3HNzVkI?%2J*v_?>n7V8LRrpkE(tE)Nujq&Ksuf#ezrU zO18Pe(4K`>HuPQ4Dura>;s01Y zC1?th)EHi6Ng9)}ObOY@f$bhu9Ms-9cHAeDV|W#ukc0)xM$JLwo{G~9sn;Ck78qA1EFpzwf!+{PFOU#OJ~CnP0^t z$KRfqK6~Q+!UHFdpPAZzefHkJ($m{{BKmVTcxUzHufN*6`pDjgdXM!#yyeojS3h~h zo8Kqhe0uo@^5nsnz!z(?cYEe9|Ga-B7ra;i literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_232_cloud.png b/res/glyphicons/glyphicons_232_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..df0ef3821ad23d89878edc1aa6f3386f4ed8b6d4 GIT binary patch literal 1296 zcmaJ>Ply{;7@ss{cP(sDtFUPWhuI!n$YlQQyiCST*U8MJ4Vvwm4VV^$zMXlSj6452 z^Rmh2pqo}?MNn3H@FIdBf(I{NDk>JW2SKo>w)9kyo&*aXN)_w+CY!_sONW_x?|t+A zzVG+_o41#jPEH>>dWfQ^>B=diM%H8Gd17jUytAioNMy-ivw>HFHQa#_qBJ{LMRdi3 zO;khB-aP*!TA--(?@qme8`YOoEAVnK(aCkakf14QVX+%RYaL;F6*V2d$lU$vTZVS* zBJ+w|<*T8NTF$9ngjRY>b*r~-6>Mhl1ijEzi2)B`NOwKgkJWCG8Q4|HJ`r;aJy5~x zMP`pwqqvTG~j+6_cCMOgMg~Wy^vP6T8H+>AdtRK&gEEp)ZA}7R7;M0jkxEi!^ zks(a?Lh!HfouY) zzyk&7WkE1X8ZbpeQS!Q}>7{u-pEyel><1D_&L&vCB=Njl;(4HHf?$e;LfOzjSy2=t zFDv=d2wU-E41EhFP7|y%#%kq9VpTmt5C>5`2;5PtEVlw2#H}Et^%X!rSA~}2CxW@8 zl0&X2ayF1%jslM!ltOhL#z0U=qvc7AA_-q0Cq*ioVo8&9*))O746*jUl#L??|Hqnn zU}(H#@Ukv293f*{Dt54ohCQmec(`+&q)${A`c0A$)<$cv?PBIc)7=bPjurUv0+;ll z>kzHSI`~OhU39k03dWhZy-}aw9UL@1%b<$#`F`7+Sr1YxVx_?qYgw zX6nhU`v)H1J^3B|dP@7|c!QySn7o$#^S!IJ)N756{+4-=J%0V;35LD!%VRfxf^Qyu zD>akJJiT=(b?N!k_MOc3d4hMCT{hO-r0?voA39}egIP+X8-zm>WiJjw`Y%}A6%K3(SD=< rrmDwo|8X}p%^tY(YI^yz$tj*vK6%i)_o8+&`A1dECFAqbxeNaSn2MfE literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_233_direction.png b/res/glyphicons/glyphicons_233_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff32f83036b9685f090853563ec033998a3b818 GIT binary patch literal 1353 zcmaJ>U2NM_6gFCgXw<>R3(&q;ZYGK#v7N+rVkIq3?5x>HmnLDW#0!pnlbHCg_Dz#k ziYO%@_BJ*qZS)01r?Ho!sUTGv5*h>1J`6O0_JFj}4g_cj7!p4Mp^57>=_)bJvg31) z&v(vu{&F-ov46L3(1&5z?##HDNAJhbGx)&$=r`H=>$0bS(iALMW!R7%fC;Kq0(i!d zDVS|5~yfqg822qM+B~^ z3E~KorLuMkRJHLr2NdQeippF~iK)ccC?0R}$bkW%j5iJ4bopk2==kN4?5Rlt@0h?^ zg4iN8mCfNP%K8J1zMTbZV-E4r4@C?g`IJ|oiD4L^|`Mj9! z#zLnAQH9XvNwU#s1RLR?TeJ&$t9 zs>1|CTP=)eFbbP*}K!w50w4>=lYpsb6QQun@Q!~{{VYbwt& z5*v1Z@6a!iy<_OKb#g|evtFQ|vr?qDPL#PTTz$k1|%mZkSbC0DheWW6P=h+?&ZwZnuB2<;obbAAR!~6#Dk#f!9TKAzeb%mO zieF)-2QI%q|&std26_5Lj*3dQEv z@1Lygy@c;+@A4g+e`EaJ_JP;hCvyF-=lZ`A{7VnsoWEW_HL!2 zW-ea)ckt2p?VDk{b>FQ`_4dH`=k}gt)-NVr{`rP{>F5#co7U=c+=c1IgVU$Pjlja% z=L0Y8FGO08_n+8zc=&}wa{TvY-}SXC=ii(>OZkU}j`>fQiVv@`S5NyFOXBe})n`9@ zQa@1h|FH7owdF@TWB0r7@o#9#Mo+UAecPpFg10R?#^X1mmPN-XJ=-cEtzfDU2v&VoXni;4w;)X zXS74^(!Hw{=ioS8Z2 zpa1*+@4wBHV%|45TsahRasD0xQ~>Xn0OSk8~1E$46)kOOG^t-IxLpp8!?M%@9}KKSAJ@ znIZ0HHA?ekP_ss70#KSMl#Q7wBV`gJ+wgQ#LD%vvmyf*xi$j^2th6wQznT3nnS7FkYYc)WcP$Xj4eibW;Y z_JvLvq6VQal4PUNNHmfOFQ}4qDwT?CFiae2#KUP9>dm+tZthr6KxhP(4=vBdBa8Zk zSBDt_F@@JAoS{if$A~2 zxdTSIyS}52qG_z?`SrkV#c3KOuz>?y7$Q=1ixFZj?hGtcK;2e6qaJh3jHPIRHBJg0kn?omLsIdC&`Mo{!5V4v%TNVY!ju z?x>P&t{|}X05cbO4&Ew-XkCK=MGL6WcoZXp!l%(mNaj=~DqL$K z|HG<0r$|&%p;(zFNJPdoL})=9w0l&tVS8s=QJ;vm?p9Gk;wG5X>oz2|RqbiNW*MFv zrpc%WZ3_WfyJal7%3@2rs%bl#XcD6B$_S#v$`At=O>TfjwEx&$Z=vyC$}3X2`PI=E zoJ}9&>-W7kP#GHQy7js78%Gx&&qr(Ro%qnrm7k-$O-@cJE_hLW1^3U#*7hcMJxa0W; zW($7}UOGZxOS84PcmI^vVz1tEdgJ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_235_pen.png b/res/glyphicons/glyphicons_235_pen.png new file mode 100644 index 0000000000000000000000000000000000000000..b1dda09d82801261ea1c4287a519ec1752ac43b8 GIT binary patch literal 1319 zcmaJ>TWl0n7#_4-B%wi2T2y2*U_ip|Tz2Pb7cx6DYZu+pOgCX8#&kM!x;u7m%$)7+ zHYU`P)u<7a;Dd=#OvFc@1P#;}Y^pJW@Zcp9tt}5~qTquXLt>0)w!5W?gvrdDbN>0i z|Ns8myf8TM=(@G{t;H~GUA|w{(b^L~YgVE6{I0J~qGdDGN^r;@g*77tm~8nY0MENd z8R)>U8izgyeHeDAOiI)=Adg0HHCgZ*M&?%rOA*5m2_h4DtK9j|tqi zGQ_zQFp_GwzBOvJ{MY?VrS4%sBI=D&WmfBIV5dcyLkzWl>RFBbZ z9Wct>?HzR#EptgPsD@4}PRk^L16<(22$7;&j1Y5ae`uou8jk9l)%a^(%@Eb9ZAl!f zaVe4F1Ww7(w3?MUjZp=GS2S74rYSyl78_U&M3SV1uu3*7Q)yYHI9aA?jS5B;d(2e>lC;X4b4X?wBY z;kc4*t{}9>ft3q=7jKn9vTwnFq6O4wJc^M);nV0Oq;eXQl~W3Gzsx`X#~+>X^4S`CO1SQI<*k}jmG;@UX_dWEAM~( z>)l82^>UE`ml>7V{weeLHBCiT%$}YnpWOK6!jVnW=TH6h(2X54 z!HfIvIZ!&e`Kd$pwXS_Vlk>fA9e>w&c13fhyXS*$%0KwgCvToTGah>P^1od__40Gm aD|@kV>4(O_HCLXAe_eTPKz%PeJoO*cF1mOC literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_236_zoom_in.png b/res/glyphicons/glyphicons_236_zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..42ee6c9f50794f514fe633ec4bfba1bbd2fe57c0 GIT binary patch literal 1464 zcmaJ>eM}o=7{3id$N~np$v&O8V?)8p<1POf+5?g|Al zvMj^BE}1?z(5;8v!uAOJ40V% zs3f|v?e-uMjCnzeRMDk@+OEow(A6rqM6A3FEln`cK@=D~nuyAZ&LrGe(k}yLQ;lP2 z(!^+WWAmiK!D`g2Y5=ucZ5DwbNtC9oWQm=o$zqfuND3$5O#o!YbMK4Hu;D9b@Qp}K4 z1vNeLjcVL*W02{53ei|FxZqgPQ-y*h!xMZAC#?h?jhcBSt#zXYJfQJVYdzE%19%P4 z)wm|Wel!)N!LW9Z4wN<&g$27d&5RjDSvG^j7N%f+kO0%QJ$c!?su z$@~6Y~nOfcTdwbb}SAO|y`+>jLUAn)&t8cWZ>)^VK6Bh2p zpEBMJuuAxB-+{UA!ym26pWL`9Ytq==e(OeV*|j_0gqY$Lg~yKK15^JFZ8){rF;ODj ccihd7ASeQXnD7{6{Xr81onh|EN8$7IaV-d($1ujjh0y}QyfI%Zcx{X%Yc@7BxOyLxw} z-85tqh6BWaWKjs}MxvPx5fl9fbO=h!6k$#yengF*12qyEx<9r*e6MTA5($^P-t#{9 z{GR9ce067Y)7nyNxfMZ>(om3#!1r?Vxw!=Xet4-@G!F(JGg{O(BO_=4@kwecKtoBP z9Yla2bv`}{Y7wOPFF6`BV&V0Ss3z@#X=BeOQxJ_Hwe{JQAa(!)Z3XSJ;>9kXIEkUM zt({=#51O=@Ez zTp%9{p1fGxFj5STXEGUk#%WizcAWHhJf;ta!v-yEdZ%ItS(~D-EO_96E^2bhkW~dW zJqoRA+VEnK>1+zgR5(26Skd!^f+fSVLJBAC1fEQqdF8BiBLc3`xURJx?MwkY0(3R4 ziLf7SD+^#)yBh~87)s)tT`H|5a(PN34iX><6hnuk$Q&ccoY|nsuz^B?Q^mCTHN<(b zbXt}e%EePo4?)os8z4!}@1uAJN7HVW_p$yO!fggK9n1$pja`CR+T-whXs3gqe14MT z9Uf1B^HBksra8BZcKZw1kfIxcA_6n0iIuNm$s1xBRs({eYEe~96h@^vt{SQyS5qk4 zLZPd}f+#DdqT1|ao-5GgEkFurY7))0f|0MofFNl&Xl|GzOn@fgiFO8fhu`O9T|7^@ zusl|pSF%Fp5b!@N@1{5(;p7MxOJX=ABZ-V58wrq~QD4HyO9|PW6DA=j?XVy=3A736 zgn`wyCpuGcSyUCh7B^=wAwxh;n#JPtJm%E%hPGe{H^CI=RuCTMmKZ2-b2Yf40~ftN zB8X*ui1S6W-yG?;?AuN(=BusuT5fuJ+wk`O=0#POMZt#C>l%vw=+?&`cz@M>pz8Th zyld})`o(Ww>KNa9Jo#<;=pp^~yDeY5HMp>*=ZEoFX+?Cidu$iG@Y8{prW=3i9z8~H ztYMcl6n*DoznobycI%xB*3SIaYiwD5c4GK7cCzy$W9rN!+xE;n^DJ7sYsDu*+r)`` z4!&186&haJ5SgkvGyd+fl93?4A>4baDE9kpSE_@P5B*!W|7Eg=;zL(HJCZ#2@aw%- zE0@Mbn)czZ^s!q-;C~f;pcNm-&xi6PXGN#Z*lim zJJyw*-}>>Rjhl#HCd+TR(6A;glp4qXnXJiHqz{gtdiAhX@XFC;2POxn{a61ki+o+V zd*Ji3;-Qm=GZm|UwLW=laANw;qkY`Yi~0wftQ7-2-#>?2N|5uHUu;}bc1SV*H$!|A KchtZ6ss8}3*7GU= literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_238_pin.png b/res/glyphicons/glyphicons_238_pin.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0c2b3a1d5dd4f1e37db941aca499f75a89cd33 GIT binary patch literal 1310 zcmaJ>eQ4Zd7!RwQW3*^Rp_?Ef-5(X2&uel?xa-IzIeVRVJ+22<5N(>gcNZ?n8Oi;pf!Lwoo9kUya4dx6d7nJL z=lMNfd9qTzYh>SneFQ;_6laVoekbzS-V}a*GU?IywI7)aXdc#4$BF=2B4AK4T>|OxF)Fnjo@=x}jya03w$_!wquO<#*R8(sgpw zJz|L~g*s@uGb<68Un$q@m6okI)S+oI+f}gxA0UhD`d$#L-5k~Pt717(vlQ7gL9HCM zO=_W3A$1r5Qe@J!&G9@bNen+FN)kUw3LG!69KI!*pHf9h6*6T1qHwgxsjF3^(2s>r zIjV_JsIqLQ(_uPk21X5*R}>}jAqX_KpyTBLSzS7a#|It^5ZjR(A{Pc^;?Y`yZIq)h z)9n=euvFS{9K`)X;gYdkD`a_wV|_o#t7jdfD!5AHn$~e`IRtDK#IPONxF7ZL0T|cr z`hf<9j=f_Swj-~Xr(?6g13m~)j7jl5Mwq!e7rD5BmS;e_oqR1CIjY@u9aR!dDXnml zEa?TFH}aZf3Wh9abW_vwQ(PtqmN?iA#2UuISXmMBiky}>Nz3!RDJV+8(4>Ma%SJ|& zGx-6w7{tg5Y>)&^uwT;K|J`^3R_yJ>Xp2IJWld^Bb=n ze6KmmpW3QiS>5x(P3P__?Oi-SJN))zsUcyVS$gI4nfL#F`ozQ$moOjyq2(EG-FD&I zJAQojh(CAu<-eQ5&!j%T@Y6I%$2Xtj@BJvd_T}y5(5Wk51aIUX+3ZxF`flU5ucpes zUo2god~+g$=$CH&D|O(r@{J!Jey5d9J@LnLa}R6hPom9R7KyQu)q}6s|B;eER?#dQ Jr}K+P{{sn7wMYN} literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_239_albums.png b/res/glyphicons/glyphicons_239_albums.png new file mode 100644 index 0000000000000000000000000000000000000000..6c6ede1f70f767b794f52f81fdb51fff24385a8e GIT binary patch literal 1327 zcmaJ>ZD`zN9FGp%3zU|db6Rw!S*<#}%gZ&nT-I#nlH7W3cP-aDSNFxH$gyqP?= zOHT&d+=q(D6j3RIvI&zxVT#J|WvtF_V)4r;f>v~b?1LZFipUtu4?elxbp^*llIMB; z`Tzd^-~TPI4j1-yZ0X*DVOU3QP${DIQS`(%J%HYW8!z2J%Og-7g(L0+tZP2NB*PsC zc+S=;pa?W$>ZL_6fMFZ{G)tp!G=D(QT|1#gI*HKs5E{b<_J*FOPXdUKgNo^h#L5@* z1a2B4agfbZc~1sabFkrqkw&4UHzxJ8LG0aw4}=0TU<0V(p=~*V5Q;?8u7LKDm?ZF~ z3Y-*)RZ^q*VO(~7fU}8YT&HLn=ePvj&vG3749-wALsIDG;&i{jasrdWTNi=6`No7$ zRI)8!=p+(V2t9!$>-Bn~o=muYg{0HzbYz2J;z%PNOgT^s<4&-%Z9xHn?wcMoT?daW zYU6GViUeZ18iMWR^J|8kpp__;GBVUWl1@;hZAWo6wF6iLcWB&IJ19+gfGmQ*t@%2t z$HdMy80GHXj@pWbzNY8Ze5)C!p_9M@HgI5oNYPD3h`BK2o2Y=ArMP-6`kGTjqE<5v zfn!xJnWi|Nle09fWF$^y6rNAXsw8LnsZ``FGO!+qBnbmy`?(C2Or;fylVqA!nRGg< zNL-fZc_qd2sZ1N2a{{P2I*6P`So026z9&|YeV{?tFS)MOZk6Gx3*DgVdbm8o;ZNl? z-E<nt|K>zcN$i6$Z1u8kl%tPL@6(B%4PM6W)4U=fY?_c=u> zg+E>_AM044HtnC=ajo;hk!xEIX9~-?<&C?0L~T2K^7jqdQs0^BbEmWT3s0P-3APt| z_S~^|y1ZEK#`(A2=oG*FH1_Ss`Epuy5vr54XL!`SB}XzY<${(7Ktu z_}u-y-_*J`mwU(frO$dkn)_tvSGGKT>QZU(_{rU8ZoT{Wp#@D`8oM?B-s_i_f7)7j zjGz53_E7w{(yl8z-agb>7IwY7@_hHfY0&rn4|8A5l)KLM{M>!B_RDPa3(Khm<$PxB_eN5bB7%y?Sfdi2kB15-QaC6h^#~s(Zs~n?uy@SIYJGpb9goV<+Ktr#sZEttr zXD}=yQ?j|3kfCHBlEpZum~7E(M4kI*GWlb=5n0HlMvT$SKXj7?xB2$CVLrq_M6be@#AuAO)d%t_iMX@Ofm_{qX%j?al?bl$wDSGpcr)NnQsCE2ENlj2GIyoy*Z`vLJu&}4$vhjUhL14 zUtp*tda-6_m<(%v&@I*X=^)zI7!&$>1doVqu0g9)3^Wi2CXc4#vSKhPFP65;z`Z3V zFf^@V_IR;HQZ3;K>Q{AuI&p_hASnu^X`HHZ(lqrHY9}c>LBgB1QB{nSX6!CBb79b% zE_O0aTrlGcp1fGMX=)5XB$G)z>A+RJi=aFnk7dJdw?Pe?(W{tz%BC0*uijheaOc{~lHG;xPA|AKmN^2Wt6Sza;uG&VdR|7;7 zFw}%Dz6K7!;lhd4HtnmM&CXZ&k)^;nc#`C9RwNS=GXzSj3^d-0}&QF5-mc)n2k@-%+( z8DmAay72i+$@spx$IEkK4WST1y`43;05`u^pk|K?R5u0_i)4UL?w#mnm5xbxGT zyzTbYeth!d7be%Wvk_|7y6ZO!YwDhRyCL|{mHlJSesjonGg&gZtLMz1`OoPm6Dz8R zAFS9rFu}dKXTf71X`Yq1V~1lme#mdz^2+m#^mipChlU2GcK3g@fgasAuhjqW_q8c7PbH=H?t?&$HJqNis+x$y0|zT8!R zz58D7wbE-JHjZ5H4E}LLTey1hGP?uI<7URk4xV_-adE%1c?PXH(e_U8N^9Bp`kYI1 zKW==Kimu!%j1}JQO>O_`$OmgjE6@MdI^93BX1<{E)#-sFwVT?0S^L@4>|1|7+>RuN Vh(6!&t>e}&G!$s$j``aA{{y68_A3AY literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_241_flash.png b/res/glyphicons/glyphicons_241_flash.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc64527eed90f95d4381f013a66506e79a18562 GIT binary patch literal 1308 zcmaJ>U2NM_6!sX}V4?^n#Q%`-m;_Seza%%d)vU99ohHzfE)8lxTQ%3dO|1G4`-Y@t zh=MAiP9O>`Xb-?kfjtaO0)*74LP!V(gYI!JXfHg#10a5$CP4gLr%9>AG|Rp|=lXo- zeCOPAyfi*GGO+LNeH29vl!~xI-Zzuy&KvfS^{X#7C&}wBY}D{XFoRoWgecVxrV(B8 z%sQ$d)1G_s0ve*I-9J0k8m^T`6)W&qGqGXYUP#asH8k7~O=}imdK%RoKhONK@d-ma zcAlBcmicn1qlQzQkI=;YSk;=JwPc$aK1>g_72?1{*reN@>&Hqv&vgANL{7FjhVGi+ z**vpFs#YGS^&moYmQANDUJz&iSRs=IKp3P&UJyB++#n@nlq^uh9NoJZ5-qZ4lnN~L zVi7IRG%yYoj%&4AY%9$MQJoWHSx$V2Vv1O#;yE9i?UWxM?0bMHwjw9QPT295f?~oX5<; zKA6<*+JX9pwzX{+HY2y2r)_b_MIQ2TOh^e`MufTYXylLsG+h{2&E#td=9y;Gu@#Ut zKw9R31oVO+KuraP2qh_}8>+5l_*@b!aj+9ec37KW^-Kl;4H`U9bwMyhSuQ{o6eLN4 zxvZ4a`q+{mW7D@#5;Va&1e*aGpU$b7Yho2WLM9HPY7n^nRvB*uIEWiTNb3`Tez0s> zj-PBil$>ObD~g<_kX?uZkM16Y;#`FRFG!@(awJEQq%ROnN*4@KQ`36ZFhG{+VeK6y z>t{{?|HB$N098H>`K&H593f*{3U;uIdOfPTxF@+z(kF^*`gKx}l#OQ0ri+=wb$2do zI9A}tLtN5>u0sG_X$#Bk@Yvnn(X@R_G6{*eJ%U8p9%AH^$&Hc`4ON+p_h%)jR@>jK zuI?IGwFArZ?IDI;L_44#Z;DAIvT&U{`C)V^Pj<6pBd3M&Mtk(9C&L_ZKSij{&IBxZ`$#-kB)5! zXXLYQu73#|ohRP?^}ToQd*s>gPds+z{L1g^f1mtoaQ^L2Cl_{6Q_R}y=gyybF8N=T Lj4^mlJMsL#x+StH literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_242_google_maps.png b/res/glyphicons/glyphicons_242_google_maps.png new file mode 100644 index 0000000000000000000000000000000000000000..94cbe5916a2939216c1d3af8e02a425cd24d928c GIT binary patch literal 1353 zcmaJ>Z)n_P7(dsp*mEaCi*7nFq(kQBU6T8g%Z1)%F3H)`UTv?pc{mxS$=kcEN!~1Z z&&w4Br`rc%j8Xk3rXJh zee(RC=lA@}s{{Ryhk_3T1A#y&*DDq9x)DE{?(D$tKi+zA170>GxrBz`2&yR#2nZS+ z21L$O%Af!gt$yGO&=Ux>{iYX7sFd&HRcJ;OUnk<3Hbw^mJ-a+xQAYtHhCx}k(&V*| zr%6KB(&W>LJe{{iP|{n9N;6T4#y1;g;(UVTqe-H9k=UD~ zjqn92+w_G`X|jTl%~MpZR*TeP5$KdDCY4J0Hloom)(E?G3n^aMa=Tj=B;cx!ZX+F9 zgl|z9hEgr-c>kE@~Wq5`-{q0wrUfeJ*>tw5U)hgf1; zUQu<+7d+xuvdI-V`tv}`I?yBc5V^B# z)a{C{Ld)%;{2nxP3~20Du+$oh4e^?$ZE503@VBcYh!3kn3@kjk4jxfBbM{+2-oNK0 zq3F#Y8yXB9rZ;R^?0mg_%S(rHZ?tbE?&$3G3gdJq_rs49%Z2$JQxE?=_t*U1nwu)m z4w79j+;!%$uh#FTK7WvS!kC(Q^2~l`LT$StEr#ydRtk1pT=(_82d=c=U7lLld?~+l zxxPHEU0&RH_GFEp_)t7?vP1p8`buBHDt@;$|C32w@B3(S;q=kzb;}oo8=-}NudTO! z-t$oVub-Yf_(}JU***84`sUca@wqGTNO*3r4I0O%k1QSE=bgImy=4Eh@BXs??bo(n zLZ`0^hu=KfwQ2iR^v;EWgOhuMhl1|dXS2`LPL$4H|FUc5pH4cEom{F@@2CFse{MOs LU-}^P+{^y~{3yw; literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_243_anchor.png b/res/glyphicons/glyphicons_243_anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..12d44ac6d688fcb433769bf91004bb0bb4a51672 GIT binary patch literal 1392 zcmaJ>eQ4Zd7>_!~=sf0-vR0(TRNHEMmyhecmkW0-xg@vU*6aFltKC3tn!N3W=8~Aa z*IuizZgb+GbPC%XOy~X?_7C-siFIzERSRw^j1@oV6h%-}s2#)U5M=u1de;>k3(4hq zpFF?k`8{8EsH<~ppz6UYf*=CvZE_EO*Wjmi!+QMN+`Rmxe?Uq<>a~Z^nCe18)a^k? zrt|7B?18F2{>()fCy0BNjch;a&vXcyoe!zLO{kc6Fq$CZ?L|k`Mj#>w;jm#PsH^8c zq)0>v-3N*42`WCQqUz9Wh@ta&Kd+LthkD>G8n?Cfvf~bFVJZMpzBZt#x@re(o6fP--rHG<{2vx@F zYf4th90UG`RiZ!^nXt@6B$lEv8C?^QflOGQQPD(Y$u#^q5lqz@#svxLa7Znfh-w=) z$DN#^*_Icl{TVb33@Aw}SbB}el6uY1RxI%*_~Pmc;=}3^Lkn-Ni&vCB{PhKbxT_{D zi`n9prCpx~J|XW5%-qnQpPt)L`*6K}WcsDeTvffk4m70my|8$gKsSuPA6M2feRbpJ`kCy)BZqb^qz;_hG_~i?+0@9(?Q@%mS5N)(*Ww4= z-w499O-gf%YNo!cZuo8VfgR^goeZ39+&dUO`cQH4)2WM(M&CT~4)N28jYMDXnLcs5 z9XsF9_)6X7ec$e$`?sUzdhL5V_g-q$j{k91U)sTa_IfV;#_w&@^}moKKVP1{{_*$o z^VP>|FD)OOKX&znqWV!?|Hgso=e|1aZ5bebr09cNCilGS{|Ba(PWkQR!2bULjtJFT literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_244_conversation.png b/res/glyphicons/glyphicons_244_conversation.png new file mode 100644 index 0000000000000000000000000000000000000000..9290e499e5d0904fd13b4bf923358c3b5d1a9d2c GIT binary patch literal 1384 zcmaJ>eQ4Zd7*AWNUDu9wBB(=%Sql}teBAYNxzOvDOLFa1uj_rNC(hY4d9Mx4B{6x= zyLJfss4zEO=Rk&nQf9>}GUhD8Xmw+{f?5=+u(3Zj2g8c!hX2i~(>K?)KYb6?GIqda z9E}jGq_T+tT(lg32g!g>r5OfiS(51tvMlpB?xz_)MWdVbF`ayn<^3VNauFz+qviON z6syESrwB0uq0LiNu~;OF0n&1YDJC2adp`VrAF}YdVD9DTbt}eBR5eZ0*7nxJ~1Z)^29Z22={TR>4tG zKXO~EU{t%i2dWxs>YANhaEx-Eno0o!f{RW(R*)D*_J_kU zNnm3f$4Q|e7m8M~anps0sRA#kht+Rm>APZi(E$pyoQ!1|)lnH3v7qISST-)ES-c~m zsJiJX9`!m|;R+o6C7{I|E0333!RvQmKrlTrPg^YtJe)})e>!jC$6m^I;<@*Fwy2ZXhqusGaE6irX?;3 znbM`%r}j3V!&@d6YA$XM9cksGJ%ba6e`+xCEf<@AYj|zXmXkHzKlh&Od*V?0>DgD7 zum5}X%;N6v`vkGIeqZ~|4YBAB?&aSfYrEn9D!g;U@$5a9|7xa_Gi|jm?ET||h6DFs zPQ2f{$9SNAdA@yO{>qnEm6gR`doFCpul*x%ryh>oM@%jIKE3t#{)Hpo&V4xlZ2H}g zg?sBhPo6!0PTLsU9E*H$;lRwbh3}qra8v2Pb2%eTzH@MAs=kK%H;l~-Lr2V!|Je=vwybyaK&iy{`=x`zjPuxxbHupsnvi0 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_245_chat.png b/res/glyphicons/glyphicons_245_chat.png new file mode 100644 index 0000000000000000000000000000000000000000..b818814b67aeffc3e788b2d1d823860fd065b61d GIT binary patch literal 1325 zcmaJ>U2NM_6!ua9ZAW3ENR07fJgE$}*uGBeI3{W5*v=ZZlr9allR(V1ZxgHjn|;%y zMMww%Vt@t@R3I_I!!|K#6pF^5#2BDSh~J5qNvP`!51>k!Rig zNERHu0!vUgXODajGX&9f)hbV*iQ)mt@Elr?Z0LsLV>Cfzh8n(ZOhZIY!iwc)snsvO zqDafkQsaD)E&2+qTElYz9Ge>{8*|e}+N6dC$xK7S4jhPdvfTnGy`WT43Pw znA+I^szQ&$BzNGFtVJ7gjx=RK^5yS5Y@C zH&Q$pon)IU46GSw<^#_mTSp;TH(2=g8so0p5v;yvF6^gu-i@z*B9kxv6BG z%rW49SS=-}GMi9YUI7$?$(V+OEM&uWkIFV`OSTpDiDc_;1s5c4!YRFGBWkc>&-zu% z@Z2!NL_KI*7|@c|vCJlqE%m0R?O5VTh{TN%#G8#FhAy7m0FS8o%#Zzeye}10x!hR# zcwXBQvpvIaJ%3R?bpXqwJqxj!&zAWsv7x0SZ=O5Z^ZV1c92*~d z1jOa^Fa2-qz3+6llYDXYbNan4cO*YLe)q+mC%blSoqLMdfB%Jlwr|Va`RrNl?L~P< z_t2-W{yOl`*M|-^o3A~#ydp0QoOq(Txcl1L(Z3!)bKd^2@!dPC-@H$}3(I@De%rtM zm1Tk*xN_p2nSYm8<|i-zko4 hHRf3C>|pG6qIvMz${&9>zm0xi1#LwAAb0q={{Rs1w{HLd literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_246_male.png b/res/glyphicons/glyphicons_246_male.png new file mode 100644 index 0000000000000000000000000000000000000000..b33f066f9310a643a23cda465922ee3bb3be8666 GIT binary patch literal 1383 zcmaJ>eQ4Zd7(ZK_Wwz8=a9!78miaZdyL?=e%Vl@la+jPv^=iGI?UfB_n!LTsnoH8; zz4qEa1UrZ8l)A5fWXJ{%tRQpMIfWHl!GHXtps)=U(W^soEo&>HND=kT^{y*87LvU0 z`{emO&+qxlct`uwb(@m%+{vkASwxUBC*%Qh&bVW-&-hh-ah1l8;V zSUe|ZKoZF6$l#YC{tC&4Vv~M4X-m|K)K*GoShX5B5)L2v!G@g zm}^n)GxIQvBc^L1Sw>?0L6YUzXpEx7h`>s;$Z>(FBt#>vWWaUi8rTR#5}%5&92JOCTmYd3k)k9z z7>tPm8{;@m3@}_EQo+Uz2g-&5T&FHpyMyKKiRGg3aj4M(C`KBEPoWd%k4bby@JAU*Vi~-Q zRX3!p5;+3=4=V*&Q6T*y$wVofKx9;fhZ@vDxkm*ZmUp`5_6e`cMg}FstAc(xuS0xa zMjx@VnqnGGh;VyQ*ASqzTf-6?ESAI@nzo{eCc)jVk03g%4>2&%uHO2y?!sHoEORgac>nd?cVSUo;0WY0DBzT@Bjb+ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_247_female.png b/res/glyphicons/glyphicons_247_female.png new file mode 100644 index 0000000000000000000000000000000000000000..dd44f1e36f66e89a1ba875b035c22b127f4c757b GIT binary patch literal 1351 zcmaJ>Yi!$86b`h5P-$afFpUC|w(8ifeX}Ih zc(jTTNM!@0O=Cichj@q|1F8Q2jZK3|t0n>B$0isM+HH z%T$#L$OA=dP96t?fk4kCqfms!>~=x5tAyg~5RIyX(1F0<)`p{~698i4pki1FeBqn# zaLmvW_*g7UWt|kzjiD(Qj7|*~)Ts$IuHjp^V1o?-8K?rNV2!G2c|s$Bx9tjO?~6$s zYpcMC1inP7n9X4++XYyRh=f&&rZJW!=xB^(>BljKq8XAxHyfs-LW~s{4(nVv^5$w~ zAupvnzR)Rw>kv8uN!IIiq8=e^w?fkKc-*(aFkz$-_L>${8ez*D=vt6~r@Dp%4co$e zi^{lNg9#ilT?(Ph(yIwG)^Kinkqm8nxNC8q6s@Y)A0L5FcqtU5)#%xS*e*2-%>G~ zj&7*7!!8_Ed5G z@n;^(g+_kdbG;Ee@f-H@U9B?*HtaSBHXNIO>&1UR7-6Eil1XUTlamt{Y?7P*QR&n&c0Im*j#(A zcCP%#`p;K=GS&ClotNJyckO@q(vi6j7cN{sLhl?~eEP~?;lqJ{=AT>l)6p-k`oFe} LJS-hdmS+9~f+oe@ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_248_asterisk.png b/res/glyphicons/glyphicons_248_asterisk.png new file mode 100644 index 0000000000000000000000000000000000000000..b993a4a5310abc84120b2334be2d2dbce3ed82e8 GIT binary patch literal 1281 zcmaJ>TZr6L7|w2SsfBs+0v5%XMRD6su9M5enJ$@}%yz(8$Jv1{cxyH}I};|!iOGpG zyY$5iVjo;86hu_&gJto>3#dg3)fZ78l)flp5n7AI2XAjGw(2>vGus7ALy~jOpa1*+ z@4w|(YjL5lXYU?{VG4~ypiS0W>9c!=yk9(aSAi^dU}qUGp;bI^Q^;68T7hgMa=Wk% zU4QM#FJOgXcKsT3mhp1)LDNGK?@}Fp7$pSFFqQdX;(C3E*%jCg;wtysnU6U(@T=Tm zwJA0e8}@=j>nU7XU+j46eXs0u^9R|=&?E*Th+TFVg>hyMtK7)0N%mAMaO_A0_p96% zspV#iwNVOLl~;K6okQGzz-B2rCmWPm&??KEEkDJFzcoQ)GjQYH-DM38tqxFv;DG z9ZeK{Z(A?P({L20?+Gx35sYz0NJ%3`gt_@p8ju3IAwXVEzcxUX%k#iDHPz9SvZxuF zU6&+KvouErhN0VzW!FlgPMuK$JAp*P`vj{1%TRR17B$O}Bu6fn>%h|LhG76*HT2p9 z+lVvl#vY_jDK@x+eX}Bys}yAJ)+|V2KJ4 zRa@c&LdN$@9N-X+d(;Z?cozn=Pt4GbyCfk+AFjH2h`EE^a4qQt9*VPyKzlF@2w=3^ z!U{Vqj>J2fcA`lpfo``)kQ}y$7{+9BQ!=6#E?+!H#`~=XusXx<-aqklVb?voor|~k z7Vw)JpS+My@4GoTZuj^7^W1Cc$<2@KmtJx214mDPW^aD**U6=Sr{7gd^Iu(gc|Skh zvwpXKcoRTyy;c;%ky{kHy%BEv^?{PiWLw7>`>mMHJNA>cNn@Qo%{`k|vW0oz_f}u>(#m(*b)>F_XN`WSit=lQ+&x z!GnMBPfs2^30^#jh#=@egxx*5u!p^M_2yv@URJ${2;DE!nX$0NkmSAh<@)SiVVM1ud8-ENA$Sfy!wq}eXq!!Q>tP$ zHgU_JUrX@P+Ctr3TXhQ_H#f`9bagNgV(PHnFo;sUTjct7b=YTOfn)nBbhXHBky@@U zvL;C|tMGEp6%k@pl}FQxs-lyuBqB)=;Z}2KT31wE%Cm!u18<49qSvhQz!#i~T#M3J z7lcly!*^t!BuxPo3WdyuB;`OOm-Zs+baPQUIkaHm)J^=D`XpjAi%x^IX^{h_TOovT zwK_5!rGrF4%7m^H3y2qmFwElWYp1k^ztPxHJFWL(EYxsH+KCJGSeYDxA$Q+*G*tB5 zkzU+Rf_|KyE8qZ!IHD<#LVZTSTtA!mP(UZJh}+J-R;(h|Zu_3DDz+*YL{(GGGD23# zP;JT5w7h8>W@%c?XU;MM+kqhAJ;2JAp~?AaQB(~ZAzLaG%9f#)HBGbfik2@8v6U#L zPUPauX@>PjSh@UNtZpXQp(Lpj5)4~qu|+6JTO?-9C6%43I<6mOf)iOK2V8ODU&dZJ zAtBo@h3@abKtvie8qm*65I%yFCYNogWXPss+p5A1u->+m4I>A@|FCvmwG2_VM8!m$ z0AxH@r#=nvpht~>4t9Z`^@$!hQ4_PcS)4a2w4vXJ^=c=Ev&H3 zVqd(iX@{CH3E6fuf^ZlOF^*tz6ByCn>^Oq)Zd5Fz-hJEny16+w#{d5M_2*slpUjs> zul~Fze*Dv=1M9~YbCdjwGyCd4+}QW!_Vw!hjYsdfhr6ae-gR%D|9H^*Yt#5gIbM2Z xJl`0<@Z_B`ac|?)o89YkcOS5~E?*p*5Sd@EOsz+M{$0xcCKY?ZdRn@4?LQvtfH437 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_250_snorkel_diving.png b/res/glyphicons/glyphicons_250_snorkel_diving.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd2bec92f9deb284d28b9efb95ec577ef145980 GIT binary patch literal 1541 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 Kp$|D%H2nwBvLXxs literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_252_oxygen_bottle.png b/res/glyphicons/glyphicons_252_oxygen_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5edd2a7df926929e75d931efbd5120a62a083f GIT binary patch literal 1271 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_255_boat.png b/res/glyphicons/glyphicons_255_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb6c64f856190f227a0b5bb827d3d76e23d425b GIT binary patch literal 1461 zcmaJ>eN5bB7%z}8`OGAOY%#HP$VT+8?H%pibsTVay@QK8Ajc^vlTg|hu5j0uwkLP! zA`Z;d1YLq)M3_?&{xI1R)NFoC(JV@)4&%f{P3D%&I1P)iu;2`d@$GTPNL<#mec$)# z^Lw7(^VOG{8|w>lcjqDqQs8f3gK#Z1o_n(4`^tdx7F>4e-Zs5O?$!r56(BA_?gFSk z%JqOC;Dki~IZ%xtS$~P4HoYxyfZ^q+nKN|E@u&jP2vS`eS2(^8=x7({5hW+K^2t1g zih>hsr2<4i@qn<{FsOo-!Nw3j*vC5rthNTNjx*3e6zCipk47Yoi94~RT?XzAF^-{0 z6}``iZIWsWG@~9_1t?{`k93L1MFb`PGvf6`_4u`|AVX>H?hDl3EIu|!d+Mcup7HGUGD!M33 zs9}-ol4H6PgG@I=h$?}=mSIUtB?_htk8=u6nh87_HR4KYYkCmerg2AYEtF6I9t4^k zQ+ZgA?mcNR%-!7`r4L6%4?eUQ$>vqvz3v0LAJYJW_T}9XoXNH08KqxT_5NoCE6h#vhLAzne zycUPU$GT{r-EL=Xl-=e|WBrn*a}o~>rv_HMjjg&Xmhq^7(`7Xz%aL@eG>2tf*21!a zdRl07Ux4F9$q-Z;l}vF3s`xYze5xEplciw9J1`(fJ7jHxFF1;fRiu zcYlo_8Bh6HS1A6=2agxT&Z0Zb6!ANu3=D zW^m#xneS~&C|vie+RLs$0H z*kl0lSA11d`(3=gaPOI`&&-(URSH(u~6mAi(g zOnt#j_S8h@wbK1-SEdDeF6U^dZ2tMVAIBN7O`_uJ~)>H`Vq;X@OD??v`?9LzQSJN9Hp zRu0m7;QBG<;E|OVZxsA-%yx5aVR5PS)|of6dYj&#nYnoJc%^-P`1BJd>RnqnuQ+G< z^TmpV!jC7-GxrxZjdw5pdAQcBU#AQ W(GsnF^1?~uN9y-BvM1f0hyMc|OK99y6je!LOz1!jU9<@SRbIp`nbFVEXoSa(MxS`V<2vIh8AuJ0rRN!8Nl%sD zWIn6Xq|lTm^`g*K+fYi$q68YqCQWFIlSLs5Z~CFsiv&X2P2Eibfdq0jo^cEf5t80} zSNGg|?oa0y=8t9eAJ|V(RHi&@RAD^;&)Db)yw}fP&%p9JG3#UzuaLGKBT94eGNQ|Y z-9S}jyWRJGK~og9=U=Z@C-usl>fj(}r#iV#5CNK^re->k?W`g~FQbMR7MZOdeq?CR zEixyh3Rj7A)bwV1FX_J{7YJ-B%&2 zMP{2+y|O^-I7YOT6SEG-^Rz7I_(@5Y`6INz@dC@iEob>jRgzU9PY*5zyv6Q{S~aYJ zFE|yMCLxi^vh8*|*A{a)Zm@izP)KbELKZZ#NjD^RCmSZ?Lkk8 z#)$?e={&;%8P`#XM|?EsQOzfVo$sZ6qWX5&fP`dSv|_h>!b~^(Zq)P~941q2+Jn9a zfc|b9%kHw+7w>A?p(ad1y4@K;IP45D3Sn|%7*XTl`dt|B@5+W&>->5BvpX4T?Bx&7 zZ;XX!FSut9-n0H5&3`=h$*DcZE*Qqrx$*AI>;wI)x3+HFeRX8tqkUf=T03!)&aS<( zeCAze^P{7s*|`y|{`17WjirsB67BoL>zCC3e%+h-?VI^tEpfkm=L_*Pn!Bles~x}g z(v>A~?vL(c%UpYO)iSA3dm`F=^5D~pi?@$_PW?5*c#WfP+~yBCmwvyqb>s5;|70)T d;(B{uqZX!59=^YEW;6XSmCbqMa_Q6uPXQ$7qtE~V literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_257_sheriffs_star.png b/res/glyphicons/glyphicons_257_sheriffs_star.png new file mode 100644 index 0000000000000000000000000000000000000000..b99fd0b81fa39fdfd9d543eac77d3c3d703e4f47 GIT binary patch literal 1431 zcmaJ>eQeZZ7_WL+5SW1A$0mujmk>1EwY^(=z2=T_cfH#VxN&R~_6Nr6+IM%&dTrPC zw%gP!+knIv2ob|JMFABGOM@-}BYi<8?LViz^o+2vQ!cefzUr*T3$4IJn?X`i{Me1$ zISiFVKenBU5iurr2pg$B~V++z*3xnQt zv4ySYB1K>Drf1P$pQxqL6b0MU)SZv;~ViXevQ-)`G4JVxho=#hF6|@br9^9jGUu~nYQv-NC zFw~4LzblAl)j3*Qhgo0Is$8u&FSO|m?rwFlbilHc);0QVh zOBQx{y%8=zM;M0TJQU*zmatL9FnL7)mQxEW-NS|+h-E`M;7wI;R8_guD)E$RszyrH z&`<-7u8r}6q*#LItx6WT0$pkcVnkQdXrUCWbRPx;$w1Z~7^4e@Pr?)9j)YyofICEm z!!(5zvEqW1l_H0L|6#)(nhOwaj-Wy$hC?!cWV5)FC96+ZnOBl9Ar29= z@EO^})+gmoEhP!6V)$^Y2W1HY3cEQhzQAHZyr5}Ins5@V?feMB!~75f1x~IGM|AQ? z|7iqys5;688nc%_-qy3C4_&&`iQ1W7I}@zYY`Gr$>7YlmT^(I zJ2PH!<<*DBYU1B}cOC0LKV*M5esImrBdOux?yA48{!-POTf5_@ug-pO_-)&!=LXj$ z?(E6eO!Xz6S+r!$!2ap2$>l>MpUuX5_qJUhnBKbS?vk&UetzQ71VD2863Kt^zjhCe zZI}&DL|&Yl=waV{|L!Y4Z`*Ra3!P<}-a4ASv+RvyGmjm$U&^-(4AnL?BV5hyv*R1qD?VDbe_w)qL81<~2QEqC#tWZbSXKGX?;FUzPinv0@zieHwbeh= z>8EzynjZX8o%wL%kN>u>yy>~vJznj2>BQ}k$<2zM@4d0z_qQ)~@?u%e|Hmj_rg3dl vQh)jQ?3Hg1U5MON6i(T8SqfWU7SWYT$SUaSOnzo^ClfYXW|E9M)ET$4DX!K^v&r3=bd%gP zx#MIOE!qd6>Wko0tx^SxAoaxx6$L4_puQ9;2yJ~>3QAvE`=n(>w)f7?Ocz=jlH7Yw z&Uemt{&IZ2{=)dq$(;Ijbv9(dG8cvNNel3@KSfqtf?9 zP8!$3I8u4O)9GY8xh#sCyjUz2sSQcW5RFXI4Y8eO!enY-!GMVqdlB|f$Wn{;5^7_O zBTP3#2%=hTXgEyzi6SZEQ#<0ttiT5WjjN}f;0C-$qERjZQ!*5#pqnMVoEHkz88xsKNF-U8U@LhgZ<<9x0A*4#Qz{lKMhR3DMKKDp zQYa6w)iA+!=s@a}V!a_&sXP>`>M^u2iYh_LF5E*AJ!}Y zqa@@ELDof%CuCel#UA!yzeh_x?(ck$_KE7-VUr{z35@+=b$i|;b{;0 z9s%@rn^=B}#h!Re(+)JrB+%_}1j%7I#4se28

8sB05syiZq+l9gV)U>(@?wlFsG z)5RY)K0AH%(4&8hUOe@m_-=FWJIBA=xAyJt=Qf&u&7b_>*v;SE_5B-jC)3^L`7#${*nZ@n8|yo^S!(fWxlWyzNU%j569ogHArp~EnKc2jKdHvt-e%=4k=Rb2# zjKBKU_AkyqcliHPDPiWIn7>@`=Cc}dVrw0kyMbS2Y+N5b{H{1Mi1v_U~uy~NB$!i;y)LMMSV;1|_wxO|@Av)7?%L|@`ME1|48zP< zSByHW3-mdcg7=R>=?^TIiP@e`dL>rd4v0V*hddzd|ScPnqxI`;-*p;{*A(6)OgTWv($YyZd<;6mw zKy64;8Z^?$C?xhU9VUxY3kFJ@*o%mVLzY^!+qh3k956i$A&6?Vnc*;*Bnnc-5ABE- zGXft3G_J9BLh9&<#);ZVV-z92juPCD9jHfVaSDdqo$hF==sGjKs2}^|I9-QFJ_=As z5+Egx83A+cZtOt;ZQsC7pMI?xC9dE1TuqTpC0h^_RnaX`G%97qlnhnP>tPLV9qWR&v4>#oi<2S}_jTaVa$K1O|er0_!}) zC_(rl?9{AfN|ka}mrYZVxe3-ima=K&0Qe7U<`ttXWDP;qMUDqDuA>o;_-N9jWuHtW z-=lq^`F7Zagrr^6vHL#Zmb(5Z>UjPM1!g%XdqudyNZMRyjKNmjSdjELe`g!q1>eBPw?N6;QJNM38>4m+C uz|IMk8@*>cf1f-^eSH0D&*)t>m@_G6^ZVMjx4#dz>F=Uyt{N{Zt(||g0CW}r literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_260_pool.png b/res/glyphicons/glyphicons_260_pool.png new file mode 100644 index 0000000000000000000000000000000000000000..91102278dd4cbf1d1b0859c9b8eb65fd599415b8 GIT binary patch literal 1376 zcmaJ>TWs4@7otZDKnY$1zE}#CB-ZrgUir;qp+&K1ob{!#-); zG9j%@l`0MKz!-Z(m3U$sMNC2yW24Yk+=r$KRR~pk0cjFS#WtjY1mZYNx=Kv5Y@h!e z|KIQYK&h8pJTHwWj9sFrOLXWK;J`o{rzuEriCfSifsY@;HEa0hClDPON=;nZQ*g zPCOsZP#KE{Wp!Z62BTBMIeBVajw(cdA0Bf#WIzW{!d+c69L|jsb-NsryndTNU=}?$q=w3WP(E*Y|H{+v2T$tek5xj8`$eXPcxvY?C z_(HolQHIdsNU~b3`l~^|X_rVk8jX530s$Y=@HvwPlw6~C5SfFs+g1y$3)J&RJo ztiU*dn68JQTbay;VZ&)83Z;y6C5xo}6shZ8Ty<>+X2D$=_tbWBlNKPez%eVfjOtO` z-vp!F-QQ7DQIR+FtctDG<5Xl4Xg~)BbPy@J&ImE*p0!m}KuHr!x#E3I3vr@SQ5B8} zi%c*|F)YKUXj(`n7%?EQY=jpRd@@8uJZGMP%|LYGR}eN8Vnd=BWho|!N+t%P(Ug#2 zQY^~~kuV!cHnC~Lfs!Eux1?_wkO#d5q2Bxu?>)6|-+GEz37>6A?i=SLa5J0r=e z;T=5XRkFbq*y;pOQnsn%^-^%^Js40li&#fci~$rrjdpA>B?gj-ARiV*CQLN2%BGYx zBS(P$VZ{g|B&eW3g?XAF5gA41pb9n6=+T4*8zF}MpYuT0-5;^zh z-;XRjG)?Uqy7s_)>!p9Yk9Br0be>02Z`Z`3ww0CxV_W~ey?d?5>{x!VWov)O(;x3V zC6gBhJHXi^U7gvvuGQJzYl}la?)yo6tL4_2()F*dyq2i0T|L|uyS1gK_~`TxANfKL zXYkWc@>3_W)6WIkZqTnB{UtH}kKcXIJ$rEM{nt-?zw*xV1QT8OWM**ox4}d1uAc86 zztq}h+Kn^nUYSn?tL3@lJ%0=wEzHeyEY7-J#^Kf4#h%mqKJ2}?^u-5N|H-90{d-TY{0Y>X emm_~2_#E4_cz)!Cx8MEN`{$*_Vc}eIZ2CXL?a}f8 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_261_buoy.png b/res/glyphicons/glyphicons_261_buoy.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3b1ca07791d6cd788391fceacd824a361d7705 GIT binary patch literal 1395 zcmaJ>eP|nH7{4~!&5g}j#kHI0c~!B{9L%lL=|DCR1S=I`3Vsyy-K%J$OI#e9iS@w^EP4T@n=?ab=clW;U zbIulcB%+3F~t z6k~N?=oBWh5L!G*7K=q+(eE?u3`vJVA=d`Oc#($JDH~8Oc@3wdVL=3rVrv%EOapf< z$|Gh0h6%)UDTKV0NGuyRoO+^A%E*#zk+hE@^LaO}nzjRz;1-SBYCEa21;`|D%z~|; zdW?27z$kZjcGOT*m1RAvVC%IwRfPmP$O8j9h!kC8gqZW&Yz-Aq)siJow``<7M8msmKSUwL(@)~rrv0kp{xl_Cu>@`FwEgk zCS*l3TtTN>$vRhHYrB9Nv&}qSD+RCJh5;MYETFD9*yX*zSA|gPk3E6GAJQl6^zOS9TL46 zy=-MQ#Wb8A((OTALx9?D2}`c9SQD>k+J+{Y1b4eUg6Ob3#K1t4Yoif8Q<*u2VNILk zVkA|XSxB9~Z!fjsvF&>N=wy9T~qzj)y&3;dVSaV*2ODp|9rr_LR80c&G)=? zBs=xQo_Xeno8D&b=!wsL?3bAe6^6~f`geYmy?nj5N&TiTey#1z(&Wju*w*iRDrXK! zH~4I21K8%g!elGy2`6)C?&Q9qzJ2`TWB0r7#@_oy%TkcZY1-*_qkws2js(AxnK|CNn3yL*~|* zv+gE{m{#ysq$*ZLFeo+H6s%F}Lrr6A@gWs!sd)<2?t?9*4FzaW$b4d-vddRSp?20aWm+X;>atO%ipx9NPP0iookC za6Cz@lPY8falv*09woy;m1Y>6Wl1IyWm)DKJVY}gibgjZWFlOYf%q5NQOx2@5LKpyhQpEr`HVUEP7YZQ;H} zWz;UiB!QT&hhRF{?1o{>Ya|M#jH)UQ#gH^*ntoh$Z4c(aT^je)_VN=BpmM;o%dU#* zG1lD#qukx!QBzSK%=QAuK>L<6gB zN?9{<1o$6Tim@V3hebLnFa(9jXetMFXn;nK@&;_|4BhV&&QPo(N=Q%xV@lb8#Gaxt z;godMw!A*d??FRHfckD7OKq}P7jJ6XrY4#Mf4eb)=&&)wz(SMjq7glIi`<3A`;IK~ z`Rej_$EE^@@kgbfAKLL**U~obt?s43&hy)r{pDucky_h7dnNz$$}b0B zy_gujzU7OheIIt6*nMMuVdU`6(d}Ah()_KodgS9j4~_4;dP?qH`+RO8KG!~-shqkk z+;Z%DD`@GX-@w|J_g^{Mav<>U(l=L6tPDBVYNuPz zJaB-$lE#XG_hwJd$?{K`;rYj3KKsG(qWo^hvylgTKY4O`e+PT!!qHBcdB5k<%*?eH zulIW+51;F(eY^cquIKlsgz2*vXIJl>oBI34!ueen7BBy?s)EIn^K$Z|g_d^Adi|a6 T*G|vQ`2RUs8W6uqjU4(9@Q}}r literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_263_bank.png b/res/glyphicons/glyphicons_263_bank.png new file mode 100644 index 0000000000000000000000000000000000000000..0b61a2172e773c9415945fd61ae8c5731a3a3ac8 GIT binary patch literal 1298 zcmaJ>-HY5*6i?MIOK~17(r%T~kZP&4ljLS5cQRpTOC}%gXlGq!Ms|=sOg6bY6E|N? z?sR6iAZ>lH+In@~Qd#@3P;X{u)&;8}$-VdF z{LcBEue>=q@qB9AQ`;ztN|na73Ry>zXLyLbf9e$OlVumy>$n=s;Eov~O0k1!M3+3X zi7Lpn=Z=1jMk(si+fJ>H>*d3;6?m+f=&)TcBxs5nJ=6_NYZhU88Z{liz}&ffm7yKG zz)Xo{z8tEk<&4iqs5(DUv*u^5yv-aMqer_kG2kI=(p}H>W4T*kdUj>9PsAKU_f+s~ zfmtV2FHh2H5FuJ*Gii$lfQFC-SrI~TkQR6#a6GwT8f0Y=%0iCrUkvdU*)wuQGy1;B zslc=_4rPw(bUJJ&!v;~41NnSDu^|X)qLGg0d~9~pe!O>JK|`?>IU#lepH3{A(?J^- z7{YWt1TQR?Hw^o6KT#xQT-OXa!1A2uC2{q%V_ZT1(0HhJT$>9KS3z;mjx17-nY{xr z$=&}u8YtS{p{T=5 zo`(`t4FI&F0(C)?q@1cNYB9^_5@(5l%|IeyZGsgHK^JlW@~|iXpbPoDp()UiBuUGO zQm#0_mi!o-zJ(H}3DzOlBFI8T6?B3H|B02=2$?vDYC+%*T4k~o;2>@VA+1&+y}xW) zj-LpgODfstiX!J2vW+P4=w2yg=OGMuAdyDPkr)LMJ|HJ4W9ULr$*7{PLy_rY?M*2g zL{0$z!s zR^Z2@T+)NCLjb+qI+ojHu_xZtv;$2t3CVV21j%7zh>=ewHzFe%x~m=;?@J|3sdZQW zczZeZI{&!#3p;5v9y1zG8o%vd_;h&p$tOm(?i>H^tHqV!3m>0;ApKr?hUt7*9?##h zx4gPkZGC%d;n&@DWyk$b-rr88_FQ}R^Y^IMnz^`en>xScqopH1cb=}E`1APDcMn`& zKJvo7DWIcfOpWvM*<+_T4>}x^eyR4;PQWwQRgHbmsKx*46XZ&bD7% zy7b86iF+$|PQG^a!WVxj2W~R{-OH!G-=RM^^Vu6~+Z)u*5576O(pWH(zf?(|&=!l0 GQ-1^M(Xm|s literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_264_vcard.png b/res/glyphicons/glyphicons_264_vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..7635f7e5132f29b4fa3fdf263e48f8fad3672e6c GIT binary patch literal 1310 zcmaJ>-EZ4e6n8q-O=HzI1gwA%mLpV#me|*+9mlFyJGQd~maa;JR)hp~?Ayeuzp!se zS|OCRs48DVNC@p=6CXko-Sx`RXar^xdox>twrbfYAgoHQfyia|t4{0h_ibQGb5>Jw@7< zM4jQPOf^tp%Py~kaBgL$Zmuku1&f+KK~8l=Y`}%cAiJ*PMPgT?61yVa$6}fy6BV>1 zQQM^EtFxr)hmhp5xs1sGK=OPROmaLAj*~0{Sen5%p8=C1$BS&999$Ik7Fvs9O)Cw2 z;gdwQ5DG+^?sPiYPA=<*O&Symh1dqmX0S#kTK169&3I9IXhDOK8QKA|eUFSS8V$dV zBnmU#4#5qo)g8lLG)NRq8QnDk8e|#Tb>p}a?FiN2JsS7bj_S(+q-!wp+o6f;v6vo$ zaqb@MXsBqJJ9tdsyuG0a#HDp@ICc?)%QLRc2d0@}rg?km?*yK36qN+lvLq z;z|y1ErZ72;;Z#7;n2cqL$VLtv^r+&X!OpScJ`o+mYvP1tEVyX29YmdII?F-JHhnLe zqT?QPYz#Q{&TQ?ciSKkrzDqDBJjTbMx+}U({2R^4W0^Qhw?a=2f};Od1ppNy7fU*L$}w zzo)%>_vo#^MpiG4oLMKSEB%RM zw?8<)`qrJNE+78*`JX`fyvBWXY2>xq+OrdlUwVYxOA#+sM&I6AzmWW~D*BA}O>trM EKXW&vkpKVy literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_265_electrical_plug.png b/res/glyphicons/glyphicons_265_electrical_plug.png new file mode 100644 index 0000000000000000000000000000000000000000..effb73443b418005a815162e78fb9ac1900fbfc4 GIT binary patch literal 1322 zcmaJ>U5Fc16pr0m+r=#^Xz~9tyOb@v$;_Q(eljGxCNmQ^VAds@(x@n%%-l_8cm6ta zW0HNS)rVTKJ_z;SqA#U_DD|N}*g_Xtr7aZeB7GMLFq66W z%=y0aopaC0D^rt?5A;9KABjW;@)Jstyze2;{hK$D-_(}9hr$h3%Xr$I!41tvk&NM1 z5XjqF6%~p(q6Ltpdr>b}*<)6i*TAsab3AfjML5m7EZ>6_#LHA`{zdiXW3q^Ww{G$fu= z`FN7yMPAN9sAMy|$||BL$ZAH;CKw?M780xn5=+b=ST@J1tN>Mp&$1AzY%-ZsGJH-H zMMdC5A=|^|od9c&j>4cJ*1UmLZi$s-A8FY2ORj76T4k!{VmGL{9+0PbFkH}d(+Leb z!jtT3MZWnwGIG9agU(S%=1mkZP$Z2ekQ`Z(J|sIao>SRuCN6WT%5zi~Ypg3-FLMI; zA66B3CBwuOhLa&h6ETJ^VG~=Z+oKr^cUP7f_K9R^PL&iSYM>ddZeePyYPGzYsk=^) zqQf4vOakbvRfBI{QcSo@6(T685y~6tn&Hn*4GX$y?OV$*Nc}P zef#MPpB=qA{@2DMsgGYi{?oUMBcBKdt}mk(zt(qO*a-Lbq4Gy)=h^MnHEP8;yM4KG zdyUz*pBg@0=^HvPE?@j=|KG1hkN(?^NVA6)PaYrtt^FfS|M~rnU60&xZ)wA&=iYLJ bA4V4Pi)&%7=L3`J8dhnrS;KQ_tUEq%sh%N(^^be(L{zLQ{}dt?K{TIh6e13TXK z2lsFpfTMr=%@%Fd-_~3b@=m7155kzC0Vtmz#E!d#DcryvKdNw#f4t2>->Y!%%5||G zo4D(*>?C-7XSM0>Y`Ge!!Nww;0 z&?E_lGGEBMB0^A6c(f!d3OWlV5lMo`ZY7VFG+EK4A{<>D^OksrxtP zg3#~x`F?>XNk>4XQYo_`NqMG`Pq!oL4DwOBFt%Xf)J^=D`XqvxMQ4NbXoX`;_d^Kd zdi}s~l#UX`QYH+XSU|iegkcufP&=g!{EWtPwbSNyjD-eHNiT6(JvJA{V3xZVI~pr` z?txz1OM+pXo-5!0hd81sBZY>H7<27n;*eB3GXqiZK#C;T0){?NC??dsZ_OerK+l`Rg~4DF~-)S zlsb`%Gp8BWe})xbh}FylJCr0%LV|IttaS+`X_v&%Tvy;?-EsXW6TF#Ka>NxU{)gDB zCM1NzQfU5j7>Gz^jaFnaN-TWDPHLfQONL%BW!qL{ZiMv?rEDBI1N;wb7Zpnv3zjIG zh!YqY&()|;13c5jDe_gZm=HSpP?U$$#Eej@JMH literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_267_credit_card.png b/res/glyphicons/glyphicons_267_credit_card.png new file mode 100644 index 0000000000000000000000000000000000000000..0e72a02069d382612358e72bc461c646dea92035 GIT binary patch literal 1201 zcmaJ>O^nk<6gFFFL3HKXOq#|9%D~P zc8@)^65`$yNL*1>)FKWXI25VkfW*1C-g+vcQc-Wqvo~2*D#EfoGtcjP?|Xm#VQcf+ z>gl!9f*`E6ue)7X*WfvOY8l>ly)TO89QXQso9*zapAo?d*^r3s*dLKD@x#4aFUYze zeDXK#^?ARuVFoOg{X$2c#VMc#Vg2eX^@Cl)#UUBdq$$0A`b-jO*p$A}J8CC&$e3Q= z&&c-vW-r*^4H}_z^@_MYGr>SixG&D)D9O!PQ!4G6urI`lB$g_Cw<#Tx>UXw8hh;?6 z@^VC$7>2xYj zt1`<*3TiYOg$+%sfJPDM;1()POMpI5%A{G|?A)D}~1WXS@h|^Bz$Z(R+ z69p+#W`3$5Syke=h^y4jd6&GW@j>mpx0e#7OL8{J0;tE%`2`qq_i;xH#V|P1OD9=W z#u)|*iAYQmo&zaVG6Lr2jf_G8{m5m(r1;u)o6=-LLlf&Bt~OL`V5fzUYg^dUT*Ih4 zp5@pzwO%+Y3>*i7L=FM#*+#VrRZ_97A>?U|M$5Hu%P#CMT=J18Z*xFF-t{f8;ch^en68#aH*)|oGZ!bZ4$OJ7K>#mO!@%^ zDl(wa>JXy_;UhR1)t0B(R@Kox59`t#8y-v9B60xy59`&jYpGRN)g2@$Kqd@KPI*M; zJ!(aKzKdwlCuZa)BS=UkBs=~j;?k8-w3m))z><7jDS9xX04R5dSml_-Qhcmw7n(2$ z#r9|f;czs>B!S7zU_^hb{PQb}_qT1=>dpQb4hDn1@ce+@`AoIX)lP1#@Fo7s_iqjk z4ptsm*KWRAecJoozI$P?G<^Q~#-01MxA)Hc_~px=ov+Y;e}4Uh*8W<47!H<)o`~;1 cYJPfRX+?PSuWal;E`LQr+uL-1vIpP21C+XY0ssI2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_268_keyboard_wireless.png b/res/glyphicons/glyphicons_268_keyboard_wireless.png new file mode 100644 index 0000000000000000000000000000000000000000..a61369c18fb26777ddfb30cd7a276ecee05d855a GIT binary patch literal 1221 zcmaJ>KZw&%7>@{|f`d57sY6T`1>58$moyF6^V%fUian2B!H!LnckSbnyqLURdxwL6 z25}H{5ElnQoD^|!Q9*=55XDUgadLA}C&5ALmtK2!pcs<8_r83;@B4lKa(!X`)V{rk z_HrDzuX@_5!+IE=1G{&@+qt%)!!pI}CR?OStnb8_D|xhy`D);Fa2-3|>V-FWhU0dA zBaJ3&*3KF(4RTJZlN$sPpgC^l;Z!7I>4!m{)U3 z)|C+AH7$pxRZT-Dcv(WSD8a2|(X^pzhMecemjK>kZ^@`zm9Z~46@@Niks*rxem~b& zay0IUs8A@RHe@*q8rftuWX>QPCYgx^3ny+&B1UM)rxu+y?XjW&OgBOZqFQa!aF~n} z1t}8;P9&n7BnCkm*GM~Ib-YF6pV~=dHNs*YC$ty4P>-d|1PrA52IaezaX04X$L1k86g^E?uD!Q&)c~#GsC)jG3Feh|z>NLfY zEv)`utYOC3VKi<~>Q7o_p-UM}x-{a=MU6jJb6gUpg5zl=$6RqtRoS1Pt#E-9vJ+nOqjvEH_nO(F-tUsyY@StUuaB-KQM2xL6hV1)U2 z+@mF*jdwmt`^4~_umcIndU(m{`AnGY_^VNuxHL>=#Iy%}0)WwO11oN`I1+Db+KDDi zLb}}?K{#v-Q|&bzrsyVrNIC(B3YF74p(<)<$`JUVkD{jpT-dFyexb>$CJEQdb; literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_269_keyboard_wired.png b/res/glyphicons/glyphicons_269_keyboard_wired.png new file mode 100644 index 0000000000000000000000000000000000000000..9d81660eebfe47c176018c4bf3c2f41a8eb4b114 GIT binary patch literal 1237 zcmaJ>O=#3;7>++%i$4bu#J@vKFYe;xxA`U$IxU$bQ)k(!WjbOJlxC7|WU->aKVz3*GOV&eVcpNG9+1=6&Ax zdH-f%a$v`hAbIu=4v^nJ4xKnd57?f@Q>c#HP68RjLp8{jLZ<;M z(DCNZK7=C-v*n#%oyODU?{pW1yhCmHP8bt3!;Fk|V#l3@n61HvALY4!?%d;8-^+6+ z)v{QQP1y90%_nebexmBm&$>B}8yjUuIy!L>LhP`eFo;sUljpjAbs|%>z_DEuJe%j% zNKKa~Sra9YRe2@jiju?vz)Qm_0Mb!b7A08_$qh2nu&x4K&a%CWBheDCu2-yLFBUoF zxhBT3E(q;*n{O*TN*aQc%jKvKS)QQ9jMDVfl5VnO0XAq;6=UF#HA;71ytwN9&ZF%&8=MXkgo{iqN1!K8Ly z4%9dF+;zLSl?2^9Jy(DM3}J**LQ3i~BFy#UiBB5n1Qv2z^lQn=bFG%|=|HuCk`sXj z%%UV&1q0Z!rD<8yHq64Xn5Ds}gN;C<;XQ&ia-t|}!=?xdiX_=`E?2Y+P}DTd%Botn z(8rdd6g!a%X;6ywKVl1C#Oh`O9gLDHLP392CYuPOw25NYoC55Tvg7&@ReVi5+2aZm z{~Yv+2@2V6D|G)e3`9vIgO(*Z$|QY>oHV6q%LPL*RoezC*TZ@nO4iSu06xLmSzsBW zVu`9LaRMRZxjOc70DCiP1h^*!KAjUiaH0k&NXCP8rxjpsv=Pk3P2WXPIwH^+415CU zN^4kQgU7CV!_f9E$tF;7eFe#3eTiX2Ha8(FYAeqUk@Y@bvW#lydF{W|)v+y0KU}-E z``5Q)LrW_^?Rz~~%$N&;H~(m5=hnT<`|tI?zgnCeIL+)>G$!sIR&VZ~`Rj81-RhH< z?w%{#Uj6>z*}oZMVEo21$B(~S{O0Waiwbw)$LpuA&OE;KW?@eQeZZ7_V;NZP`eGgy05eEkY!E*N?mQdgX4|yY}SbZY;M`&p0Ao`)(`i7j2LG zh{iT(l1is74&Se&!1d zRh2mQG@T(bRuT-V+bTBbsdVM!%8(pYu&o_vti(YBI&dYlq-%!5mEu^{E(iCX7{}16 ziaQj?7D(kY-DuLZ0ZIo$0hu64lwpEom}VIAQIsM`3Mb&r1jsN)GaMB`YZnH+*-Af` z6;d@{@D#@eUDx7pyjUy-i=m)t58z}p8ue^YQ~+uOoU-9crGVjVs9O+#BipLws-}T@ z7NtJ3;Knh?bRh)Y%48M|8%`}zFlBg2vT!m;;JWU`Rn>OfEclPc9krcY*#dYLIA+0? zVLkdc)WI-!cXw1*ROCfHt6*!@I29QO8qk5^I*=4uWdxaX+ievVP|^fbE_h$lLL4g; zRE1+`kqJc!hGmi|k`xj=BT@p(Mv@|*OoWMu=gc#(6bL0j1!DOqK~OAB5KJOOk|Gt2 zrUafzu`DY@Xf~3lW7CG?N`?$Pryf>a#D-IM#d1j-NUmw;OjE13O821Yn$DnUp~)Tw zeK;e@s^JMXdzGwl1-7~eC@I_2(P}9;^$rXOl7)>HfiY4rd=j46P)ei{d?-naB12;} ztg<9!^~fRMe^@cX2s{xI2s%k(I3%OUoU6JTsP!nXxwW09dVRuak}&`i5>PYP*WkGx?8~FODtB!OPaQ>2`9nZE{-5PEDkX+;N;qHL}$LyWdynB z!L-2VNF@~Czq&U>-$GO4WDRxh{xCXpPOoI z9UAtHJ*iAYD<72)&#fZn+t*+1o#Tfa*S&DF{i&1w;?A+L?u IPwX7|7vt~RKmY&$ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_271_ring.png b/res/glyphicons/glyphicons_271_ring.png new file mode 100644 index 0000000000000000000000000000000000000000..285c8ce1c4919165bed3fbcde4af173b73a7f845 GIT binary patch literal 1467 zcmaJ>Z)_7~7;o1x25|}`lQBa$ZV3amy}SOow&%Lh_S&tuZcEo`r+(P&?%jH6dw09L z+HMMCLof)$1VuBPj0obQ5hns41RRSWbduGn4b}W%_xywE8 zbIV9%nU_>v z6cEiL(<&xa7Ydm!rjU?=!6nCnk}VW08J1=wj487HB~=EPoekxi6OT%79TtIV_6t+^94}MO9Ry zqJ(%GNn~q~VR=DQY|}cK$8)z8@JH7%}bydB*U?k%ByjZol$pO%}Q}zn-eO|2<@;S zMh>(w$+(JEw#PfAD9?(5Qh{kR80R4%BQ0XFWgau?WkZ{@gqxs=ODhNuOG^v{xVbW1 zQNx!H{-V?A*#PYhr>FXl^mOb+9@zKos*;hllgEXI>XtoJZ<(6!m-0XDDVr?1iWJ@G zee=Nnhu*qy$LgtkDSu9PnV(3${YABB=LvskOR&WL#OHrM(z5C{ofzy{Fq}K_*--tN z!bG#7pK6&feu4{o++>N%B{X`{a;_7-!wn8cK5T*-xLoF-|5?R zGPQ;poW4r^d-xhs5ZUV99(abXZGOkScYHvv&)ZX%w{FGnKNIEQQG8|fAF+T>KSLbz zrV_tiKN~gl_dT_{DfUzCYvYA49+jtN%F9fVL!Z3S^ls?v#>bHCnm1cN-HmJ{~e{9rr6z?%J-NNDsqMMnfE4m%JyZ*Rc@2=bpdhOkIk=w@YBKyN->)P+Odi_P) zW4DPg2N79tpjnukF)s966^Rx;1=oAwQ*~DAe6=s6szT0YMttJ`chOQgT^NciNrFEsUtEUcs^P=2Qcs5hT1RX9!{j*k~{4m$e9X z<&$F=DoYV;n?Fe;4Gs**EyE`07;a6A!x=FoVVj!JaE^fvRA38ePE|CE$wjcdUk1vK z8pqJQiJggHOQbrJ?I@?40QGx)9+4nPl%~C8qo1b929zR53Mb%Ad&ow{Pcu{iEnFCk zW=efbijNm!!CeF!ux*3E@xj4C@1W1CoBcQ$3WXdW6y<>y9&1Rmg`7vT))zhSz!FW_ zuw`9C9gjk>3A?0yGG|Lt=5ja5|tb7y8-WJPnCJ=1hOzXN*Y?bx_-PWxE z-9Whx8g(ZHQPv#A2InLTT!AU?08-r4RWyGTjC>0Q1Q~>l7JxZYFntp4g1&f+in2b= zAB)j`tbmnPl&qLJ1pE&h3(!1E_;|w4kr)oiNFrm)wgL)0$|`n2Qe>x37)8+fVL?0+ z=o7MvjWzWvL&ktC>Y5eCogP$V2*^uISbT-Yyn02`7A@f4$F>5XAeDoN9pRxzhC|+^wjL! zq4aAtG%<4H|jsEb0tn3MXp8P%YGR|5A8kO-PLzi9z*MPfuAOx zKUWrh?(nL_i)*Sz_8;3&M}Pg}o{d*m{Zq>}jJ;l8^-X%dI`f_S^oTlk{gtL8k?Tix zzyI-$v-7guBmjN f<`$S=yIrNo>Y9fprq1ieQeZZ7_Yhv7%s3W4E(^-Gf~X$+TQJYcXhYz?%H#=?8b7t>4JZ_u6^&WuGe<$ zd)saBm;ON%qe3)}h>IVPMGY`zV$>}|GmTpYLNG+d&mkcp5t$&HaU;IH-Hjy@nzrxz zK7D@A^LxJfTyxW7r6u>2U>H^!spn#7tw7I)mBr{?wj+^2%SOnz!4@q6djtbu0ZHos zcqA<(K@12|Z`TB<#;`js$?-PW7HwojE$t929Y;2;BQ%Cp*JgD=>;w?+07+T(6Mud- zM&PpKC!TOesi+x>kM9waY_Li6= z@SF;PNHYNLcDU>!MbkLLIOr-j!_bwulcJp@g>J@9SFvt}b$ampMIdj6 zlwf0AIPVLc{6q>uoh8Yho*qY!%b^)blJ@z0mJO%Vjx_9MuL^~%T{Ue53mh;-L)M|J zskmiP=+H9IPavj?A*A(abjh%4<`acdMrH+_q#YEQPFr#1v`rWTH)z~c+l=?>fQ$iC z%NQc6N5WPBqukxvQ9)4>m-O_Eq2%I}L=q?<4OD0%Qgn_HV$NT|S!^3s$Ym=P=8%8gre4oE@`q5KE-kM__yI(FoHgi

))LG{oqsU&M%Y+54{Hol`R@w`^c;H zzu3;m+hXIR^Bsq0KisqDr|{|WuU3qI*950S&;Gi7rn|jiy*_Ik-hAKq+|XpjZa}J^2gWxFTP`JdwN{7HN0L{^GW&D53U{w?MPg#{C57WeNY~u8 w+PxQ6U!1u9(#X2wyPmvj@a{EQ+1M%yn_SUwet*TTx2=C=gm2;w1>2wb4_RjRasU7T literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_274_beer.png b/res/glyphicons/glyphicons_274_beer.png new file mode 100644 index 0000000000000000000000000000000000000000..efa0a2464e3b6c2b69e6b25eec5d0a09d311a1d0 GIT binary patch literal 1489 zcmah}4Q$k87`{0qgSi04A(A1b2;0!R{@kv2S9i?2Yi~QU8~byc8`E{|ce}c~wzNIh z+tduA5rRxH4%84J2#G&HvMFJk$kfchjG{!rg&Bg1#znIQ1w;er*W+$3k!aKQ`@XmD z^S;mf*Ugm`r8#pK&$U=AIl(ff8m@Q4XHnK{_+Id2I1ZP4bhbgSk;8firvi&tkXr!~ zjB#zC8gN2l{U|85STZNY+6KKLR8I49%*L5IHY27$w8c_fVkjKn4s@gyw26`joqBH= zMMS}a);mIYNb!S+Sk|e6n$C(^zO$Wo3uwt|q}ZULff&#^#E3;DjW#@J(k>16rWiw! zq>A3|L2r_32vs6}Sp|s0X1DSh2B&l zOjk33lrMPlpb=eHXbkJ<=&*IzZL->i5pK8Jv_XNcrZdyPOdyol1c+swe%#F#kvQcm zA_$gry911u3bH9p$7p zm=LP~!dyJ6qpRDZ2_+)(vZNJbW)DV12uSX3VzC((lj0doo7RMrU~Z>J5FVz77)Wq( zRXC#7J9ai&EE$O)!Xn2<_Qfla!wdWF+_%kjC39-x>s3DP?KjI8KC<#);%NPqSzC|hu33`* z+iT6E13&KTHOBSN9t-DZ(?gNrIsF%^{s`Z;>@>G^Z1eSHmzz5eCF=4&{*>FX;8fQc ztor0ofEj)CMlg_nVtd(F-S_s4J4fC(Zfr6(emk(|2ywQ&>aGph?8Tm|d9A(;w@rQI2p%)(uln6Yyg&7W+L LtzZuMS~mU-xC#tC literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_275_fast_food.png b/res/glyphicons/glyphicons_275_fast_food.png new file mode 100644 index 0000000000000000000000000000000000000000..bd06dab426a59d1452ec51ef02674dba40f4d392 GIT binary patch literal 1364 zcmaJ>Z;aDq7$0%oDdYq$5b<(cYC(gETib2z)@D1hwVk)@HqYIV#SezAeYZ8&wWWRM z{zzgNCy1in2V(+4VxoZ%5=3(*8bVBrDBKxyf)XRbkzfQqfDw(xAf9h`+i{76rtSN_ zPoLlO{GNZ^J(7N^XKCM3m&?_Y7!opQ?MKg=2fEPv+WrGgv^)aE92_+Yuqs)=6;+Hp zz!GJt2r@uY>RV5Pu*-Gd4Ko6QNzM@Wz@c$zuRwc~DgK2>$Ew z&u~mtBKT%HMW#$1l+>Yy1x6d`tlSurSq0xXh=pq$GEfFk!fItrx4BvbZ`tM0-VqZx z)>46E5qzFhE;WMjh6OO%>-WecMPUr%r2;g=P)}k$lJXHGx)~1@;An>P1+n&pBX5>c z;4(tI?F*eEcnLz2BZz9X>aF^{hE*gemSr6qKA#6^cMMYlFGb@(Xic^sZpn)>bp^ZpUEk=kr_q3&=0!o@-$Q9>nLWtm% zimGr7Ei!(VWI_xdrzjy7WkjD43I%yF%Etm^&~fG%SPVoGuY#~*kSAF&z>rKVKvANP zW#dAWiHAZVAxMXUu?{w&+fdSF;5c=#>K!b7Pb|kh+_1i@F{c(`QxH57WMPAC^9tO z#wv?a)`=Ve{)ZKVj1VRL0!i}}P9QRh%s~}upxvWU4Yqfh>huYxNqP|_#G`cJo+bk;RsHQPXxb(IhzAg%L!Dg&_tynp_Kw=w!-t}-1RQtKEC9=tByopZ#d4#tx*v{{8aYc;E+Y_o=-D-+bEiCMO!xD;l5g89cw`p}FCmmsTZL zzjl&Y$(Vgz-Q?C&lf(E-m*wlevSd8F?B=19d*7Vu9X~hp+l-igz4`9)&A&t*#%I^B zK5%~58)tiu?W>O-zVzaaXIGuMlAgWYyl`>9KiR##`1arVZQ=JPV#ku(X3c}k`v1)B bIN@I7+V#P?BPM&~wDX@!h-u+yY)kV$3RTf^ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_276_cutlery.png b/res/glyphicons/glyphicons_276_cutlery.png new file mode 100644 index 0000000000000000000000000000000000000000..82c724acd6e9a2fee00e31e447d5ce1db5fc0fe7 GIT binary patch literal 1252 zcmaJ>U5M0H6i(aSvbAnSq5idnn0cw-OmZ`mOcHmLOp?)|o$YpZwvI3A-Q?~}*d#Y5 zcRI5R1(CiKgwmE$`ce_>OKE+nrD7=+EdJqxPd*fUu$6)${()foAl^GWvo0uxB=_Ev z^PTgZzkD_|xodpY=2aZWjaPTub+*!H;xGr9POcZm6wPrHJ9{y7=Mmv&QOl1?!rkBg5P07! z344^9REsUt_IEEPXnJw7;V#a*x+m=1!B6xIY9K@e^1U#KQlnQA`gRSvXJS#{`zmC< zBrK6?)~0w1Cx};a`K&7ez^iHw6ckkj+jv<5vMAA8&4PlVsD@nR2bVy-CElD-w<`l* z^i&esgv5p@cDvnNH=n~vO9Z;EGaIs;r5f3EAtJDsjnd4}f{ju)@nhoSh-VhzEbfq! zK$$Lu5XQCIvf(HlB#Nd??7>(BIY|sd7FS<8C3WF#0>Z$?ZijuX+9jdW@jXLT95t^? zs-{{M0PM14Mawa*azQFGXUxD#AeH1iigk*Xq&o#uQp*JZ99h>Zwy9P$O|y%N zRxA&()hHz}auIXNu>Mml_51>?VI>F>oHQ^FhOIKy#ssHr9P`$+%D-EKt{*YMR#wRY zSCsf4Bd?O+knfkm@Snp#0vc_!B8^d|;RAZo@)buen|Vud990npSZ_tjhLKaiGgzmn z+NPAZCB*`QNXdAvL3|RRL64dN8SDa|^@$O{s6`W!_0Syb1Vq@;3KrtF@8T$(5Lpif zJ_Yo5OIUG*#lCn&(+)N1B(UxB2-3sy5Tl4rZbC=&;+e0{(eXY~warHFuiIZ)^d$KOn-EF&APRtYqwn9_`}TE`9B*M!jCo` z%KqmN6OPq&?)3JVE9G(UbH>u}?VC5Qe{t=WJo?Lte}25LeS7-UjSVONJqJh5zjgKP z<3DANJZSFU_jvvHmwu0re%}56*f&>R`fl&hmsfLlF8%s&X3d*#u>VfgnY2%o4;+31 D;HZ{( literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_277_pizza.png b/res/glyphicons/glyphicons_277_pizza.png new file mode 100644 index 0000000000000000000000000000000000000000..ab04156b704af5201ca036622925e0f5de9d11d1 GIT binary patch literal 1526 zcmaJ>eQeZZ81L9(WHMY97$0F+yG=RRUE4d_>(x8P?Rp0ncDJ$3F(U@L_T8;pukE$H z-EDki0?`@?q_!sj)boN~IhrmqXQKIO*|tEE`Uz9ctK(ZpGx&cEu>qS>S*n=#pki zs)AY;`BpV)`Y_1!K?rdz5}7ir7}-R@l;LS!!$}8$$KzI98EwOC01s(AQrl?i)&SlB z3^l0>upVvYIWWxK;~nJ`MPW)$OX_kaPEo*t4B|jB4M>X2FoMk4I$eSV>`17bL|J*sMxsxdL740%Ay4<7lQ7tn>&51j)cgbHf-R35J9x#uW-WYy7SN z6%5i8mc@$GQkIJx0{({$x@pc&xHy6ekQffhhyrU$rVO$@>X*&zPL`}bVP#&4!GzdF z(8eca6I&6JyR~*nP!+?ATRkXC5RlnDz~a*^X2jE)Hm3TpEQ zF1vstNZz|)&fk>&%3YwYbssTseGoWEB7rwdZnON@-bNsz>;k0+FZg@K;x7yBC58t^*9GYvJS7l7pB`W(XMvO%5`thR0 l)h+U5$G6R;wXVrR0@*cQwdU`M_jg%;;&3p^eOj||+kbbg3@rcv literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_278_birthday_cake.png b/res/glyphicons/glyphicons_278_birthday_cake.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4225b9ee3ad2e583c1b9be4969a2bb58a7e55a GIT binary patch literal 1584 zcmaJ>4Qvx-7_LtK1|uS1*kE$p6bIVgT}!XmOUrC~?OLVX?4~XtKexNJq}Dw?P#u8UmGE!(z_Lqb0KuTatzbA_8EMWJHovh(Q~@y?OnMF{2!tdJ#4IyO5-%b~oG@ZIyh%MVi#C(A(Sl?y6nazn z5FKPZ8DH>ZN5cR_X$(sw5{87ypr|z%VYON{8%CoZYUpG2GGLQ>IaZXlzz8u;6{A2@ zWJI&bRx5E}MlHVKvrTDF0Os` zF?KW_7kQdAyGfH3Cn?h9Aqd9lAl*iWqAV`A!{wZXTQp~yfuTSsG4K%Ua8S61G+S`e zX(kA_(Q5TD4$?zW6k{<{7H1aglVgCDIYD!(VZ{en@{w5Dr3x%i)JjE>vaM1cR)7)< zD^bK%K_bO|mJ?-7Fhi?khO3~8bpr2El?ak91uZ^=0Zve`(JU}VBMhH_C(7h;8=Vf5 z%j|ZOW;BE4homeUIRyL<>$Z@L12-|a*+rljB*Sww5P>9Qdek9-%uW)uKA|O6u7L^B z^FoM?O8}i+Bh^R4BB#hP8>aQ3Btk%XcOQ!lv6vPQY1*tNoCIwLyhiSTX=Zdo!>O?M)H}C6 zzP87y=AC=~xcz|X_wMSWTc)q``YNA!;fu~M&yJp40Dkl4c2X7gmSe;2y%w6#m~(gI zCj8{4u8WrrpGW<=_SPMr+Ab8Ao?mnOlbJ}<=T|OmtJl9>d+5TL&hCkIT|E=mJsnw) zOjSiU_Qx;HANCVy9y<`2w{}!r$FzC&a|`G5BbHXR7c4*Wqh1>R=GL66fv@k}X*xc# zX|2I}wOGEnhM&vt`(VlL(f(;y#^-mTH#bw)hc)!R@0zl{xO=>JN3!SNCtFK;!u#iL y?UYhC_HMxcEIe6?-M-}=dxn;uY7O3z&ui0A9M2q184eLq)Kkb9Y+#!oZC=u_ZcCGNE7&=@%62qM-rBGvFH2r+x6=>? z^B}l`=uJf?^Pq?xJ$Mm8@GtP77X>}|$!PuPA&`O$bfZkYBh$l ztJ76yb;-%O-1rzf+R})F0AibM1%8-ltvuKEs}Y&1d5&$H;H5mbOKQG6!x|`ttenoI z96=OW0McSs20*;bN`ffy0=Yp-%xW^wB!%r<9EldYi(17jc4CoJo~vUVX*}O-Hq*^a z8pSnU%;j>_ha{zlMJibdvE53A$za!m2@@ywBJ81%r5^1C)WCU;Fx^cdh|1+X$6?Yb z6e$_svLjwh3w#jJyxP_YuE2d7hgv7ql?d_`n4m`NkbW!2%)z~8qw0#pf4f?fY=D9}0b2T7aAd?e-3XGyCngtzLlBueS zVd+L8D=0J=b#M?!G-;P$bzK#TKrRTNAd8|U<#I(+2Srs?O+{9fLKj;K6KsbLq(Ldx z+sEohVl^X%Hb!w3A-_8+Gj)VfQb!SM%mQ|}Y&%{^6(h8h9j-9;Za}vfqkwIlJ&k;GWBZf8#Fo;tJb3QIvq_L-ADsHM@!9NsrQCk^etYQg*6;11 d>@lXNk9jnA`rg`|^%DI9DOuCz^TPF;{{YYNd!PUS literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_280_settings.png b/res/glyphicons/glyphicons_280_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f9030ea36283429662a24680eb1eb5ed998797 GIT binary patch literal 1404 zcmaJ>eQ4Zd7|+%!v$kSkx;hlYyZTY=U6T9ADFzPa9Y1;;{?_kEu{ zzvuZqUpd;<*Sdl!E1x}?7ADj*K)C&czFm(eW=?SL^;`kL|nB7Ael1c zA((-(S{VHTwh%J4 z3~Z9>OLvii9D{63X@S49%)F2KiW9KYXFS;ZnU>owTdl4_CMU`uN(yjoKOC*<#~~ds?nuI}~nu ze`6!?dF@~8XQC^|R{ux|0$?CIj@jvZ+Jv&Q0U$baPm2r6GwSTrt7GxZ zk}%0#oLL;}|GKFj=qI}$d~22#Uzxr|>{7YJ&H7?%;`=8R+m%q#W*njN%i@l$KZ&&?q7|kntet7%2M{g#iaboPX z8&}c~q*-zNrPy5D2Y@w|pF7?>`HT4vJg~d)@kc}z(JH+2qF7vtdjG?e)G5v-4p00C DGHlw9 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_281_bullets.png b/res/glyphicons/glyphicons_281_bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea039aed7af5b788e4de1f972f85ad1821c3dd1 GIT binary patch literal 1303 zcmaJ>U2NM_6!u_Lp`vUr(D9?mctUjAV*A?3O=8un9NQrgq*Q67<$-E-?VH5Jf7mxm z8juk5g^scZeqP1{pb7D^bxhU7LyIOM#E+Pewn;pIc;N}8K{bRx8!ud^NvOm$%l7^8 z_nq^dbI!69g9Eu-F18^ENrFg5%N{nmNiRAyw4kBL4DA5hzDLIvjU~U0 zWrir-3Be7@<&j}88YGIOjO!W!2UwnS-8im3I>Ht7pNu=Aqv~>ixC)B=c4(6Gs2>`V zN$&3MXb7~-5iV$lPCrh|?V>O){41mt{|pVo`-n|fG*^61xPGhb;;^qr?qGtpbK4Vk}d_Hg?dUMimDSW{w@#iR2hwgCrzrp}Ns_FmtToEC)^7^u1`B zi)+xa386pR;c~ky_P2Kx?GQ;iA)by}kSs<`j6Bl0A!*V3>Q5v{dtWYTO11mL*4wX6 ztnd%){q2+@-E$V7{d{a~KU~~fc;P7?p1NK9 zQ2Ws{Q%7b_&wVd$Ug&L1g7=dr9-5TC-QIWg)~z?>i~qcH^W#t6I{w#B!j&!Y{=|*1 zF6{aBgN5j2^<1)e{g)5lJN?=EyALLfmm2Ka;l{zWkL*7euMp^l`sI3X@(g(8yR8F1 zia-DTY2(Jq8QHwO`TT*6adG?H*R>;!^4cogGe-S!bz$}KVBu!`t19WU+IoKRwSNJ% CVy(mg literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_282_cardio.png b/res/glyphicons/glyphicons_282_cardio.png new file mode 100644 index 0000000000000000000000000000000000000000..792061ba303b7c02a64ccadeabdef373a7212a78 GIT binary patch literal 1412 zcmaJ>e`wrv6whd_v!ggBRa%RrDdNQ4CAlBDyXk3*RK~ z`|>{Tect=Nm)ANw+UjZ>YcUL~OSJPT^lm_R8+So75gNn78w;i=^#O?YfL=w95PzKh zoWK=1LOkP7Qc05oS*3l@0$qb0X=$)e3dzLA4S2Y~A_p3PB3{r`-DV3BqU4uFvZE#m zykr9VBE%x8?qny<85Y3(Zm&zCXc}i2H|_H?480EbP_&1n&|+M)kM%RGCxDkP0!6dr z44dNP)|MAf}5cXl63G`2C$EyV4O8GYjXPS~>7oh96tIn) zC86`kv{b;Tc6Sd{F_fhxJ2Pjgr95Sc1S-&g4sAq=E-^yP*{3W89iXW4hLm%@Cin=E z%PBI;_yxurqL?7V#c7(4MH#`v2ZI4lh;lI>6>x$%4weIv#w|NoE)@6rI3LBt7@8J5 zp-`NUGVx$A$OrtvK&*mI=r$B}2{=I=ta2Ocy(^aGEFeO|N*jh+X_d~b0S!BAm^jzP z;A@kjr09;~apxq<4n0se;-0t_FeygcRSXo5s!WQm0eR6)5%qbe**s^atstBQIrDu_!488N3q zVneT5G_#6i=ysTNdQepmpd>9~$z>i(>Saw^u|$*Lh)W}gHcLYcbTqjZ8qo`x*j@}< zu`a}2NjISQq{nw{D{_y1*P#rg48J%5;)<9Jo5?dcT{$103Q$(TKJ@r!U z^#%K0*ZR@-rk>wRi;dc)%Ol%AnfNKYb4VdB!j)YhNt z%)@ofN9G=y{Lr7=R^PKpNY@X~zO$?K%16GhYTh{fXPT)#y3f60%ZczpQ~l8VlWVot zS1nA=4L6&agQ?B2>G^BxyZ=6r){fouzWV(mZ=b(vY;U(WA%j_VIbzh3o18w0Q9 zr@6N}PZp0f%^l)@J3jeh|C+Jc`SIDtXB&36=6)PM{VvwWPh9=rhiy9#JaM++(bc#1 z;1AsVtabBj@fK;ExI&~4?HQdJ!rH$%vp@AEZNDFW^WT=C=2I6>og4e-%ooS7D$KLf Vyumy@GvfRg6G8`nG`9Wa{{V2g=a~Qi literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_283_t-shirt.png b/res/glyphicons/glyphicons_283_t-shirt.png new file mode 100644 index 0000000000000000000000000000000000000000..93cf71b2b98b08a0572d80af0258aad9265f330c GIT binary patch literal 1312 zcmaJ>TWs4@81|BNW2KcQCea2>U|fVis^d#y$1zRY__k&uB};>rH|E$UiK%b3Pl!|P zVdA2}#KSf&5-&(RAaz4R0%<%jB*vsoWAMPko{*5(v==&w6(pqcRF2c6tHd-~3)>@yPh-Q==G$jh7abDq0VtXX3Ga=skIpI*yhURO@ibYr?J`0IX*kY?+M&8 z3&e4*OqYEbw5^5J04%L8){NCJ6_0 z3j|`i9fISR%R7eMaF8gJGAh!2ib>Oy^xC zlc#xsmoO4eSOYN!mnMR+TdOETho8lw%l`&F3|x$ZLWi zC^=5ZNkeSO4WaHDAa)vKtp`~7kyud+ z<4O*=g1~wMm|EaDc)t{)^$-R$BcMjhp%_^dK7&p|MpId-n2|YE?i110-4;p+X@aKSu^}GjctuMeJncI({973|D2zaKk&TNr!%+?{)KAJN)(cg|3+H$IH6O}uvN`bg#S z#`TFye>BO7=0gTJ2zW@LL literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_284_pants.png b/res/glyphicons/glyphicons_284_pants.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bf9bda8b876c114273d351ead94c5ed68602b0 GIT binary patch literal 1296 zcmaJ>TZr6L7!FjlU0e$7%XX_0Gose+i2+pyk14dW%n@?F|Ybm)#7U^GGGr#gXYEdWH$fhP0{)SZi$C=%KQ z>J`CYjX(u0INb}uY_D3kdJ9(0rluyzd`H0sT!2in<2qiXbP818u7dZ8n4!qN3R);o z8>AY>45|7dAO$*;wpflMMUm#Rf+%tmB+qg@!{S>^b6G_Y6<#6-7lplr_PkQl$^&2c zRG?Z21q#Eo+ikj?q5ZJQaJgJAvBC3ctdWko9x^*=FG>w9Xdtpe7$E3-WMa{r^J7$? zFw>0?+`uq44SUfbQ8;Bx#|#*bW*OH_;_7Qhs0QxQxUY6p?*@RWfyj?T3)f>lH3Z|_ zJ=oDu(Y7}Af;e>gaoQFG9N+>EMVJ)VXM~w6FNY8p&~!B4ij%Jutw6;wv=vd%#Y~PB zWl=42oK`A|I3l9%){0_TmSs&6 zWT`a7R=fzAo&^%82^QYNvJb>6Y6wi^hjrg~hOIKw@{u34{D4$vMeeY4xhs(IaAj8QZb_nx-JUT0Bdha*)Vbp_#al6 zM6JkXG*(bKios-TOF5f3hr};a2>tf`=*+G+7C$?6{>HJxsekX@eB}89`=*I+rf!{FdE$>fmluy7-@mr~ zRD5Q2z18aNO0A3)PUtI*$EXhu?XBk5md39@~MXzdSONZb757<eQ4Zd7|*btu3i6`BC~8Iq*d4AT|TbKUBX>!?vmSX>}tKXwqt&!$=kcExg;j< z^{#cuEZuOruA{Y5MWL&pLqQpO|G1%S)K3P^PEjjke+W*6c7m`u*w8oEyIOE8BzfQW z$@6=j-}9BjU7b7XYa41Y469G>l+tM3hMp~V`_S9>)Ya2yxgW~?u-h7h1;qiFs96I5 zPv(>iNCQP1dG;$1!LU14^qzj$pV}>`RxY4;I)P%&MraI+bQEnx9Rd&^02$qk5?4-r zO5nN{CHmMDm9pa?tM43jK=){8k2*S}@*2_6jz@|DGLQpM!HYS=bcJG+DBBg#-V>7q zURHraQDT);f2s?QTMoe4K+vyJG>vmyfNo|qp1Sap#dsADjKk|Gjy*{1Vb@1C?S3g z3@Uj8673md#LnufWx5g4>p??Dfbwn?ORlq67O!jCswSEQZ@V^v=&&}#z(kYlpbMj`uXg(#t-&y+P9^5!uMN?SU0h8;I0qpgZ6vxHjVT4H`w$SS5}yN z4c|XEUYKe8{S9;X{go_jYiM0Al-d`^%cS`Tao*DZWg7w#G literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_286_fabric.png b/res/glyphicons/glyphicons_286_fabric.png new file mode 100644 index 0000000000000000000000000000000000000000..24cdef7d256f4a303b0d9f18c532430e79a89289 GIT binary patch literal 1204 zcmaJ>PiWg#7#GXfnk1opQ z?1UXgdn$#}b7^TVh3ztS$f3|d$H*bOwYQQ(dmOv0$M)8Ka_l6q5FzQk_v!n6-|zdU z+p8zD9cJo5>>@wflnf#q{%HQ5?%v%Vb@PIqaGplV=uNS)a3 z<_~|9BF9bq=QWzFS^G|NXpps2o$Mfp0L^j5#X)2{8-$@2>3Cs@fAjPik36@;ugf*D z78#`LEpNqSZEL0BY;8CNmtR~!#eoI}0>W%G2>dY71|@!ISA%^j7I-vNVH+j>fK;=# ziVPYPBxiFON5mK@N*2${ih}2mBw|Sr;Z`zuUXv9~%A?W6gSXgiYjv|S@&%_7-(@V) z1fk#WXZyJmmCfN*`J;;Q~?AU@y5-0W|=Ft$P7VQ@8u@VnV4?+l{ zTJ6wqn2ZtyDH8^EB;c$l1VI|tP&;9Dazx`q?WD085ur{J+KU~iM|*Y*hTNU*XsqZu zhk8*j_J?u0jzD}8kdP%n3J)0pbM0E}K>=;wq)spWS~W|2ujjd%B3nwXAS$Y2R4_Kn zx?)MDs^$$#H_G#3K6REFI1U6!)&;C?m93mvutcSt$Jmkzg^H;w6;)NuysYNSV{A1{ zm>oJKb(&(mBdmEURx@H^Ga5H2^~bHU+NF#pT^b={O+i;`w&R7V;A&dQ5myp>KN7bR z(*O-ip?N1T5U~o4mWLQ62p_{q%~dR^tmh2bvJ{ygVclaX8%GX+|6#4XV(Mbf6lDYR z0+4YXjd{!`qaM|LHrn}K+9#TChaE^r#wBgL=QDnx<8MY?&!J&b6w)5_Jpc@M2Uy{l z#i96E(~dP^64LGA2*TlTh)D>O8^egcwl4QzysuYHy)oEty?g(DabkKx|44eY-`YF> z+0Qe(&7~ZkpPad|6yRS<)05rvJAX|+`Kc28!L2`dvCE%px3({DZ-{p<-Fxw|bbqOG qVek10+WEEk@2k1(^;@5!Ke?BWAO8N;*KePu|BU2NM_6n0s)jgnR?Q`z8Q7!L%UmiQ;NlUPY6Cw96BQc9X`MSGyGeUq3vwrk%k zPE^5Qplz%}L*i#pggOKWX;K-`0%DsONQf19-~}{wQb7WB(m>sKU_vTFT&GD_iD{PY zd++i2&iT%tkM#HTwzu8WhGAHHdbgNG>lXBE-MAjTJIC{7wA>A)Avj>>VMVq9CaC5J zz|$qU0J1<IJ$~?j=W+@FnidlRCoy6;97;+;GSNeYJZGMPwLl~Zs0b@a2`MNF48LF2-N4ef#PUfS$k4QNrl~hurN3xG(G|hC`J@Om`0~?FeNbwA(&((iDQWd zR$Y^_X5dRJ>a&!)*VZvhFj<1#PPxGdk5R!Y~T6}^T6xpUvikv_~zxqe=Tjp zpI*5A;g6o1-SZDI)iS?v^0x)w*vI!7|K7P_M$}t(j4yx4b$9%5{?w(3PsGXEmCHG5 z>8CVvSwD8Y*IoF#Jb7*WXzzm-4n}So)aIO d{q*PCd|2(txeG7u@tNMgE-m$m(~03{{{tpE&fow5 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_288_scissors.png b/res/glyphicons/glyphicons_288_scissors.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b596e377f6ac79b79ed945f3a1b6421a1a2e04 GIT binary patch literal 1421 zcmaJ>Z*0_L81IH`WHQz`YDy}E<@)1JF!x6Rw)rUOIQzPmN+wO!le zZsUVGTIA4rG^8hv}a8%rcKZQu8O z`uv{f_x$Uj*5>C*OP(r05TrEPz{lZQ0iR9lir~BF*OnLH@}wU4$&dBgw!z_eI-Pc>J#O7h;H1yzb8JwQ3u?Hm0nHXOF3qaUTi}5unTla6 zx`sLy#cn-i`!UFLIfSGUi>(;etX!gC%J7V6;G~!heH!K9hp*q6rICBiF211EjcCdVi;C&&IU_vZO z3Y5t?&ItNB)G?bU7F>eUT2 z+{U2QF;P-9M^NKbGRGB|%6=e6Og)KaOTj4*U_g*8Y&0*7k%Hlq@Wgr|0u>5+!n7bT zG?v54t5TMa90LA_6}$`|Bs@Gphe-^FWMql66!Ytl#~<0+G#wp37!6EE1BLPJ;%`Xto)<5__x0riTlZ2k z^Jm{W({%ORshNF$jTRm6qmNCL|9oY5?xlAE{r&5<{64)Qq&`13)N$*RvEr$_x67v3 z#tF~R$+fMA@ioTLgmG2jLkq*-1hnh) z*^-K`qK(IwZVRPl*B1ZSffoCoUAzC63k6-L&!3v#{AqgoNXOq-|M~L!g^AjF>PVG4 z^PTlf#mwoEgFEFDH6sm2-fVvR-VYb6`SQiasdHEMPJCW5+kEpCv9aL8)(<{9_Uefn zi!X1fz0~#9X0mTv+bu@kc%W+Z-V>9De%kZyHR7|D&XfNx-6-EMSnEp_-K`1icw?aw idH*qW{^s?`!u3e?)89&CcOI{Fevnb2nV$&l8~zXQ9O3!^ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_289_bomb.png b/res/glyphicons/glyphicons_289_bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..11d3d7b4154501cf35d487f7c3ca7d2602a77e96 GIT binary patch literal 1410 zcmaJ>ZEO>D7(ZZ}W3o)xbj-HMjBNIH_iuad-n_fI zb_oU+BqNe63kw=$gb_a&14IK~c$4WOi5kBs8uSZh$r6OZGL-nj2mN2yjwKQ$-}BakJ>A>t>zeBj1gVck*f@NzgU_?IHSl-3WoN&Au()0;p{1=M-T+8I)CK?= zRrm~u170k=`8DW7kX3i2WUtj5+s+7@;^b``XI{}E8bLa{@;WaJ0t+1g8Ab(?cLDMTQNK817CA!-IlP#JaYiop}a2P=Ljwc|}%DChx~eeip?@B0Z@E*i(uEW7rW|AkvX-SYI6gEq;4mK@UL%y(G!G ze7-Onpu%3Sm!&;kI#|I*Rny{C0oXxptn>ie@klHaG5~LBMpDz{%Bb{YHA^$InvRAN z6#8O}7bMkIY_dC9<_ZkyEg*&sO+iboV5EmIAV@D9G#cjUg6Wg+e;lj;7cE;bsX>h{SM6MidxJvSd)6(SU4~C0VlPgpqkQ0}J91L7LCW z7PciL7xb(oXsX$X+cPLj5Kxj9vG_8NCH1nQtyscMu*IbngomXi1}fZK1Fq=C&ifk> zWJP&AWcT zKmE>FpSbVU!JoUTxXGLC%?-z^#h2@@K1Q`giubZJ3wt)qe7aEc{c$=nvgY$YkF{9O$ZT=y?#WE?i`mqz`aP$T@1I{m zC1#6_+P5dDiHY2<^Nl-y`(*v$$la+;pMBLdaD)AE!FlHS+x>5kTvBG3!rbP+pH3my WS6*qCigi8qzhac@W={uGBmV)*QQndO literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_290_skull.png b/res/glyphicons/glyphicons_290_skull.png new file mode 100644 index 0000000000000000000000000000000000000000..aa96a988aba356cd5ff92fdce4ac0441200399e2 GIT binary patch literal 1407 zcmaJ>eQeZZ81F_v88^kxLo`x4GKO;3_HOOn5_O@LBfzeglU5~XP`Sx?b4xf%5lqz@Sixa27^JzhR^4L8XjvAF&GmA0&I>sD4b&}ci2 z)+Gc{)*Qhmr;;VEz?A!e6f<=dEtZ0nZ@_>c8Q5q67^4q{Pr?)9kMX`p*dL{Mo~E!8 zR$7v>a^w*3KP(@hxiI192r5cqI3y#9tS#FLDD`Mqu}eEecKU=>1g#e)#3O->kW*}| zu~!*1va+aaRs-(zpdv#+akqfQmsl){mo#lz6HbD&T^vDpSR7)Y!O1n@i2i=*DHnoN zY>ac^RQ|%dhlD%!5UyueRXtR(^2hEw502cuAyo;Ny^l0i)^)FR_jgVvqt4Rdv~6!s?A=h9I7*!Tdq~^I{m|`)!SG6 zaqPuCVr*{s&z@_Wo_pohhetXmkX`Rjk4}Gcl|1qF1uUpp(#pL=5KhIJR?zwVgoxc^}1vT^7vSZJar~_V2E`j_0o&AHD2y zpI_JTz4k5tZ~dn{duaVk;kDb2d=k%mxwFQdeXHYYdZz#I4(4!dThqz?>rcOo6~g0P z$y1-Xr4y~=Z$JLz^kuVUWY{&)`ODGy2dJ^%w4cWIE&pm_`_Hq(&m1}PPvi16$mZA! U!qnK{tn*8Z^R3*Qk?!690f=7TO8@`> literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_291_celebration.png b/res/glyphicons/glyphicons_291_celebration.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c4e1a6cf06f8540d8d715be55b9be2d84e7865 GIT binary patch literal 1327 zcmaJ>U2NM_6u#+T?b>w=F`*2QX1OarS`+`IwiBya>)1{gX(?42K@cF#v2PQv{=>c@ zZke>SNOaMp2`0eEXfW1_1!Wg)>SCzvK8hK5!8Ko;tPtc62~$1fQYEVn(1W8zwUfZ5~h(Q zU+0Q+(UW1_JhSA(xuu!1zO$_e~F(u0uo~wW`}d zSrRkdO~Lkx#XZMP&@B`$85L?C#UyFUwxhf{)&VNPhcq5(9h4V6NR?pVHhdlTV}7Iu z#vG z@IS07@QOsI6q=J6lEP#RT|_3bV0T6(3w0&SjOIkNG^d6Ok}%-B*02zHx@IkUbyIhp zV1kNf&@wTgBkf|TeI7gNeM8%`#G4R_dnzwW&W4qpc= z_m6#cF-F{NebRp}eliJOn_hnMc`ttC+y3=0z`%<~=@&kD>BEnox;Y_ z4QZ#a7LE+PcTajSe6ODuKwIQ z_*U!Rt&vYRkIZI%2-po`>-XbR?aj*N!5ho{w?AL4X~Owf1C$Q6g&&`(4{d%k1o{qx XKL^aqcdz(gMt@-ibw;_BJGb&5%{Q#? literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_292_tea_kettle.png b/res/glyphicons/glyphicons_292_tea_kettle.png new file mode 100644 index 0000000000000000000000000000000000000000..aeb82dfc8be5fa0171bc6d1837b2ea9cd73e7fda GIT binary patch literal 1444 zcmaJ>4@?_X7_X8!G6#|^lhDL?JGMmJ+WS*_cRlGw+iRiA3RoH?Gfs}XM|*O;>+Y^l zNX#Z~aTu)WTt*fNm`r6RL+2bO3X5}Qh>O#yn;9mHCK7{2CMZFYsrat6jKpP^yL<0_ z_x--__x-z`hPs-fb=Gwji=`-7%Z1@;g->bWeek{M>N6#9DKq>{Mx)wlbnqImcto`Y zAi+2v1!2I8o%=oqRTfLZO)1i3G=+Avf*QB;rj9)oPe8QAQnfRc;Dt6|AT1y&DQ@)l z(T`C?65Z&N&JZ3-_&`jm?b1MFS6xKtY7<-{x^o9om13cRI52o56_*vAO}WvmT^8<5 zF@_>p6{F3KE|Y2sH6T7!1Blb^un9OpAQWXMDxDNXY)43(ATb=?l#QrlofJ#bNbW+R zH%)A1!(1Te3!dC)%rFuxhIMpw*gG6{Rf}ST%jGg{kfaT2*z``t;8Qk5FV9=xfG%iK z!jM!2F)i{fYSM6{km+&=@kA)JVp!30iGnG^QhWj<>^K&Wn{j2ebt4RJ)3~Fy9_dT~ zEDUrtsR^(it>t+z%-!7`{FnX~np1PjQ^oGK*E zuR+d@CX!R6!pt6&B?!pwma*6>i&^oirp;@@Nier7BM1*GLktu+xf&eN z@Z_UMES7tA2RTn9_5Il=W?udjSzk1CYrlL&xzc;SaPmjeTQgnw(B>OR`4knSYw3y5 z`N?Z1(87Wb!*2{7T>Po*vkzjYMnV;_k%Q0U8|4FKfh2AeyRMQ z@rCrnQ1#`Kt_#Jt9{wXf@J;ut{bRMqtE2O4>z5)&+4fyc&6P^+pM|eoTyxAZeQtWe zi|kpv`CED`cfznTqxZ6z3op*pyj8rXYUprpPw|2D#JhVlV*ONF?cQrG-+K9zvjYSB z&K$XV@$fNjY5Ru9&%APSfB$UXyzxGtv8|mybn5M|djDOMnL($%zF0SRX$vjBUNLk3 zw!cfaeKGdsoAR~OC#{YA_;AT$=fVqz8g0FUOU<)AADz}_ho8%c{-3X>-wO|O^RWk{ zU%wkaYMo1NUVrJY4d*g)-P7J@AM_25&W-IFKmN=09|kQ2mUis1@ozIvm74#}pudiL I$J^ZfA6u6H7XSbN literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_293_french_press.png b/res/glyphicons/glyphicons_293_french_press.png new file mode 100644 index 0000000000000000000000000000000000000000..9a72b438f2e2977a1e2af267688598e1b2bdd395 GIT binary patch literal 1343 zcmaJ>YiJx*6rLJMW7|j@jcL;&!{kpByE~7~+<7$HIJ-03Zt14!W~+-->SX5b?wEOX z=B~R5_#+jn#vdXg0fk~8`RD6LrGZjgq#9BbDkz242St1!#Ud?L@qu?XyJ^7EVP@yt zGv_gMF3ML0wdZNFNDA}Z$g$cE>{^~fe(cYKT{h@s)SuNxB(k>jvzxk>8AnR66r znMvwNKF8$zG^|*=rUE!NHBvC9CJf1>hIf!dbs0NwAkxXYW4obTPf`uPGL|DXO_2=~ zG?Ap1NELIVWZDZL$;T5hgJD?`fH*tI1Hf)0IfmtE2HzmY4$3@`Ie~0m6pj{{B{{EV znz8UHNmUT?Wty(lYVlek?geFq}O9^*w^x)!q5mTA6cGDMjrKX zuZofsX1bJu(`WHXOk^}Jr6kh4rU9O6V$BsLYh{iB z|HEnmP!%SjGJKk)XiUa5WMm;5HfL0^QB$(5Xij8XcgwgSF%y>bs*R`}WqZ=EScd0@ zLv%EQwuJ!=X$ecO@YqnV7}}O4-h@b8UO{|VUSjCt%?h#qep)KbNxdp=DWwQ zbsSy4@$dINap1(pN7mh3>m2C4e(d_D2X0gSU%e%pJ=Gv!}PsebK%9x9O8t z&mS<`j!gU4Ru7z2&c)ySWB!ec_bq%*-#)IXn?L*DW>;_bQ^u|1i~Alc?^$jA82j|a zN-+M-CI6FC2XD;=Ys1BdpYD79hoj`qw#zS_nVY*X@Wht>LkkBBANRbyFZ)sH-TlX| zf`xaAGxFts7KR@TFS51ypI-&-v%jc&SG5xtUMqe7*K}`p^p}>^M%4FG&m8^_%7MVL literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_294_coffe_cup.png b/res/glyphicons/glyphicons_294_coffe_cup.png new file mode 100644 index 0000000000000000000000000000000000000000..fd32c4c73d0ac690a0fd95514dbf041031982916 GIT binary patch literal 1350 zcmaJ>U2NM_6n2|-Dr244*a|D_xOhXfqKSXfIF6OHb!=w~G^L~w1o2YGzD=w;wrk%s zZV`wM5F2};50d~PH0^;OAx-c$l?R6C10awpgtWmE>IM=*8bpW((4=skCS4__S$2Hx z@%hgA&R@>XOrPxEJGhr1i2m#;Igj5*@N<9P9{da4_j>~cQi^ESo=0`ng@mZvB?z)r zwG8u6)t48)hDm}5-82eCRLo5Ynq7^kflb7(Iv7n5$qC<4wFQVk36>2jMgH;G=Oi%n z6!~l{N9P;~R*X|CE}UJNE@&$YT0$o$#zE2-u!AZ@D)6hO@8bJ^~08TyyHQJp5_`3GHeS39@Uav zLn#t7-A_93HJ-g;=xF7S! zJ78S9y9eqR>e`N-Q*+H$p1MXs6IP*xJWPsdF~ZD+r(6R!P&H*+s|8=Pa*C|g3|-)2 z3Kvb#9M4G^hLO`Er?4{5$0bFS(qnWy2o^Zl4aAy=jTDiH~L!HZ4Y_n4)kovW?Yum8_FF z2K*1J#5q}{qcRz3vaHASMfYk`f73L`Hj#Q-5~njTR*Q$my(+odrH?g9y)X0`D#S`<)ed*?~0@O z({EfqcdOUo*4}PJ?|Y!T@i-U=ZM_73eU$xlsOPnz&<_`zJ@oK_6Vh)@c`GzIdWF}| z9lr3&Vdpvb%_o+Q_WXOJYyIlnB1!ar**rAo9KG`GtE&I*=HTds&A%`I+3gRDFS4uO x3`|Y#kKEwzA-3*4G`Ro!hhIMS7}2$dcxUa}Gp|4W`{m%DEvrn+m(p{m{{vkhwKxC( literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_295_pot.png b/res/glyphicons/glyphicons_295_pot.png new file mode 100644 index 0000000000000000000000000000000000000000..ee4594fb72f79d1065350db3cb9fb09acbb0cf4f GIT binary patch literal 1290 zcmaJ>U5MON6wd6_IxgFnBBiZZE~(V|Gn3rRCX)#}-N_`G?x?elvs1c{%_Mhb;^xof zj+0$b2BAn5rB%?j53(Tjr69O0f-GXCRa*PdmwjrX4+W|Cp!Kn3rQXcWY!@sIN$$NT z=R4;+e>qi~J-Tar|2RcayDBqkovhE1XHRM;dBfN4eoU5qSewUlUJLj108z5(H4&&d zdK=Y|ZZ5ua4NXy0@-M3~kLRmzNQUQR^jIeoIX*#C)YNq3>&61Ypo!X+TcH15`-ujY zS)h;eRkrFYsAJ761!!(*wqYzS7I+^RW$%OB0QBxaeX%O1t5~kp&fnMqv5a@>~#G)SF%x z7ihwCGX%%4R<{hh;V@AoWlW^|49u{Mjnm?N9*7S zOmg>RMiY%X>d8`uscl8i~Pnj+^!mE~EXl!s8`^7*nV3uRFh z)f_M8N+WE=4YBSTD0UiStw-3&Ct@WfKsxq=ilotUBu0*e56MZ)mNl*-6UWPO!t30DuC zzA;uj_xZ11JxG23^!Z}(!lgv#Pir}Nd&jv~sFe?&+J9O^Do791rYL?AD5U5G@`;TCsvN$;)g$CY{+e$;;RgXFJYL>!6orleaUEN%GR< zjWe?d($-5WD)@o)pqE~R($d409u)NAM`=M&*h8&{_Ndghlp+*GUuI|4g?@x2@4bKi zzyJUD|H`rY!pqxdcFb@bx4pU-HrV{xWEHu59u2=Mh`8mEcFqnZ5QI{WtL6jPUvM{o1uze;L1%9ML zyJcaWRI66!ZIU2f$ro~-1OTt9c`&P}DtM8XB_N9uyVV?+H5Ap5HGX^v%v<6w8x2?) z`(mfE(4jOoM6uuR=lg{`N!lVP7K@n;SSu?X^#7=~F~Bkhzn(El{}wU4g^2)OF2vOxv23w9Hv%U^9?O@_vT3pry#Oj-*;90FGQNR-ma?bX|v< zqHER!Ta8lcMjpzXW?0Oyj%{i>lyrtIJ`iiz334e(nuG+CR;hOgC25DmyuGOMyKAn8 zqfGEZR>?6}l;F3JUr9*Fk4jea+uocHq6=96^H>GS6 zIRo5-bu<;4QUOYe4Fr*q@jZiL8lZ8HngJc}0-W`U5x7yCB_!vgWw#elVXhqv;|}&n zl$OM-2LsFiqun}I++=Yi-qf@cO*RSHc4GwDVPl9<#3nakBl_Bj_pY+>K30Whb8z`m z^YGSh`A54yJa&6}-_6zQ)AN^~|NPSh-#d8f$l=G`)m__W;PlqHTd(YTZutGh559ia zxUlE=$49m9kA)8lpG>{;lEgi6`|mAB>(Ab~c76BpFW%qr$JM(x_MH5AwR7&b1OLEn zYpq{S;+wy|QUCqQ+O;p&u6%U5_uZTSo;h*$v$s!`&YkC`xSzzc*4;V(sqCjybr#?m I>)?_90J`6syZ`_I literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_297_kettle.png b/res/glyphicons/glyphicons_297_kettle.png new file mode 100644 index 0000000000000000000000000000000000000000..13459824babc86eaf455216a2f061968839c21ae GIT binary patch literal 1420 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_302_temple_christianity_church.png b/res/glyphicons/glyphicons_302_temple_christianity_church.png new file mode 100644 index 0000000000000000000000000000000000000000..001a86af717a94a7d4d210f78ac790f195713cf2 GIT binary patch literal 1275 zcmaJ>U5Fc16rQ@UT~}IA>$Vo5ms!+q+sw?J?EGZhbV+6=HqvaDB+|SHot?Q!#+^TB zZklBA!78Yg7O{dw1uL{zNpvQkUXGAGQd^hdx;E%_iFgONW`v zxo6II&UgNDbav+DO{3dK8HU+Z+-H=@dmDM49T_ISyLYd=Mi1Dm;YwJ?Z7W7h&I#ub zDEd|dm67Fi-}o6#G0f14Tdm<*X}@NNK4(!IuH#1p%`j8boyfB15e9Rp;Radu&f-ND zxK5TmD3yd#q@$+0Zy`pNg_)|oFmGoZc6u+E>S)A)kFW(gz854~C(HKyYDA`Lo&`M< zJfCG(N!3cTKo4UCBrct@1qgvGb8u3UWw-~30u*_H+;R#|YLcvp3g}-fi55F`t!xzf zvB)XQHZhJgo^Q9?TszH$af64MOosXp#T2nfCEWm9om7yF4?Gwsv12#FZWsXS(V7ce zILi{It10+VskG)eNcx2$CF46*#6wQteV^vlvrcdsJ)rSW>!jL^5MM?~*otk^kNWrk zOltS&Km$X^UbBl@vDeGfv3cYn9|breq+pK`VXhsBUD80yGeWyXzZQ)w+iJOvCQGKA z&Iqz9>jemnd`>n+Lsb>s%<1__L7~B@gY`h7;T(cBRmIeystR&G51}b$G6f?i7gSX> z6iHR`18gx!uoc*d2Blc{0ake=R?}l-;V`a-p*I+n*=C5tq!~s)ugG9$$+F#mDkf+r z`&?1%9!5?f4t>yTh2}nlfdEx9XbQ$T{Lpl&eHW)uWWt` zjBNRB`KRe17Eai5=k9`7!2|r_LR_{r&N)e_ea&&l_LuF)Bk7 zob>L-pB}&T#7*Yfj>W~3-;G_^dUCtd{c-mEHzQx7UoS0RUjFFsv-gkuadvwA%%_)k e{bRiO^dTmBrZT+wm+T7tJ1Uwp#@G2nZ~q4w0imV< literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_303_temple_islam.png b/res/glyphicons/glyphicons_303_temple_islam.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9f65be89e92d7fe8e06c70a1fc3dbac6b5554b GIT binary patch literal 1343 zcmaJ>Z*0_L81Iyf1)UQYgvpm$oKEzve{R?I>K){+?QJ)>ZMhwCaSK`3zIWHG|7hRy zx)}{Y44I;m5fb7DhSAL^i2wAiZY7A{&woYW zx|SgJMzd7b5kXn+opiy_WPe_r99Lr+v2zC=_XXs@1W>_!)37|jPY^Y~0+ItYN#HdT zIG!L@NENb!xM;fokA@>5m7-~!Wy5rLlx68>afYH9l0r8dqPvACD=-{hzX%k~)rvw+ zO4nndQ-UZ%=m;cPtyaU;NZ58uBpr*z0v`+$LKY!!!h(t)vb=2#4-)WHS9hRpTX^76 z8M7-eK_I3pDVR<+yXx5T>V-ljBYnjo=`cl_W{_9S+JiZ8hsIs4z5Ij&$Q`PbfdxH8imow2%!L70M-5aA$yO`D*Nl`PDivK5 z*r?1#Vie1>Vw$F{PKv2+iVK1T4%PyZCafW>%yY6x^CHEjQZy|yu~=G4 zvT2^@B`(TysRlM)P2fdXweZ`(#=R0hj7w7s(J;NlRAcV!h- zw*tk}K_}~6fvdj=w6trRc&!zJeisH5&7(o%P>u{rpGGG>l9riNG9pH0nT-;4thT0P zjm#0?e^{Agr6d)RsHjL2BqF1!0@R@a>NA=&U|llwU`_->u}Y{QAq^CjiUEloC1b)V z>#A*eaWa@eLq~v`w1Oqqc&w?{3~j>_Z9*Wft{^(BE-|ps=DKJ_d#33}(0c!xk&=1; z=jEZrjq`ZRo~N8wi-(RJ-N^LyEVXoWzNZ~BMrRMlJ~=RV!#jlJ{m!KOFQ z&Ar?<>n~6}ul;ao3ZH+ju=v@{+Yh|Ho;mgS()G@-x1M}s=KR8Jd}h<5HhJRm^6}l= zl^;F-tzDhX%YAd)QtHV3gAZNp`*QQ&!`ol!*mr#0uImSwP2i`C*G@k%(mM6mH<#AW z9d4hxJbB@m)Umat>tfe*?-io$qdj{+9JzVpEPFJ0=1gw*v~zaUyL#WP{nG=t-~IOU zed}KM;@Fe#kBqm^-um~0-$rJ>-~7vP_@zGvnwqh$_AO1JfBG&2e`y)HU-~#TdhkDQ C;KLOF literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_304_temple_hindu.png b/res/glyphicons/glyphicons_304_temple_hindu.png new file mode 100644 index 0000000000000000000000000000000000000000..b245bf80bda00e14349a291b2aa2ff102f4dbfb6 GIT binary patch literal 1295 zcmaJ>U1;P~6b@Z*Ys>Bys-P~oF)LD~Gs(>~KNDtJGD)U8wKLY~V8;i=G`TYqCdthv zcbv5NP%CRIB7#5QvZCU`F24BlVjmP29~49cQ6F>>5fs6qE28KMu6Q$@84E5OlH7Ao z&Uemt&OIkjELG+YjomUvQPiQ*3B5|zo04brI`aOuo4-t!o3T;H%cz07W(XcAzZR>$@7qGBO0Z6-G9*b4}nqH=R_U|Ma6=~dWt{5g6R`Lm{MvbS7nS0MMeC1~Y;vf@zxP0MByd7E@qG5k!TT=>El!XrbLus(P^> zi|q1D3*$gx*>1O+?q<>`Y_cGm%_cs0K1D22(VCCVIORvj2Oe}7S)mhP2l;g3(Og9x zoM#Bry%fBlTpl|1qkf@C$=KKoSdive&r9;^Sx2}E|D$nL>!`LCK(-1a)Cnze9*yGz zFsa?O0}TvqYiJjALbsQvZL!dW9`tcUNP!+B!d$s0bjSgku8you^0lPrnNG*C6;Uw6 zOqLU6Q7ZzV7gW*Uby=1)L)8j1oRkDh9P9@YP1+_{LzWB;WI0YO6aX;zY__PYVo{c5 zT@qxeFu<1l2%EkIlb{LK8Diz)HL;2oLKCB~hLAgGm8BNKC~BdA)|N$js%%=0pD6B3 zPO{GxhR(y#E{4dXdq<%-S7E>bnKYV2a^y++fb8T<(clYeMiUG}6qr8N-dD0g<^=FR ztRacI%4Kv;&;Y{{GPb2)2fMJ}qpFMhlItXWqPV8tBn3&?uwiyw%*;03wV>r#$d7Vt z(u1x;06l3B%kJ~oQ}1iqfhC!QL>!JF*$jsm`ebrLGNNBOr#v#=J0)GM#TS2i-aGsl zH~RRgaXkOsKj%N4b2dC?d`({f4)`y^Hu7bw^nZ0 z-a7Mv`p3vC&!W2~o<6&&S1vpXrHj?g+wb`8*M*fgpL=j)Y~je{*_fZYO{ZU)Akv5c zPM-Vz!=t~0PqyDZ-N@~FJ8#^0wEf=Yk=z4|FYb<>x%++hnTdPHkF<`x@V5BWxyF6% v%-6H!>#qcrgY_@3{4f`f{5`+1Lmi;Tw@&}~@};fmU5MON6i#cYvUORtQf%#N$cSyxNpdrrOcG~WGD*fx+u5!&BMu_NW|O-!ar0+# z$H^{A>ms5e_~0tmr)^8Y7U_daOIIHX`XsEli{OLw$sbCE`uiZ1t$H&%vt6(>B)RvV zobR0P{N=5&(WeIob`1~&F<3gNRq(nSKRfQ(ir?RUu=*!nb|Srws{SPE7$GDS%b$Q` z$u*j=0u5{WrLSO)Any9ruGLY!d_*>Vmo^d|I(7q$CWzdDI55m9h{y@pw7op_+vk@l z(zf!{b9|XC2P$mY2WLW9of)l}GgGEyQ3v*uxmd;qT!;)Zb{#L0<2=>1E8~44W+<|& zf~NA+8mW4Dj8y#)l02PBn=AmNAkbih7XiR&?$ z>Vt9a?(C?qXqoGJK|6H1aatw=9q2+2MVJ)mGQ!N|qoIupXgHd0wv(?VEl;)Ewj~R^ zE@UKD5CydefL2fhozp}ytLlnc7-6%Cv&6tgAePV;#wvmcKvvLLp`ZewbCOil6rm`J zqL$^wY@v@Wc@Z)^6DCd*tbGfs-VrOSAvBO5)_mXTx5`+{M}E}u15&LDrur)y`5txeIh%C*Te})TX527JBZrfbf$xrZTeo6 zW0D?pYz*k`*09V5i(T=CrtNFuNl3QqBZv>{LkvAUxgj3WZ9C1&c)Tx`G^G}Qe`RiE z@Hly|c6K|vIVH`W7H3n^+o?;N8rvV+diMBU&eKJe&7IuT7=Pl!zu)-e z`S<51*u^jQ-2cogsp`jvS3Y~-ce=j$`Y&7Fd~HvhzW&ZPmlldQPO%G%w|MBwAGggfFD?JHeN5D57{4iD1V#qK&98mb;$VK_XEOQBAW6s17`Dby0n;%2jf1C4TN=&xlSIop1|5!E_+1uj|NoH)?zVG|= z`906?`D#Z^_1ePxMfnbgqcBp%#^AaHJ}>6w!uRO&doIFdp~cl%wOWJK!W+O55Vd-M zL=?Ue!~ie0Zv7EdIvjH+qvk%Xxc6V_qG^A zk+h1{>_?|b)kSNNkY)gcba|WtP7nx1xrhpqqKK7<8z>#0a0yXWMYQolwJRwyGANbgE`))&dJm!H{%I z(p1E@$k%HL%a1~)(;+B&G&*BgH8Y8VDZ`Syju9>#QxrR{w62JU z)DngO>(Nk}1;gAu-BDIi6lV1FgdwNn6a@^(Kmn>{LQ+JU5oFH1Wk|4qyv%As!u}dz z{b(W~i3~+@l*fltG!+UH1RD%coSUU-Z-@(of)%*ec4ixx4TKVx2(bZ*CJ3*Wz^Pz} zAULPER$Z;}K}H7hZ@2W1HY(z|IaHp^mKJgaH5ns5^A?aTl}AH;gG~@#psMdvv9=sXf)6%IWGYW`g0-yt}!JmRvtodVKNMCCB5Z z=auhHk(8eIa`)l!x4)|RbMigr?!w)tf9iUD!MVl1w_iTiKYaU_!LIV*ZH-*H(R+TR z=v1up_Ms1p=tn1CdhNl*BUi~ER_>gy-y+I;PaIrfzB1Tc@RwFS_eil*8u`1b_>=cL z_fFPtugY0f8+>!YRH4~EI&fz9_? z&gusaOQQ#r8ZZ*5I5Wf*6g<3nU|mP#xH#2L?cI6rJGAe!b&D$ko7W$`GkHr-Z{!KRz=DcGfLR-m|?jhmAyIXI4(B}VbV$+R(inlnHcXgjwTida~{@X^l KYIY#FWygQ1ZxG7> literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_307_life_preserver.png b/res/glyphicons/glyphicons_307_life_preserver.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9bf24df2ed82a763c37a60ebb7927c3c597582 GIT binary patch literal 1400 zcmaJ>Z*0_L81FVVwmHU>#4s~s=^%5CyZ*UduUB^)y|(Ahcyn$i&M89IzPD?x*OvA@ z?shQfx4XGSv}yak z@6+e^Jiq5(-y9rxVngFYjTnY)i1$lFXx;2R^>ygIkdNF&ODmK|;INf~dBp*kpjl%8 zk7t!}Fa#8BV((SZgJCtd^yCN}Nj$}?R@Se0I{re|MraJ{=_}ZZngI|W1LL|GA^yDZ zC4uW&gm^BPpc1wS(t3Z<0mH?Cq*~0VVU6hP#d``oGLQvO!3$Z#booMrDB0!F-V>7q zUQ&UX2(dzHBr%AKmILshKj2d-n#NhyPj?4dmfnst6wQznx>+CH%?DYY3E}07K;9fJ z#SclbvM+Rs5NQZ)o+R`6ygwiCTh2I1hr?md2E+J}hR>Zap;GXfZhOUo1YFh8ZKzu& z?pajEtQ?FGi0MiQSv!$fHEg=&M4^1cXxvlVO-|T=90IPD zb5vB1RC@)Ca`*p^DvFxAs%PgMqZFs6lE462U_uv>qDzbrbN*>ZM+H<2$x?IP*SHiR zayeb&*`Uk@!W7G~VvMGxsKCmM#Bm`}7Q|>b74n>U2G#sE#_ERyi^KazXt<~=1`*{1|bvxBEwN!ASN?W zAs_~2nGF(UthOd)mBTk8IRg^CX@Ndq}Sb4IKeWyA>?C#$rjlrfDmhXcD~b>IkC4>JS4HO|FAR z^!nC~OBhy#$0Z?IxIVk{nft%On_lnSQQf?=;hh8Pw&GQtZyz}HM zBE4{H*SW>TYO?j{mCes*>}#NS`cP!cEBh~h|M;bjwg$g`_f-GDV9oqX6UCPIy5hd* ziyiCgn_6Z!_0+oWesrN>N82actzCm%HFH?=bq*4`Gsib$-?xu z$(d=hF8%XcxBuvzUO0X8#%I4jTlnS1)vy0L^I>LjpzY4Lhhr~)TC1LsH>SJlI#R7w z$5VR_o;q@AbbtK)YfC2*eUBY$+qY>l^ZD}S^XHi#cAx#Gb*lG+rE|ZwU&Pj*Sl)8` S$7##^7sllQ>1=e*tA7LAS=9Fc literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_308_share_alt.png b/res/glyphicons/glyphicons_308_share_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..ac897146ada518e5302b98992f56892d10ef142e GIT binary patch literal 1302 zcmaJ>-EZ4e6n8foLaS<3HOdM|T-;HLw8S5YZxWNNb!>-3YD$y_$m3l5Cb`sKvu~E9 z60Bnr0*MDGPy7SCAc2H@BXb{^#WGBw~JVt~G5yP@1Kup_%N-A7`M1tS%*Q(zBCHLEqC zdI17bGL!dYg|q~ra1MyPAaXptVM0jD5|qUZ7+);)7FaF0u9e2V=&8VV2=Qf( z>-BocUMlGYZBEGLa*+*DOi+zPIB<#4Pq^Xo#Da!GGr&H*urb~*bLde6SCJ4Hi%at?*ma^HbmXWfV;sjf9 zLt?llikwDRd=D!<5G$(zGKd#6JkOrAO0DA&FYI_eP`4mhtr{kFBf)b~CC6M*fG;7d z6nG98l|sh%VZaMn+GrUXqe#OS=qZ~j>0(hysgkZki5+9DV=0?NP67YJ>KUjhd`jab zRbV+v#xiAsiH*iRs@P<_vvJfXvTe9+nvjHrT1M9&TS&~mp4bKYxW6LoNDKRrF2m&u`OK9CuX-@k2#J6&@n$YVT4FyZesQd(;MfjCBVCt9TDirsUlXggpRr#^ z+5?)(RB5N(cWM8E9VQ_T96;iL;0EFXN3N6DxN(@&eVrz4C8}EX^Lt-^Ki}`?`^&$r zEZ>?rzi?gxSYkaM7M|WA6cQT#)FpL2$2#Ys{vEyz~jykmKM-}m(Cr?G>dlm6#wIMfR zllJ`ETM1p=T5h>p8*bSXZ!Dq3p$-N@${jQegDBO96>(%&hkYiNL^M+28x`?@)LLT& znJl45%@=a6j4>i4kBcfH_g7CVtF)7NN|d(_wvH5rOGJ2w~i4 z92$<&aiSn)($I+|oR_6A%;Fkpr@TpzXq>2>wl-rbHEGKFi3{~uzcv9w?oM|!QS{tH zy||wQqc}ZRq5%zQ#8V)JM~r~E{$t`p0iD2NZa@24w<==4?|V8?ZBi)9L?dPmW2rV5+uFRB?>;j-_l8IRL)E+9hHca>0^S6N?g% z@m!tzJfPzqH3B}~1%B2idf-G|NJ!43>rOx5;!-!*jC;PzqI6NpdNA+-FxnkprDGOH z;$uxa(S%9Jwud7Khr=PJ5ln6ZBYJN7qXOgIsar;C_`cI_x4#lTOyB%(_tj_NZScq3 z#mB#1dbKy-?(E^YNA0)UKV7Kh(3|at#p2a~gnvKW-`{uJR~Ei*ul{g$c4O-94lM6> rX5A@!XZEjOI?q4dy?Ob$F^8TB)z>eg-3R|(&;BNLd)fN4+TQ*j$@hI4 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_310_flower.png b/res/glyphicons/glyphicons_310_flower.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffda790d14991e93127e1bc202157789e2eda10 GIT binary patch literal 1427 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 Q2ZR4xRvDHLr#J2R4-09^CIA2c literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_314_table_tennis.png b/res/glyphicons/glyphicons_314_table_tennis.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7fb589e5568f44ea58d2ac89b2c9823194b076 GIT binary patch literal 1451 zcmaJ>eQXnD7{4)`1T&SeF~-0i2N~#W@2*|1?YU#Ly(=rTW41M06tms#-nHl2yW90j zKQa@xAqf(uDAR;LG%lGjYL*$l5*ZB5VqgwG5Jfg!%o3G_D3~l!fe_#8+Ob5!^`KjUY&=zkvW}jg5CpuK={^hU5Ty7|Dcq{J1|FvcC2rvj9ZNc{LNtQZ)u&Zn=mI+00V0yjU{_C! zW2huDSc^SC1XM4GN)1^JgtARxA=@RmM67-XT9>AwfjH24G#!u02|CSSIlDC68)6(o zb1HflgDsM34K$-(MFXhaVlxW_Num^GA#3dvMLvpJ3DSxa@TSaUEp4Z0s{_qn81$xz zopg}(<$b{ugGF^+rExr!N?B4ii=stv(&cg)Hmp`N)G#M9vd*W?a$-xt0t*s?CaJol z$f#kF?@*FDgF&W?A;i@{V9BtY$R`S>3{UeaPFe^&9yj93X(#j`xJ~1Z+KF&R1$Yo7 zl%yuWdUS3nfMM?L?x>(B3QKxwQj6u{6a^f_Kpe<=0+J$gj39G*k0!wa@-bEslEzm* z%V5c*B+`_fqiimMa#CI&NwOX{#aUUW)8XaZUQaFIFq|0%mII;0B0?-@XYFpEgCi&p zN0OY?e;l&Oxzm!p0JIFNxuhj405$q{l$MN8K?!zl%vmpU^R0j=+SN zMbOD7V>-4Y63eJjNl@fO9d7hsOoD*iZV`(wvzQYvYubV)oCIULG=lK3G{iuLldHiI z4VGO$f*?g9KkE*sr{5b4$e$ArKELVX!RCSe*%hWYYbJ&oHulPwjwOe8m)E??cm__d zS+VU5RduX*bkzbfUsdZnTKQOaN296!=*`(F=j;CCZ$0r`%gbA9dQKLdd-2(q`iu2P zy4P0fy&siq{U&{8=k*Ui@j8bu(+6gneV@Kobhx5u?qJunJ2BIReLMd>Ra+8^Yg5}^2>*+ z%YK}4J+N`^LiYEbf7ji=_J!<~`N^+NwK2o*UML&u-;`|J@Wv09K%K|*-MRA2<|E?+ z^N}m!7dvmv_96X0oj-fEqSRFO$GsPCOiCB~r~4Mh%RieM$+VZuRo=XhK&GEM)OgPX Q{j~A>^m9$@h^M{pKc6@B_y7O^ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_315_bowling.png b/res/glyphicons/glyphicons_315_bowling.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0a2ede53330314653003a1c1daaf852cdcc50c GIT binary patch literal 1345 zcmaJ>ZHU`s9FMo1oJYG4atG7umSwoz#@f8JNz>5oY?IV=UeBW~+lhk9B~RPXye)ZZ z+vC1?9O?-Qioy+LAU6hn856&3cCfkW2N}%0h(nn;<(xY3W%Csk^+~V29XJ+}JkRsb z|M&m@{%@I|7=I)f@VVZq!ksesn?{xfhldS7j%{y@upP@aTEy9^tO3$V0iPXRn< zDiu%wiq_iyAxL7_njiGiB%I8T394;I6kjLOG#!M-u;ggdQPdiM_!Ow*1?SkU;cuAeEsR@l3-H9ig0y1C%sNhZ0usoreB06>jwD-j%fp=73 zEk!Jon#@n&qU{2ljYPvLMbkLPMd%pIar6$Hp=gGr(9MPEn80!Z6UVz3fxNj|Stv-^ zt}k>-5mg8sfg~G^Mx+sq*lvZS6N!XxgJHr*BkZ*-s5HZtx4CCQ0-oyX4%BT6_bn<@ zb{(b&#B@0X)5+&o3|n3|Q7C0(Q*lT-LXoEF$JNpHU;*5saa(P#)N%k>0G?fURaB4i z<{lX3?#_;SikiBj=hR)J6Q`zTv zD|68V#qpe&rD-XX=43|V`M4;j#Y~Kf`_6m=tAR)o(GXT_3 zS)S*mILpT~J#5bMpkk@Ocj{yHTUh#zSV44w0&TZs+eWWdCaN~Hy{hftVv)l~@`|ck zzF?bQ$u3vm>Q4hL>)IyXDTSclh5<$MsL|pmMic-~qZ1#^%1kC56L zIRg9-E5|u0O+_V&6={M*WHeQPIy6AHN7DxE?hM`U6Twid3Q9;=17)RdKw@XbXgO6~ zwJk46`aNjq2+-LrW64z(JK|MM+tWmo;BQw(5FJ*A7+7d>T{NOMHh%gu8t?CNQo7Xq z?8KgDf^&Fa=;j)#FZB1|OQ#1$`xdF$#bfV9XG8nwU(fvBKXf*Jd?EJrx~e|BY3|K( zW+1pRe`Uibe_sD;#92%AAANb`S#Xukf)=wxo+{vnpMU$>tJp&O;ju4Y=nF1Iua(cu zpRXN%SADU@-guq7YwX*LxC3WXTelA%4ICQchJOlNzF9o|SLo8%Wq0X|4c{~ucht6q z9@?^SW{a_{czq@?^V`}JZxyF<_2~TY$7g3AJ#g@YJ%{go?aAjpZ-10Lc47PO@1NKo zYd;X!+dgt`?%#E9NbkeYfh*!uzx-o9-oG9@_>T18J-c7oU5MON6i!)KbZBcqDps(KDM}Zd$j-rg=>lodo||H>;*({}*CMx# z8`$+%Pi^8UjvLzwnu~O?{+#ZSsNgc2LO)6X&2dvF`-$tVV9GD!b`TrFzn3lxeBc|x z3u;}eCl>Amvui0{Set8lYb##a7fw#|Q+*vAM3}mKKMLba?;FCvuMRR(ivm9|p(}>4 zLu#=;&s!wLyjm#cJxP{%gbMPcije#)uSl{YN^qmRJgKWlS4#Zw5+GXYxAcZx9max_ zA#^BBbW!Z}dWBxGK+?7-m&;}5Ls9Zzkh|+-c6{W)#+jD}2@OchGmq{v=~6=g zraLJ_Nxi=7IL?NJf|7}SHxcE6Bt{X-Yhazx2EI$b z*jk)XH})_K%CNy*to1;wZl&0zByAEBjz(p^Lnz5QB;lmSEQmX zsg^8=K*slU8qg3AXS5R1p%eyePV~@?+fb0ak6Ugxq{4JNTunNGN8)TsWHT5B02oL+ zSaFZXfqKu-jx1pln7F%waM)d99K+_Ou%hFCzI+7M`|X-tY4(5p{pTpR&hH;zy1Hq6 z|L)D}SN5MfcKhpZoGVL*K7Qo4mD!1n7ymZ5{uuk@R!*w9`4gvSmi}4){L}5vzSSq5 zdC%O)efLzj@6ydD{im<}bnW8w<@3{zU7dMUT|XSY`cdo0qwoK>UEEkWs~Hz&E-Gh* z?YG|ia_siOcecVCumAt>2e;n%>$NXlTHnWA=>Bl-m(4>Tvj0xanX|t#mrmaSQd*mG literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_317_tree_deciduous.png b/res/glyphicons/glyphicons_317_tree_deciduous.png new file mode 100644 index 0000000000000000000000000000000000000000..2dfefe817b1a9a8ab2d9fbbd7a6b41e978041710 GIT binary patch literal 1308 zcmaJ>Z)n_P7>^XUGHqF5FgIljDT5WgByXxRC%kw^Y ze$VrJ{@wFa<;kI4`*%?kHB>xmRLFY|dG-zNAirSm@DIrWn>9R*>bPx1kjgt~7ScuE zYQPG#ocSldhFOXlxb9YKxK=u*+Q?_E#D?woAwg4AcA^tn_8i3YENr+zj@kI=Q-*e( z9CJb}@ug6QP50Ki)tmR;D2yl$S3%|Q?PFu*Y(1-gs~bM<)Sk_K9yf$UcDwP@s+R?Br%Ni?N& zhL;pcF92X@dC3$EMUizguWRGHoCHf8YzGnz>kzB~Bw5#Fz)KpznnEU1F!EACQ4~WK z6}F}FY18d2pPv#v5P&}o6)?7dy?lSbE0}y&>#g#Ik0ZEJj@(vc=KV?wNVgfxnu@C zmjJrbCYIagv8&!Tw0%pm35mG1g5A$-EGd_5QqQkRz-&W_B;S?%2?|6ZP+dgcwsKDc}2$8TTzWjT9d zL;kG1G`VPVcYgKVg$JMV|5zFRSXZB2fr_|Z=FGl*`J=h z@yLON^~nz({YE?a_Nj+nKNpSddFju_)Bo4u-gCt literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_318_more_items.png b/res/glyphicons/glyphicons_318_more_items.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7e6699ee676406c9c78c053975e768e382f3ec GIT binary patch literal 1208 zcmaJ>OK;Rx6t)zg2ocmxB~l4t92Ouke$DvWV`UQj8Zr`-4wFG-8OOevv10og`wlb7 zipK`{16@`~bkR*ESaidpl?qZ3LZGTEcKiVlf(0O?^xVlzh*XMY%jX`S@0{S`zq?3Eij(JET^cE#4tH z<~6Zg3S>p$5fYV(hLCcGS7k+&WVlgDshAovRh=JS0z}Khb+hf($Fbm46MB?prX&pp z194CmN#2!|YPHIIsA>r;O2uYM{b4CBW+xt8Tm*TP(TJox^XRXUKCKDBbSH%*Yc_Ws zr^UEXP%>%gXObeyQj)N|M%D#wU0hgI&9< zpU0y-!$86@PH;*KAf=2L0dw<*Jc0)Lu}gwJ``U18Lcbq{Cel1quFA+jPF+!4+d`h| z8iww8mSb0BodshK_5wj8hJe*vPqk#vk&y!}^VDj!?pmmB7>28BhHg)=jkKVC8ekTb zVI#o03ep{0ugJ)Txc`GSogDj=|JDTSqO&DXtJtdoD4uJn)Jsr80Ty|y6 zQ3MIdgn>yT8sqVdS}`3fw)npFDqV`j|%l xd49q9W&iyB){~R1H+tpIce6kHH%0E-RqoPiP!f7$2$B7!znIC{YiO$)Se2^KUb6XNPRd?EG;zWRrBWnp{LDGjDgNnVC18 zdFyT>f(W&Qg4BZ$+lw9qg(^L_2W=^$H>D?~)q^5bOM9sx6k6Zg?5+Vzhnb!4ee?ak z@Av)N?d8Q+CdZ#2=QwV%TCwW%J;k1}{q*6+!m@M z*WWz(J(}aVeRqP!8d<9?=pK#)m)QutD4}SMn>*G^TyFyru#Q?mT;lIu{+b7YU*cEQ znp8_n)D9|JDO%ZDYd`~Uj~XKE22bin3HF973xX>3@)BVOZ}!^x12#NdMfd4 zLK0mRyWOtP%?mhfiE^=6WIhxnM=f&MW=z~(F3zTh9xRl3X^@Zr$AEcs*KvoGc*=A) zg(#`jMvmibP$*h5vF9eDEJ$J$vAp`$8L6ZHXgtz7YiuS+tfLHfQjhkdIXwi^+C4td z(9rirc1b4<`+54Fh(Z*hm}Hcc+-F3Y>q}`s8|a1>_B!lq)hh9wPT=cMwPC&}K@FOY zEL&v*+KQ!V1=BXn@~l)~!I*=+K&laZid8LJF(gNlph;V1E5)K?8PL%*%_^u`p*+M^ z!R zJ1LGpzZH7$2nLd@QPu^Tqe9b{=}F5wwo*3orfS34Wx=fK#>BZogcw{YaAXa6Xit^G6q z`$Xkp`NuDQy)-|oRL*_Zxv@R*0lK>M%WLV(y(`oD{ZpkEzrFI*&i2QjANuR<`ujV7 xUN~|7x-!-LVRGrqg$LIUAD=n18b7h0yYR_s``tT#?_+;EReRC;s{H1A{{k?Rlve-% literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_320_filter.png b/res/glyphicons/glyphicons_320_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..39e0696ade5a48229e55a67db774522205dc5c0a GIT binary patch literal 1345 zcmaJ>U2NM_6wWrWl}LeAOlk)!wcJUJLj0H7NvveWu^kqXv{4&GmA=HaZxU1g#lC5h zf&j2iA zDitsR6s=YJ1|$N3eRuT26r9RsdDS)v#n&O4ri0LdKw`A%DC#VL*bJ!XRucdH%PTmh zYf1biHb>5eaSO5#-r9iAi`jRw((5Vl((>3BTu+hCY5(g=Gk3o6a9@fin6h2s*BB79#kw9_)dMSeh(XYAeI+hpg`L#*tXGam3-BPwpXw0D zEno1oU&#(v;OcWgOS`s-wM)V4_hCTMF~mBGVq{SGG&;p1X_-k05s{T;j>S7zZCA>= zkt4wWuyT}>1S%p?tVrV|BBQB1)S&@7Jt`QmvomzRPk2MIDkvdg4V0C-0rBG%qvcd} z)wa9@>GzRg_ZC4Xbg1_AvL3G#|Vql@kbk7>ghKPi z?Q1`UPGSciDy=@ezI0}z=geB~k(J*5h2Goy(P?1C%0IPqpw)l+ST*zd^;_o_*ZUq_ zJo@Gu{_~5@FQ5GB!>c8)0zuWtLDPQ}bZ>79vVfgZ|MCs*PV)@qP zZ@)?`oO}0b{M2;rHHs{*hVDL78!BES)`sUUT%8`|{@k;idSd9pJC};GuykkhXizNm zT?~cx4lJB14mLI)`TEAEk2!-E$4@@@(OZ1>$?FG$4H7TrHntA^b8~V1%IBkZr~l}E vzXm^cK3w10RK4>DZtgp~T%Zm|wtA?*YF}{RmEk4a|EXo5cyYf_%T# literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_321_gamepad.png b/res/glyphicons/glyphicons_321_gamepad.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a96b3951832f37531cc796903b98375798289f GIT binary patch literal 1396 zcmaJ>eN5bB81Do(hAxK8X;g4saZa+`_2X!-tsLa8?cFYNh;VVlQ$lH9xQAY0;l#SXaM2A{1}8{u1ia)^b?Ew0q%cA9-|PPPFOR?S|3 z#xrt1=m4@>7+eHR2vTuDOLnwY|eO=p1fKD#HT`r(!M5Xj7ht1~R~v(R@ZX96leyigtOp_ry4c z7FFDV5VlIHE76V$rVUWqAMhyzNumtnCmU&oA@`sZK~gvYZ^lP9@-)L!L9}#X(3`FH z@f~8c;UJoIe-vn|41=avbN`peP^I@Hqv;mGeHssV`d)fuq=(N23HIkR&Nl z92XVCOq69=F-Wt)NEsV999K3J;5qfM+GVVCRV**qKz2<#X_|VuRoc_0YdUGuLWNES zy(=Lrn&Al=yh@h10$UpbYScC}Xt5N$b_E6m$-+hp!WbzSJ_%23ASzLja6q6XiJ`F) zR$Z5}a^w*3KdcmF#4r&M30fdA9FkEL-qlX-zQ=rwR9ZP}d-!xLd{I>ns+<>zcN#2`9nZu8kl(tPL?R;N;qHM9;o@@EHWz zP#YJ+$^4mjC&p?Hpx2MiZ?1j4{`|(Fidau&%&Lr?uX^@)Ro#5eSC1X+9v)j+`K>X> zk(IZ9xAnfW4{y7Ba>vZM-7~2dcKx0@ohrOMQs`NVTo~E@#3*v|wWGarkw@n@eKE9? zocx6wlIF($2<|seOov~2p!vGx*0~#I)5*yX-+zyu8T&Wdx5*$?tUz)v#clS@lns@J5;Zrr#;eh_r=L?m~7oS5akm+j=z0~mOo}Bj|j7x3e Jkx0+u{{bpQ-dg|w literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_322_playing_dices.png b/res/glyphicons/glyphicons_322_playing_dices.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd53fb6e518bf25a0cd8ffd262553feaba1bd6b GIT binary patch literal 1322 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 F_!s>&s>1*P literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_325_wallet.png b/res/glyphicons/glyphicons_325_wallet.png new file mode 100644 index 0000000000000000000000000000000000000000..89b53781d1c97bd43e4c07e3134b7ca0818ae515 GIT binary patch literal 1306 zcmaJ>O>Em_7BLcoM%Tv(|fu|FsNiPf}oY==f7U6n>6I{0xX>i%tVHXYz#9^n2ojAZmH1W674xHe$N!*YalPWZXSooYKT_vVjcKm*?-{*aw z_b(r=uf29~_PJStAP$yR)e3$;i=U^aC-HC8xpX~NAgzWryawv%0VHJ8t3$Hn=uKFG zy1DhvO}Io5i9f7r4b{r8ONQs9_1GpIIX*@c#L`OS>&7NTWF0mwH&5OD`df;$%sll5 zS7yq-0$bMVb^tfF*Q&<$rjawLm1S}%lCT2@BAtvJ+YO~CPYwJ^SdP^+MGj2RW}ez5 zRV%NPiWfkVOJ`CB0|3eMX^`c39=uAj3}9&n-+T&WC61R^fgD~Gjuw~=siGE#vG6HR zwGi?pn(lNu=}so?1x*^{a=F+C%cihJD%^6B9;MuHe&j)gp%GX|j3-YtkmhYBB(_%4Qi}0RU)hE>~1#z9@>KDsZAu z7-36ph;-M0anKlRJ;Y`nic|VKo@b9nWxeGgFKl@}sci7%%VpiL+*q*~cXG%T z2G%KP76Z>A2d$8-M=)T3hzCu;IkGr?fKOtksIdh(qi~wWbJP%P?km|Sa}4+&Rugzt zW-=Kfu6sZ6wDLgtUbyq|Kj)_wlE0sssAbSLep+yMv9F5FIjy4IU| z;&P+ktefV66UkfMBk%TJcyMuSrTfWEwKtCbyzu^9PyJ}(*xgqy7*8%<`YCbdud#DS ze-!#Nw-dEPKa5`y-@5+gx#kD6$?>Vr&YtcP+2g+)M*sHv$8Kc~IWs4S#?0Zw^SvuC z&HsGy{Lbo)$?txPf_vj%Y)^P^7OqW@bIFs$&fiCb#p1%L_}{9et*KWFCr|$e_w%Lj literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_326_piano.png b/res/glyphicons/glyphicons_326_piano.png new file mode 100644 index 0000000000000000000000000000000000000000..dad13719a5c084903e2e78e63b93168e96985780 GIT binary patch literal 1211 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_329_soccer_ball.png b/res/glyphicons/glyphicons_329_soccer_ball.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1ad0277ba27af44d5d922c64394eeafdbff000 GIT binary patch literal 1502 zcmaJ>4Q$k8817)ATf`|s_G2(jH;~D8{W-4J>vmgi*Pc7#ZO3-%Z~@n~-)?oi_SSyq zx@i#1Sc391lw?E+BpMZr0tOPvF#HT+bUK*{4xNdTh=&B_C&q{gM86()bBSovUf=KS z`@HY-{@tc%(_`}s%L*|Jn;&izTF|@HdG48qeotT8C_4uzw!v1T3-(DSzygZV3Gi@2 zih~v)DgC{lfm#fkdqs`4!M4cbylf;~l4Ikt6G?=|u-bY%Dakzm;+-I_>VD$t(c=WJ zDt_WAPlSpjgP>b&956xaKvPT}=#hO2QD2AG+B|ZQ08qm1gr-}(?I$vRc_ce(lE5=2 zu*Xl_Ce;>+;z7d%xX0zLmMNOXS=L3b@USdhg)#~mw^-1!Kw%w2#7(iK(h$T{3n(Vnm~ev88ZwmH!9I? z0~%Jhk;H?oEWRuv$*S%sDxFSdxdKyt4k#hhNZ^@P@ai2HP&9`I&5LqG32-zzaqf`F zGz8p1k0`PpB8ydKl`NMz0{jarqEZAXw?KJN1RzfbeLIUprg$- z(Tbks|8iqk-cVQw#O&!EPv&hOr0%VXpTB&5`})C^TtVaB{0cm;VAtG=Si=v2#n&d9 z$1hmn{c!229q+7uRa-FhTkV=NWkb??Mcck>xw_=sQA~JkH2rAJ-bypJ3Dc+P&Bdp< z;>j&*@RF@tNfeq0jHZ65r9Der%ByOGX4v+3G z!`%7L_{%OXTxJe`bfjHdg;g*&H~zZn&!V+2^i92d_oer@lFB}7&KpAWaDM3$Xq!KM zQu%vy=LT_d_0FcR>ZU#{S$nu*r0A8g%?meu%hPkt%`*=bN(ZOMT|Xaavm%c~hdU0J z%vY{-wA=8Ya{T$B#YaDwgV!G^SUECuxa^Lk##4j zFZQJK_w8A9Iezli@m>28qP%VLb9;ICPl()97*DM&vg{tZwba_8F;%qapewm%wE?63py!XC* zzwi5f|MK4S)WNZl$43~38LJ(#>agyBXXhhZ;eGx0hfl$>i`uhvhRoBBn_|ZB$sA^D zk=w*|?D~tZ|BNRYX7lZ!F-vEimykyy-pzIRZj=C;VI~iB6W3e7l%2!PATD#O7k=c} zz%O%06i0Lt6Ssmxy%f*%rW#&v!7KUPf&J`c7lDBYQVVVt3End{p{u+PN;$M#j| zLYZ45HS0{XCP^`?@Wp~BN)oH8yfmSxs`LUYi;^seaH|Dr0x2qzHFj`u;4Ss%QQfKz ze8H*AwJ1%HAapt%zEk8$+7zTxsg&E0wcs$#3f zlBnvcS(PNKVyL!k>AGgxhFO^qwcJ^5U?UJDyboB}7IjUvR8cjHl4Q%JQq?lls;=vn zrs!H_h^@sLbz=|bPIGK<534*7i_8?el%x$p!eOgSw+JO!izKW$qq5IAt{23)U|(Lz z0au&`Z(zTgl8Eh>0tNSBAWAwkng%h-5WWN_y;!y7icvHb+g25Bfb}<|Y#2EJ{)e?8 z6^2-}M8%Xi0m%3sq5%!@phu064t8OX_X!H!xCsd<_;}uJhm_mj3>TAD;E_0+6!IPn z0|4}QYgl1}#lCn$(+)LZ67uc(2*P1~h;a;)o5F~`|EhTz#{09HWi-0K-ul=WTM|d@ z7awIeJ^T6A-J`ot9$VUcantz4pZ0w8+LdkN{L{~W|IhU&uRcSBA3j+A+{!cj$D1B{mZ{Ae{cKrp;4x@ V`t4yp6}kLZRI{h7bCsiS{RcJXo#Oxi literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_331_dashboard.png b/res/glyphicons/glyphicons_331_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..960086a1a0d6d1203d1ae3cac8a955bb551b4499 GIT binary patch literal 1570 zcmaJ>4Qvx-819%G+XTaq5QYOThh+HEpKI4^d#;SO*RmSBk*$s*IJw<@ZI4~=j=L*u zCnk)bICOsurzB&7I0ZzB36L0#n-QavAVWz=1QCYfaBO4Z_)#N%SK6^e!sYJ1?|bik z-uHR`u5o$!vgvtq^E4XGbZ;413D-I5lameK=VSJpa4AsS0i{X^Dltj|8V4iP0>m4k zLZA{*Ok!OhDA8y#M_7MA3HY8NXd$AbR2^MBB0{uAQ&JiiDY_0QNG%Alyd53=vPu zqLTEae8H0)4J(RB==HH!Ocyih1SzD)Y&M%}!)Vk(4XvEu6)LXf<%MYrB#>!|6%|(C z5!E79D?}AL3Yp#sAtL&G6NY&?l_;1peVh{Yn9iV&MAW#F+Okp!?$WrYw(L)cKwk-D zAu7?Z9>IlaFwEWk9i6T3l|2%UNu&sLoUalYvm8V<6V(Hdrk<=`i3f z6Nb5sHk*fZ;2x{hN?OcTi!+V&^0GqlG*F$YSoSU!dcF^qa7lnt1j#Q5T)I`3hXqBD z!-9yos&HhnkD^+EU^GQ|~0?0Ud>Bq4$%OF^*rU|_(ku+c0qMk5R#gD0!W<2E`S zCYRam#?5F7%S=jHI&uj3AJ&~rg^4tnT^Oo|WEh%IScL}wAUbRN6Qb!HbMaG=dL-?J@E9FTF@(*s`-~ZZ-edDVJ`xNl~#uzh|4^%%i_-}VuY#T3_b+X-E)9lw>E2{|&+yG?7k(UbQ z9vW+{ZYsRC({bjgr)gx@1#9SotaAs)N@jI!$gJpns%JE#sJEj(k#(s)Ja6Tt>w7kF zfBVim3L10U-p(yL-P!m;=GlweZ!a4=`G}ZxMI3BgSG++J>um^>W(liS6^$};c2D`~ ziJ4n372KSH$D4??3#_wiUi?H8qR#c%R|Ka;_a6U{FT1_&^3*M-#{Y?UZSQn8{Ur~* jY}ehY-KT9{kdduv-u-3nh5lPR)xWmaT~2=FT(jvv9Bnt& literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_332_certificate.png b/res/glyphicons/glyphicons_332_certificate.png new file mode 100644 index 0000000000000000000000000000000000000000..61b942ad65da2045ec3f9e3ebee3e8873eba79b1 GIT binary patch literal 1398 zcmaJ>eQeZZ7%%K2fRecA45-ttBW^_R+TKU6*W7L1wY}}a?lx~1w-NtX*S@=T>(|=% zxZ4cj%jhOzB#|imi7{XT7&R(Nl!yZ&gvkEE$X{mQf>Ebn;tVe6+uPk(BB5!o&-?WG zJKypm!a5Hm<2fzu&i>ecL@iu@Cl`L$Dy(0E;Q+Ai$Hl zlmi(cDdS_`f(V9H&8yiy*q7?$WK;J_u8p^-TL_I|k+z~G$)f<`gCM6GQR4SgrwLqD zqC{^nMWrkr467XzHt3m1XXS}eIjj(Et$3u!AqP5u5?<6b!{LfiqU4uDva2Quykr7L zqr?)azEn5Pn>N6MUcX1CXc}i2FC7Rn4E-$bqi7#Vp_}p00WQdJz7Sr%2o%j$hPaH7 zD91vlC@~D7#gSy8Q1BM~UenHzbT}M#efWGHWZ`kf4JZ{ohSOB>AOJ_URST-7fx8~1 zK{F4d1Y)|Bf^MZ!%Z?4FTqsmBvM5<3?WIUvck?P)J1_(8(zvI!lO4AJnE{TOw`J6i zp{5EL)$aa*Du#-@Y-izP`rXo8V-~U8Mr}Rta=yA-xtgAHjtocXH8S9j7s;g2~B6%v~a$M!CO+2 ztQxLjv)josS758#fReCH9WS+lQ}4lmqFFR(A(W#JrB9<1>raTjc+AfSMUe>-WvsHI zWR=Vj;D1;##0W9UFHk|ACP+j^kvXVB4U}gzropnLsqUO`nq=fqK|Bf=lJXiPT65aC zHLS{};Y3Jx1~nA{O41URT;Z{#UNN*4OSB2DxV(bsu)M^;K$~l$6@7jC!43>t^<+|r zWs6sjWoPQn;1AY(x8s*;Up#cwxLgOT+O6t#>E&%ziKCC-sHU$>?+sj@J$R~6eQ2R& z?KHM?YS-LDRfpdj-{KrO*DOR+ckS$XlOZ+p8M!h<4Zrhrh69g#izgdx%uY5#k2Ir8<#fy zvv&Kd;kqB^`0MG(@EiTa?17Q|t#?Lx4xg*u^33kY#XB!fJvI68zJBpHc5%b#)(@_o z|9n&PuA1r3w*GY}yuWwgz{$4y2i_-$=jtb~UBBA1a~1Z=l{=jc$FuG~ES410!io66 G?*9Oy1l?T# literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_333_bell.png b/res/glyphicons/glyphicons_333_bell.png new file mode 100644 index 0000000000000000000000000000000000000000..b5777f94580b661c4c3693c1cd62df22a0f9520a GIT binary patch literal 1394 zcmaJ>U2NM_6n5LuZKahq!~?CW^~x=bp(VDH*hx&Ykl4-|v~(p2T`P@I*S<--I<~QI zmLI7aWe*GxzuP1b0)fgHNT{F<#6us30FA8-5JTDn;$Z?LT97uFgjATOah)bzC8k-n z@4d(8JLfxper9BNXIDp02SE^B$ssX~*L&P&Lpy$7Do2*_(v74slreLtEZdNXspcdE z$)cQxX(+4JC(gk^f@r&}WyjE1Y8S7VMX&7Ycq>H7BGP(l{R(Ncn2$2jbMcr`tN`$Q2FP zlV%A;NX&F4grb#7tr|9*Mxt=asETY+jF+a0MK`Xxwu92}CXHKaJK3rQsWf!VlC9u+ zn`ukYE{_6Z{M#`NH9Z z7~>M5P)H22p)W=bj|G(UYCtLPKZZ^Ik}`Gaz|dT zS_Mrp4QG&Ydr;RfpuStdQfn;M#cP_jsfj1S-L8%xKCBKgH1Oowctn4H`(TtHT6&UV zEL-{UmgO-g$4=oJTmsaPa@Z#NS*PZj9eg6vDUjDAu`_Jxc+MYHd z(c1UM`c1sHFZb&s>(2bODZ8)Q`N6+;EYI=hqrfa5{krRf=orjie-k{}{`if1M|!4@k~1%j zzn{p@_g)9zm|DGiHr@rkGY1DbZy0RR91 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_334_candle.png b/res/glyphicons/glyphicons_334_candle.png new file mode 100644 index 0000000000000000000000000000000000000000..b898d12bb45d438955ce6d6cdc556727303461c9 GIT binary patch literal 1344 zcmaJ>TWs586n2F`S=Cl8>sU7d^W2SX5{d03wiADQZ|%k~tT!_%<m4nkvCVqe2i)GC1Z1SsoPl34lTO9I!m zByo_*Qdvg?6@7Hl1>=*sf;w4M;~KGVFP>=d$bkuTk9=qSUo^uu_VqQfMGZZ=3qd4}b~9NxYN6wTF2d|pbo zW1&-$s6goOBw4T5L-k0=cFQCkkH>u<;cyUH1ihvOl}6C=hC3c4;Hj?eK;5=*-=i{N z*I<%BOjlDdoosf^vE{W3g-S*?6o;fk6lt1%UM*`6=D{r*x3%^PO$U&9;Mp}-Mg1rZ zcfhE2cMjAs)YLUQr{)^1JT;XB1~7pIJw%FbF+$AwM_nB?P%$K1t@&RwQj)0Ebd6^j znT^CLHpYr+nwC-mD~F|6j1y%+OhqZq59T{q4@8=fhOlXtONnWQp;$3O({eZ-PfG%u zj>TdU$Hcf)2b-}xs8}lSgZfzg7B+fEEHAo1fwo()ZKE?PV-*|PUd48Bah%0>XBAbq ze8nEWlWnfR)sF%#?b;^ZY6Y*~h5<##(4cWB$1qBtMyFULEr(M=L}X-{Wr#LbTUWA9 z<_PdVtjw{JKt&{q5ov-%WHgnBIy69gMg;@5B}4b;gf|qcj0zIeKuM_?kl0%`nodPm zZOcoL{tOyA0<@%6EV<5OOTBJrJC^$D80vaxDtFjedM9vku1e(ixtVJ}#E)*p z@Z$96#AlxzNuPgk!+k&RT%KzFo9Tb0`#ks5EIzSodSK+E%Vz`kKC-90Y4F>jrAu$k zZv1?lt@4cAlxw&l?UcCFCzPWRyzQ@khpC~L|dA#XvJNeyWe)*4+zZ`Ntxc2rX z^&8u}@crdq7yfh$AA`bR>93nt27f%gxPPh(d+GRw9Rt_jsQUkD8966?m^%FIeeQ4Zd7!SQs+;rBi>g+fqOaD>XT|VxT%Z1CzU6Si=cwKir>`~M;P2Ri9ny)4A zdDjlbt;*PtfiOk)hwBQ0)HzojOc>|}Eja%gW8xP`>p+I09ilj7pl_~sUBR)CCJNGY;^a zrB*-zsQToAD`;G_yvI* zx=4($c`ENppla-z^1$%aU{RZz(2_dQzY|Y21Z2PhP{kXTY5PJ$B${>wv=782fj3p) zgh;HCD&>c8$?*WrMq?3;qG_DtqI8_)IC=-pP&7kQ=;k7HTwpnYN#L!EK;AsPEEMEy z%NII{L={3;Ajx{Y9<9fsj#nY+WHK4pV3-Kfi1?E>R2vc7?`vC-fvdo zQ-dObn68Fkx%vE>VcTyd3Z;x}s4huIDblinxSHBNEP%T-?y2n;CtW}mfbY~i4b`LE z*9N29-QQ7LQPI6R-y?Kk!A^SDN=2d&e&9?(aQ; z4J0>S8}B&TS=>_(Uw#oga-b{p_Lh%U8fOo6{CVRY#y$0_Klb6t#~0@n_mk7Rr}O9b zk3QPTUif?V_Tme(KhD1;|B|gP#l7#YEN|am{oI)$Z$3O#7AKA^e8y$EQV0JCQ`*(J zrERyqx^z_hA@p3o_x`1YNa(n`uOqzdF#Kb0{Iik5hPr-wd9-x=Oz>mNDTDIa%-G@o E0E%(Mq5uE@ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_336_iphone_shake.png b/res/glyphicons/glyphicons_336_iphone_shake.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2cb24ddd9eab3f7814376c71ea1cf109c91296 GIT binary patch literal 1398 zcmaJ>eQ4Zd7>{+6TDDqe|FBy-vlQoq-6gr)<#K7Sc$Y?{2+#^!6u zd%bHxH`i@4*ouEhv15o*EQq3Zv<{r3^@GZU4V)X(QK1t=hB~KAoiNll*SoIZSV;1| z?~~{EJiq5FN4mRqZLHZ`gJIalWQUkW>!aRN{Q!C|7oxY&(f|`#*kk2jL3RKZQ>}i0 zCk=T3q=BrC>^%!wG3@^9S|$s#si%3xGW@cq<1ZRELStBKd(oDaApr4yFrb-H;@8vj z1g@!3qBoSHQnmmFwT@8-^o(|8l+ht2q7vH zJ}pXRU+5Gi1|hV0k}MPo{sQB-oB@)KL?WJzK){DIeC~(|<)Y7Yn=2MX;3|%0L(MXA z&!XIK{M#iu<4c)g;GWqWt*h^6loYuhJnoa~F z5lM`(63203IK+kH6>QRUp=>I^bLwHWJJ|R=vAo~_8Cp)pvh+%;bPrn4atAFN7kXHH zM@m*S(-S=DRkF+#INC5!CC4)GQYm=tE(|D|LyZW6%uHIL}XNjhZ@vDxkqCl0p=%>k4Up9*qvUWY{6 zfIeamYKmpLt)$n3x`qIy-3pdmW3eP&)3g;$Gzs2zbp+92b%=q9Cf7kDdMp^;jbZm~ zO^UHh@yf>&Ewy9RhQm#tFGydEH#Ic0I0s&T^SjX#TVG;s)<@%#Bz-jV*8JmR7cO?R z#(fR1Uj9pYV%xSK8xPgKv)r_F4qks&+u6K8GK)9%pP2Y|%ez8$vgVa7=Wjf6d#>vI z#8^+~&520e&*@BV$I{hFsB33_`{t_h)CZ3>#;$!5v3#2ke-F0bdiyBIO)h`+_4s1d zvEC0KeywdPStQg+<6QgtqvJgj8#;gY6V>%?Og$&nanDx`zx?;y6y{vo_2s|ZL!UM_ zztI;m<`$ouo)wP2xV|nuTfJ~{&$^il7Z0{f4lkYEH@^SW@WI>r=;^NDsZHkW{IyM| zkC5q0wJ-eA_x_nb_xv<Z)n_P7!Op+>{c1Iv{sykOr3VS{B3f%&|A$Vx%R+2>)om6K8(Ii-rmI~d1LaP zcP;z0DN+O(ev*BwI>8T4P#A*^s;*xKb7S}qhRl9b6gGu@&?)Gf>)ly!EF^i~_sR2n zp5OB?YxAYq;h~3zD2f^`%$a4fK1!akU4!KPy?y8^SthVm!xglITOfjz?x00T7kp5M zWeA*=S1-Y7iW<1-R%^Icd{(oO&w@mUZTlfXQ`GcKI|TMJ#PlMpyFr$@b$)}PT_?-D zBp3N&XuyU$w;I99YN=|kF54N0nK?{Pw>4tGhZxXp-wR@`on<<9HL_2{97A_h@N$;f zCRHoW(*}wlEwfU}<^_RP6jqp$6-78ii@YFmJh_#WFr~?gCZ_4`#Sm|iv!s>HeAgE_ zWtj%Xp~i8oR*P*(EQ;!!kjZ2c8={yZ8mV|Cz@VK9;{81fCXDUK4Y7*?I)!x%Lqo77`ze-BJ@ zcW*~MMaS;zh0Vz8#Oc@^^q>y|91~JPhY?|}Jr}v8fWR}6-Auj~%q-Jvx{jvEmLg?% zMOBQvAecE_u|!i<(}txRxhX!KI7{@2uR$jtA)oG)LUZrJfEQHKXlW9oNWvG$NtN=JnA0Ugwk$#pN%6gF#!2hsT zS}}EAGI`k$7>1=SZqg^32ZB0DNXmgrpy^@eaNS!88?KFlc$!Ok z&~pi(v)jgUJ1lm@JDRqqNhTrL_D7H$`a=u@GPw~M(Fd=dV99uI7EHa`zJB4G=Z7!S zdk44dp~=%DuYd<8L3wh0S*}eDNUq`9&+{qi^m7;d} z`mY1y*0}>R^NW4(t9@rA^T$2G8^NjBQ^p^=M!%e0f8p5UM>b!6*ZNF7apj}61J^dx zfm_41F{E#dsc+rEUwl_O_Wrf6ZyfR2Pd}J>WaHZ>MmNXr4CwRJPYZ(|Z>c{V9}D-~ z)TQ>mv(J2@hNYt~{yZ_efY#pob8f3L{`>l4QRVOZ9-=Ou9$mh$VBSvtR|TtNp2;m7 F{};6itnvT= literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_338_turtle.png b/res/glyphicons/glyphicons_338_turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..5533a9876d1db09d5e4f94e80b704f04ae541ad9 GIT binary patch literal 1347 zcmaJ>ZD`zN98ax#akg{9%3Q59%etYgcX_!cmkYgaxg_UZ>2>AqU`0Q;G zo`3$o|Nr-Y%h`ecmz#IA?!YjtIhl~tXl+B!uI*dVd&`~nHMH!7${@_x!?2{f026h4 z2;j+rngeN|>SLqdfo=?Id|+e;;b5vy(Ck7`^>u>ff`iZ))_u6_sM-jC_z=h$R+Lzq z|AN2`JxUy7Q&h^4K;B4EiDcL^*fFk!rQ5y+dX z4-08IUh{=cQ6dkaBamdNR0@_tLEFudbR-h-Z7@s#X#~763##RS9M};8=wVMJSHvq&Q8>F_BXkndifjB1*9?D(pM+4QvJ?Nl-`Fup)9Xj*n5C#L~3F zL?UrnR|G>;lBjACR^_%u54p}4}t#E`@)3da&P ztiCB_^~e$6e^@2V$s!e!DOREh5|Pn00UFQ*wH_5sSlgL~-zS2pS~--EfDVS$q6vwf zoH^#?4b8T^Zqn~T(?EdgZXHW*vRD;wYTCLcngoBlF@or@F~q<^lk1`pz4R<|4UPBx zq%3C3%eSVVZeE~vy>sl$>E7A5le15D^euF*9OsWLbnM>twKz)co_;>^?Tz`K{5J>Q z{IToj%EgoH;_ZV6Kia7uS^TM~RTNsZ7V?SL#hHfDS9&@oCw`a9>-7?;pCG z`0azwn&7^bf$f!q)^_v3OyhFzW#zd`2PV$VJ+<%Np33q+t6%-mjz4p^@~ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_339_rabbit.png b/res/glyphicons/glyphicons_339_rabbit.png new file mode 100644 index 0000000000000000000000000000000000000000..04564fd2bb21db07561f93c6cd4f2c5015490834 GIT binary patch literal 1442 zcmaJ>eQXnD7{B>JCa}4gKyVH`ZiKL~_U_vC+Fn-R+PktY>sGr?r=oDXd)uD7k8*dl z?F=s2CTtFk&iw_M&O|Vagk%b8vMEc@Wc*{I1mY)Ih7lAqAv%`vhw;6x9ZMu!?(Tix z=bqp5{GP8HjI``6TU)gjL6EXgBO8Tl6?`_9u7U3>14qxo<#ChiFx#}anc;PSFrwB8 z(2&9>Kosy|?%)N`fFKXfOR)~KBiu|2nqucI9eY+uK{SFi?9Qfmp$nL3CrC)D5BqEK z9EM7w4|~QHCc>!zNJ@>}I%w-|i3#0Zf>*?L??M~0G&G<9lSi|PtQvIIhvn_kaBqom z49%;UT|R7?R7W_11~eU@F1ynv5G09Gl%1@1Q50E+ItbE%6Y!>NWIgSoXonjuTp0AG zi*Y*21`EF6$%iFPGezTgCX=yeoOVr5;H1~#G(4~|q zX)0=2BAt?DZ{gT3McIZt|(Sqd2Pdtg1a>Cscpn^DS$_T zp`~>J)+1h11jF3j-%(Lf6jt<7X5RZG8=~ zJ}jM4A;rhA}!|_#`}eoI%dvXPf~S z$5AemDiFRN|g~^RCTnf z!dPsHTwEOf?VZ;u9JZO${mAttoP(T4rWT()tE*^zpo`Hg`$ z=Wc9#NG^Zx;n5!sZ61sDy#7I5^L!oZpY*0rjm&Q7ubCgdIZ8LJ+xgA2WnV02GXvZD zo_q9Kb*(t}33g+{=!Hv5Cq8c7vGDm3^1Ft|B-^`B^c}I?-t#2+Eq8VHYwq85=RchK z{l!m%Cnx?uhC8qIJ%8)xb3@F&>-O5YrWdN2>o;T0lacL-&3EF1GlPyT@&4RGBy9Hh z{@%az%0zc}>oMi&Tm3WImA!Az(Dmcz%d0LXd$!WGLt{hj$G+NnxpbLf2RC_tXLY~@>zxT*9>tj>}mgj-v0n= C1nvX? literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_340_globe.png b/res/glyphicons/glyphicons_340_globe.png new file mode 100644 index 0000000000000000000000000000000000000000..24b3ebe4a241576ade30e244da6ffdaf0b3a249e GIT binary patch literal 1463 zcmaJ>eM}o=7{9TMbU0+oV!~#E$3Yw;Ywxb5*Y==;ws&PUv;$h9I1@PTUg(APuH0R1 z!DKo&=f~9G7}IQ$8Ifg(AtCV(#W@{ri%erOv&DdzkoYnF7?SukVH16?v`FHz%iX>2 z``q(;p5OCzFVzQX^YeD*AqbN1+s8D*wNQTyx$r%gbp8dG9U2?ff^vtJ2L6Rs%naBz&MUi_@GeMeh0^XF7te~wFZMLDA3xnPi zp@VK@ycu8cDMnM|6J7L%-W;-tgj&~2E_MyO#_dnAoZ86~wOYk>hOuZVF? zlqFQR$hFG}&51##t0BbVe*cHUfb3&=$onNR3n zeT)-JBt(IxtSn`55R{$rcuA6RyC~Mo*zGnC>+-lO2%GLqH?STEB_;u4y)0`cDaJ)m z9xF+*W{1PexG1mPZf9&(yUm@&`Xp83Bp&Eab*u=nHr7SCDTn#KSlXiiPLq|8EJw4g zQXi2uS&hhX)Dxu8GC#+Qk}lY-S2DvDDB@E<@G5c)O_zce@4U}~- zIjIvS#3+CcE)mtRy`9mXctqr7Nv*>59*l|*klw9g@pTr{;&n}%)r6CvZ`Vc;9@d5! zNN{o$IHG+G?g9ka(CTAcq14O=O%2_j6I)(YHxY(IbH!ow$iue9=!8{b#9@(1>x9KLzML-8bm&^b?Fvu*$UOxNV(x0N`iHqD*7 z_WO|iN}28Qwu7e;=U`;Rt@aD*=FhP21aI!2uC5_N&Ta3&v)IjTf8;II%@3YfxLZ1V zsP0&4xMvafBU6Gg_Y15+0!m%I+#3j?yZ^&C`L*teoXC`mWA2)t`^>C1Ni!Cn~1TOb4VK1JW*z@+U{Y$Ua hR-eBke|ZMkh(ykwzk1`$Z`1m()W-&xF?ZW@{{rk={SyEH literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_341_briefcase.png b/res/glyphicons/glyphicons_341_briefcase.png new file mode 100644 index 0000000000000000000000000000000000000000..47a8465928457974dc2536481692391f1a4eca64 GIT binary patch literal 1294 zcmaJ>Pi)&%7XlbyEAVJD(V=@@h|vU*U+9IVwFVK{fGx)_P=9^>4MjS3 zfqGr2u$54SZD(;Kf-4(KHEUzdl5A>Wp3L`TY`}xaBzvCg$8xVg4eZKzpNJWX9H^kR z0(D5LURfs9AcCYoXEPSdaU=jVHzxqVT_Smw;~5s;Aj8ec0+9I}IlL(BEwY<(RWpXZ z@Towx5ej97>2|wxH%kXmi{T_mN^J0a25V&Ebsw3%j31{*7Bm=JkrN^(@X5rY*$6tQ zKw+kbA$Vb>a%9+#hl#=|V|r%Da5T$!UJ}=%W~u;s%T`bNSWC!38v3EwDPt*RociIvvNBfuMt| z!~zkh2FGb71?apciaAwR)Y2TAOPnPJjsvlTwlUVwb)Ey7&H`27IGvXyLsNhuilUYi z#9V2FE&DMteG4W|6Rh(Ht344bs}VF&5Y>Xf9kt4GJ3v9)4nk600px7Ov>ZPXTudrC zw^Oe@xB2;J|6EYMSWIo_h@JV=w%ltS@O_mR7g^1HV_Fa{vGU literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_342_hdd.png b/res/glyphicons/glyphicons_342_hdd.png new file mode 100644 index 0000000000000000000000000000000000000000..5d57b71fe788cd6eac9f8d2f5ebf97df58e0fed9 GIT binary patch literal 1334 zcmaJ>YiJx*6ke=wj!GIMu#+OEF=7$)6Na-&lQnCIBO10kE?4|)rhk4w4 z=ljn2&bjB@nc<<`ogI&KL?V&S?0}p{--prj(0v=x`>AE(QS|ACN(qiQW!O+X5J~CI zD8RCoS^;^W>f;A4gT6>)!*!!jf~DM`s5us)h8QBST*Qt<`uYP`)oK7@qo88gN&NS- z3pi%zNxaDBsGKW-sxdI(fsu)!f;Lgp1Rd|+h4lp@GGGCyVu5Aaz8EC&rd<(@!(|f3 znh;n^;;W)cxnWFlJbek8iM8Ka%+Zdzm+JIGBQwIk|rq9vckBUXdmXmZ5ek&`-O2Aka^%cbx%Y4 zQSNDzQSR>Us14M$HJn@b%x0XrMgkL9z=l2&MK={8<>DUCKpUujlB%<~CJNlEEmDiJyh4Xh`k6+%bcjG{0!!c&~Y(zL<|LPkz; z8J_3m1j{GVZEn`~p=xU&bQ*Gv+g$ptTv76X3LUTDIA*(4hN}*A{Ho(((g=s`$f=rP zhYLHyoos0Zo-qdWjOSQbb1OvS4hkrmM}?L^F`@u?8qN54Mq$#axWp<7$KoxnzAk0$ z$PwXxTqVKDDJm{gtVH7^5~FJ(G@uDuHJUPEYh)T>ortDtS5QJ?Iw-4k6XLrn=D1rm zG{^S)$gl=Y0}+~|RW7;CVsm+2(YBGO6T;zI3!=$d69XG{u7_Imv3VvuFMiI-sY3A6 zXRoQ7FJkvkABtADJs6$siq1a&LbkeXFui>+eG+bZ>z=J+%P$|fzGsWKvT34tO_x&Wx_bH8i$~|? zm%fPK`1MqAddHcAADo+t-i()mfomtaZ=HR0@{Pki|2{o4`SxLQvvu>JvgPW=#g)l- zH~g`0X0q@#R{N*?#N3gWj$ga?;+xX&Ikx!emmhz1;Jss?e@p(Expd`6ck27a5BCaJ s%14(L$Nql*ndF7(!4ps3TJAX?`R$kGg=cp!d=#E!S!GB*o!&q7A2hhdXaE2J literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_343_thumbs_up.png b/res/glyphicons/glyphicons_343_thumbs_up.png new file mode 100644 index 0000000000000000000000000000000000000000..d69e9918478305d7d2b5fdbc50445dfdea885c3f GIT binary patch literal 1434 zcmaJ>Z%i9y7{9?rkd4K-Eo{!oc^D&e?cKHXdcC!5ZSP7OS7=I!NT%_)ds|MfcgNk8 zwtN^yg9*_k#w|~1LkRckQnQn=YC?;bc7KtAgRI+5r{ErUQ50gaSD=i~&+2!uu z_kHg9J!(Qc5E6d(5c zm1zu>L?8B?D@sJQAn1|813G9QXiW$My@E%?4mG3R90Lucfytw}w5%9R&W9E4GH`E+ zaSSc0n7ux1jZ|keh6Ys~pf0=9CJ-cvQk0!+a#0j{0Cf(IbjOoK5)3p%NS~R+DSTRb8f+@puyoQr@0#B!{xQg0_83*@h+*jL30ogvN<@H>Mp zj-y;y2`g?$SvhhD_#c*YQ>>qGvV<#0VmKrt3XCb4GAQ+^Up7lSS+e?sk$EKr6JirV zlF!H{)|`^_T8|{Cis8kr9+V{rDDKv<_y&tb@rI@?Yr;vew(BDZ59>n=6gas$9MQ{o z$8QL-DG*`(iQK|u2dPw$4}0G|S#hEIkr(!##G*SNI;L$&KRGrQ-t~3t!qpwCo0ng^ zR+rn<_G!J=IRC{~%II$G@-%5p<|9aURT`Jv-O%$#CV%l-yyzj@+0x?(V;a+}K8c`26T{{nGK* zV^zmoLfoi)EPrA#`Db+g;KA|y-0?ZvJ7-)YO#P(#%8xC-R^`V}Bz9K~epz{9=M$cf zn`geibL;P;=Vl9SiIu@d&o`?z%2d4ft}wOtyUK>I)R`T(qNh(6T5b;Asaw2$YR|-H zRg3=&g~=CJs|tnG%~O4s;@j(Lt79v}x39eQHaL9b{jUCfuC2|tpZR0-b7w#6p=U-$ tJI^nVFHXPV9i%hw_5HGR@$u=3ZOC8FmCz3p-P^6dWrS;Grvfj%`XA3m>h}Nu literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_344_thumbs_down.png b/res/glyphicons/glyphicons_344_thumbs_down.png new file mode 100644 index 0000000000000000000000000000000000000000..e8313e45ab98d302f0090dcec51929d4b855da59 GIT binary patch literal 1439 zcmaJ>eQXnD7_W1}21A2F#zrLP&A(tpVO{rDU9%Xy`~L^!v-~MdcSONIh(B46fH17=QU9^ zL`6nSi(I#oHT)=KIv+wtjYby?%X%SEFlAVdQ!&DhW0{N@S6*8;;@~EYTWafxeidMG zpetF8hxJI-6u~few|7)j6!--_HLFSaI0YU96377A&><-z&j>Q7S~L+BkdqjN&zfH& zj33QrMS&t+Ea~*(q=%$K1i>@~N!G!5JZ_o|(oOZa+jM3cSPX;`y8y8?&ay1+ap5FQ z5(Mk;dP7W*40${r#_jUBn~KnneZ;Pd94RD5{B@{&}wn}SSF%&(m zs0iIgBDGPD7iCjWXI8Sn6=>piAcQm}gXBv=iML>Y6CT)TZWyBjhEKqg#~ETBO+hE^ zVp-CK7O=viloca~fd64xH^~HXCxg3a0>vO1fu{`7kU*hFgOX9$Nut>&l*Gv?m=K!) zl3Z3Y&_GJ+SJNV|$hr?Rdr%S~AitZ(Vv8*1#fzG@s0k;*+%AkDJS+?`km2NNa71T0 za@u0KqdCF^6S)iTwI7XrhF4@ZUfQ~6*B`UxR_kW=>u~3qVVRq(ocia$+TI64FW=Yr zi7otN3E)e2BB#P5U-VpC-_BpHd*RxRGm+nu-+XK>4VQO}*QKA{@>qj04g5zvAJNN4D+w=|pn!-@TiHV;_3{`t`=$zWA8?Y~saI z=P&G)mhs`yyCO$lwY)Z4vGt{cJ*T>J-e>e@PsHw7IWbf6Y58IIxNW*~(WL4>o3o{d;sw;1&DyB9p<*rwAC!c$2qG$Nh?&A-wyNs4B`AGZx*u_I=ZS%2k z^8sNc+ci2CW8Rsy2F|{_v!^p~F#h+&vC_b<{>m*g8^$fCt0VhPZ~w|^{xTzMjCsGQ GYw$lrX72F- literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_345_hand_right.png b/res/glyphicons/glyphicons_345_hand_right.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7c58c9e3c465195dbb67c8d3dd54c3575bb192 GIT binary patch literal 1386 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_350_shopping_bag.png b/res/glyphicons/glyphicons_350_shopping_bag.png new file mode 100644 index 0000000000000000000000000000000000000000..58012cdf1bdf940985120bdfa965e56bcdc11b3c GIT binary patch literal 1317 zcmaJ>PiWg#7+2~LLYELq3CTh>ggRJTV*RnKXIZn8*pl3M%wFagYDS=yrDt1-{!MzG zoeYMy(b1l|Fes&`bn9S;GS;=bY=;fHt?41KLr=YJyY0|z&_M@-?#Z#!z)FRr_ui-P z_kF+bpDrwyPmLd*IZP15cyURo;B^W=GovH;y?X1;yLfpXsWr6XHc&_NA(1oOIwXs> z)`S(P85?iig&Bf~Jus^^R4ctE>8?#{kq+IpJ&Y!Z%tF`G^mT~HI&7Lwmipt{?BvSR5yu+wV8cOLH|_+-1{M?;=)UP8({;$mqE>g? zC`)0cdm-3fskCp{3Hph`DPy{t$8a>u*me|GPdh*r_=Lt&wS(%02bl^C+_taddNhs= zz&Ll$b~I2l^nE?A?OVM#4V{4&w4s9nOp5C)HYP((2$t2sHJWK)r|$iP7$me2;qCR2HiXF-YuvdD32BAqTMIZzNq zQAr76DnGy$od9W$4kM=#)_j5m&%{cy4>jcaRoAr!t+L#5ksGvJkCaycdAy|QrV|NH zM3wAwg}(VVGzz|Jlf6<%=2IB3oQNAOg=0+M@Hu=E`GT6r=XhCARUlA(tZ^V^gUB)9 ze^@mIlpM<|tRQm~gUJ}WgiK_?evjrX)ZbZV)F+aqIZd39xB(kl+d|ZQ)7tP_rtUgH zhKYL6GBKdH+ru&kEcV0)ns%UxCn4JIk03tm4>5G`0#?aCvabxJpy^-zoQTE<%{A_D_XPY>FnmGUW*0qUGE}R*@a&GO!j%Q7e z(&4qM4`VNZ)!CwbsCu3Facp*EYH{-A#ebd)AI0WxZ(n+m{OQkFi+&}%dSsWqzV>r+ zF8t=abh$Bdd+Ze79Rkd+qte6eL!VumU~gUy?~WU_O!BX};ghePC1b=c7rwbOG4;Xy z{L$}!Sd`hdN1y-l>4z6*%CRp$dhhqi;albK>yxcI8y`CpuJS{})5HrGt9NdG{J@QV NTt&64e33u<{(pnbrquud literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_351_book_open.png b/res/glyphicons/glyphicons_351_book_open.png new file mode 100644 index 0000000000000000000000000000000000000000..fb036259bf518787337ec9300d36eeae880655cf GIT binary patch literal 1362 zcmaJ>eP|nH7|+`2B&;ecxXrnFT=!Kmxw|CykuzDB++DV?C3b1lFpKPZ_cl3lU*5ej zm&#u_ORSFgab;=48Dk9Dg(Ar56b%MGL|8Q6ZeJ@RF!Lj4+-sgSp z`906?dEV!_)BX8GEC@Z~Ent?5hbJ zYns4n5?>}&%JpM{L)T3C0q#^`~ZYD&<&+639*_GzB9RcX2)PXt%3jEHd)gjE;3|%0L(MWV z-=jQa)nF1wOqWwI>|AcevFWx7g-S+vvQ1E7k}wQEucoyN3*bK*x3zYQ4I2;z;950D zLFX~t(*~p3-8oR(P*qm!?3$xD^HdcA=)eFbbP*}4$p|s$A9pl#fU+)HO3nY86_a?a zrl~wbOH4FQG8`jhC`wGH7%3uh94kmEAsr)GKbY@eH4tgSD#8jJm1gM(Lo!IBq)0rT z5mQWt<2aF}IX2zKW=$8$rULw+K2}567@MY|B$K)$mKPi#L(3^zmfmia{)z=Hw_@3t zFu-8DbF!kDzM|JZ$re}OXwLyP<5&jPJPKaB4Fi(mP@}OZ#|TQFLOU*+ks|3-RG=k^ zq45@0T~)Gn<_PdVti&>6ij0aREl@at$fybrHK>DDkEV3kl61}Q6JD3iGAc+&1;cVp zhxned-moj0VwrA&@Ox0#5TGe7V~JHBo9b0f+qOiL;EO9Gh&C%j3`{h+4jR#mu{Up^ z@m|V`siHUk>l25%M#=jxZdgm+C8T#0JMKNPcITRPXOF#@-P^HY;&?6i?k~U3KXet_ zt~`9en>(=Ry?^1gn`d5kf0%n~V(Z&w{?d2@FrRej{ad_37f@|C~Cu?hL>9OwZ?Ir>~#*dK)?U z#bEa?=E;T5Ub!%O`Q$a{n=fz91c(0mZMQ0(a#<-aPNk0={}*!N%HaS2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_352_nameplate.png b/res/glyphicons/glyphicons_352_nameplate.png new file mode 100644 index 0000000000000000000000000000000000000000..a37b735b701655b2db61fc1c8c620a22bf03eff9 GIT binary patch literal 1326 zcmaJ>U1%It6rNIAB{XQoMy(RZS$|sX?)+@#XNTQ}*_qj7i<`#HqWe%oCNp<;$IPEI zce|5_kQyxnA_=Y{tx78hg4#kVC`O7{rQ%ByHH!8@L?5aTS}RgTLA|rtO#_w=Gjq>9 zbG~!FbM84aJ3KVd-LOG8}O$u%YP!k zK;Wj4As%51RKb%$%^aNa!N}B5NuQd~QwGt$7f**Ga$p0f;h}9gff#0pmR}Lck(wm% zmI<855No8$g<)KFeSouxWL&3c8t1qK-N$kqy$5F~njtB4b8)&)WI2)H@%BZaXueSq zi%PB?3+*yQ4MI;O$ws4*Xe1M^UnS{ODi!%)m^iYC2a^ue!nhN}Ivx}d=)UPe({=F3 zqc-l=VTM3V*HW;(LSfyp6SND3N=Am7N74z3wCyObmURG&;0leaS_h>`50FI=xOHDg z=TV7uz^HcD4%9I;^mRM0?pv)q4V?rQuz>>uM2c=PLd?bezKIS{vlLgaM_=CP^?T7BqC$zA~c}|+C3^+uq|0;)F+~)IaO4UxB)6!-Gap4sx|4= zOx<;YG#T}vWgWy*9V7o!PfEJD@#1x3Ya{(>*W5QaxvfO1+CPJH6b~ICIy9JJP!j zZ8c6;xKbviI559N)^wi=_ zG&eW@{M(P!$1Z;Uz~PnD62H)Ue6{?yb@uhQUfT0qMLc%9al`7?*>fW&4*juZ`7pe5 zksJ7AN3&U;d0E|AY96`lzWT#E$Nu?#(-)(}qnEz>wV8>1{pOQjZl3u4wU5MON6wWejSGI1g2y3^3#uVBvIFsDWCX)#>yPHWe-BD*9W(OR_hsh>)XW}Ng z+2oFsS$|pzmKI&K_#`g22+}@?C{`$lD6VKL?28COpGx)B76gCZ#+%uh?SiEt$vyYv zeCK@U+;eiSvT$O2?C=;xQRAg~txDEI$+{iU;HnZ$Y>FQR4KF#<>_7FvRI z$u*j=3Jt5fdL8B{DskJc)p5Q2tZX7TWyChA$n^=DqH?p5Zwoo(IR?Mu$%+AocNG1+khz&Y&9WRulJk$3p6FFA14Ba=u zD|u#{RJ~lGRTMy4NTrh|2LLUKDKIUFB6y1CIl!|Vxy2-ymIYDfGxXqMNVLFOmaAHE z5R2^cObcUQX4y`slj@{XC}^@Eo6W{Pcs@xil3~}wMwIlzBSQ}w49&pyv5h=B_Gm1j zHqJAI>2?aPUoP)B_QFA-NXgj9@L7=JSl5m7>RX4n3h&amr*&BC`jD-{5VZr7oX7H! zA(+(e{(**umbqi+w*#l2r)9FxfiCoLNJxP`Bf?yMF0jb~8jgm{cKo%Z<(YQdwq#Mz z#dMYvB~dK`pcNER=QT;nsJfySrnyWUEOxLPNHi&nU{wheG6Ju2B9Va3XR}335sQ)} zX&FJv6o%N67h=ORVH`BZ+IO+qeX+6{Km((ohLAICl}Za?6t<90tBWFiylj}Z7b~XX zlN@k`f&B`!iUD%z{!z&GJs5C6B8`?IIr1cZKz35PsPhFStqQs>3d{g&?JC(Ya{~Au zR?moqVtr&Q*_hk^#ok`8*ZlTPts7m^R_GzJU`aijr BrKtb_ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_354_vases.png b/res/glyphicons/glyphicons_354_vases.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff112be3bd8a5301c945d6bba5de60f0bd31edf GIT binary patch literal 1426 zcmaJ>eQXnD7{87I`>=dOF{o3|n-~bRch|1h>!sand+n&Mqi%&Q(}iB|-md5F%e%L< z+aE#{orFkmn;#)FnqV|0&bVk0or#DhIuZsZ$R7ma)IX+)nK8jcm_*;}+Ob5!7=}3$JNYiOZnmGgHRwH84E>Fkdtj^=cI!D<6ik4HB|Qu9 zgenYxE+9xl&&+@zhOJtV)4i}a*};jr>K1GrcS$u68pDEZB|{Jg0mQRlK-NOUAJbnF zxGaT;9$%758c~p!cMhANd$=<#4iAa}iD+xZgC!0bPyrP1lB#GHR|*kjyBylvVv@ki zDsV7FERpI>rtqk40^H~Jx*C`TU+5Gf@(>yvNfwJmchT$C%>j}Q1Om1VkH>{HT-J~Vg_29NnyVIgV2P$|Kv~yt z+oF)w3ot|=rb{8HMl!izKM<97RyCVAVA$r>$*~Hl~i7bx|P=rJlf6R zTa$t)YqnsUUC9bpV9NV|6gPDhFPDOoZ^3|~S=4BL6r%@)Poop-jmJEZus7<9#TXw^ z!AdJqR*f71{)dhE89q#TdCC{12@;W!L=MVO0hJyNE3mRtWV=r|MbHLNLR=Ea2?Yfb ztpm!Ck(WhXvx21EgNlp*<=qmNTw$>+UeUBwO*9Gic6kKRVR?vwh9=iUBYJhur-K;g z;1YZ|UApwi?!(U0_=XqU8NX3`<$mirIaiu_ z{Da`aS2r?!gKMZqoLARnCQn>$qT1hXtbRRrtZ2#{~Qpd?DW28SncKxYqH=cZ$-K+Qi#P5D%)py_iFm}=r*fI6Xc&Ra^%8r?u(Z$V;6_#%*Cyz inhqTt9Se+qv%j9gv{szEbWRZLzholT$$uEhJog`E%itXV literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_355_bullhorn.png b/res/glyphicons/glyphicons_355_bullhorn.png new file mode 100644 index 0000000000000000000000000000000000000000..02cae9dfe630a60131a10707726be136d3f60852 GIT binary patch literal 1390 zcmaJ>ZD<>H7{Ab}rCQn*6*rmOuCjKzpl(3oXSMp3cma=O}c_($6fCE zKll8e=l8tjV0xgpsc}mqhG9*~J~4ydo6+-d!~N*DRDAn0PXVP7IB1Q-qU-=Hs#;lq zCk;6VGC)?#lS`lr!|Hz3hDP8>YPXDcQ0z0U(|QIn9g^zkPb1 zz%?~O46`XJWye8Y>zi`G;MBm7GBu%uRidXG?g;Ip5_!W@ssYwE_ zn81k$u|{enmB!DJ6VpScj631GbDv>&QEs=EGIA_ym}ERnxl>j z88K0fg-#J751}oPWU*Kb6oUcF$&qw89QJ%Lj2~I}-LeVglHYXOY92)3DvoAD%`$P% zqnx!0FhU@vYbh9ZDz)y|bgP9zB_m6+P0|61Gz>4VinR+f;0}$uTDwDK8;}{`S_MZz z{TOenfl=-59jIogD(iN3!O<&ustO5oU;q=kh!kC6gqRC^91S&4)Dbx@trs1B==u6c7J=(3qZ1@Wt3TrTL4=+5b7 zJFh90>2{Ic4C)#JRHQX5xxr&ayxUSL%-U?LH~}aiiz(p9{+^U$kx0eO7Cu z@5?vNUw;Riy!dKS+__TUF?H>qg$GApT75cpf%YZ4r)TD`t}cG^-BYnkHvLQ4*T1Em z%N}cZ=JeQ+12gqUn)!E6M0?90On$!i%(Q>|&3%VE_mnTaKj$2r`KU;oy}i|*ZFyq$ z;`Q|Dm$Qpk&TbyNb>PgYLrzZHacCrAzHs~7_ST~_Tj%VRC$medc3;nX%Rj2;p2fEj uzu#=uSL(Z+%U}2XeZtuF);CH0RwIRd99~!ojLs9@KVVWC5I>CV+y5WzS=4p_ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_356_dumbbell.png b/res/glyphicons/glyphicons_356_dumbbell.png new file mode 100644 index 0000000000000000000000000000000000000000..82cc4f5dd3ef0255c934aba2cb402b341d5c3021 GIT binary patch literal 1249 zcmaJ>Pl()97|;5rE`^r$4`RDkVivK5PLh||yvf9w)=ZLd2b|q;cECA!Fq^!ciJRob z@HiTt8C~bgfl$4Lik4L z^hldH-p1?SkP64$zvFkhtlNB1cWEd(xsI5HF`zlFaypA0ca1Q9h4lQWD*XQWMS=Id zs_?Sfl$)_h`u@UZLY6ldJMQM1TlR$0r}#>ygMpARhtI+wO7*NNjO^;L&&86!k5t%N zRoErfZMJxmCWKeTV!@RW;xQJ{yoxb8$tyBaBpGg8K=Znab*03QF9EzI-m2cV>SJGU zstSF^VqKDk!=X4ViZtm-s9Y}RHWZ}*8ijNtVop|w(z%HRi==Mi$IPb@pIdZR=zvuP zV7ePZ7&n`HhNEpVDUY%x|tA%(WFCZFlm)mpE8>EY0R6;m_OchTtCVMC-O>;xst?R zCtf|FAwMdG?%#!hj5KJp62z!L_y|r~v2H6hqiCwOja6Zc_4cJ~5;*|=hqX)CGUTEq zt0od8Amh0@^I1T~J!%AOybJuiPxQcvdXSKUM^>Fdz=Tu1U?cAPE{)QPl=ooZ17Nh< z#Y+1uj>P+#cA^QBkZ<=!5Dt4oOd^=v1V;2e>BFKJ}0=^KjqIKAE}w%J!ub?_5G(p1bh)XFq$-J+gG*>9+dD z;_>xA&$g6fSDtzP@?7g?rS{;??Zf&Mx%SHwRzPNF{cGpn{B-N@-+mol+Pl()97*CNF*>>29s8i|IXNuLLlYcYGWa3WOOpev=(CV4yax=CJ| zym4k13Pn8Bi=w56fPgU-*_rKvr6I|C@5}f5 zzTfvRAI;6ao*8>~jA59JJ#E(Mnx)Uvk8h*zE5{F?q{}X1HOV|)AU!9BjPBtU1a{!G zVI4Z&(y?FQB*Q%RCu%fFv-XDO;(&8f9j+fl6wNS`Q~k(s7a;*H*hXQQz4gOSEI?kF zeMhbdwa9=SG`$?d`Q_P$yS(U@Ja*~;nCxrRKmdsY`hg!NTEEN=>}qtMig^|cRLEkP zT_@G7%>e_)5Xf9U=L(_-6onHDvZ9Eu07(!fUZA&<6APNGXi^ajFP3_Xy#=jqR)@am zsmyi=i8P+?^?F<{&*8Yui=|R2wINA4s*y{ULgMsuVX}8*!Gwt$qlh3Jg4CkZ!d+5k zDbw{3f~Z#8FdQbsMA4M-eJA2YPT+$ejccHtkUD%oMS*|8Av6ZN3n&HDhoov5EMffMN2A`s-~_~RaG^M zvRbT+uy&XbCv;)zG{vF^*vccZnh`^X;JAUYKWde^4kkG1;0PG=3V5mJxF}2o`_oDe zxxyH|54~!P128Csh91H|5LMb}MH-_-!x!mE%~vg{qUR0SvJ{yeV!cf%8%0h5|HE2E z#ngqoDaeM%@|29{Y6KA<4trGh$#CbRv`;kO3EMOwIS(#4U7xTA+Wu11K`suHNj~jC zA5p+yw~pmESsaKrHSI`~PC~lf7(sg27-AUG$&KlV?#qG0biBW`O}){-a`W`%%n7j5 zeD~$ETV}p{;^5s@=9)-WxMR;}w@iIoeDRE#y|+z0Q8C|=>{AoFw*P(RycCWdz1>`^ z?*udZ4prWBnSVcjirJkzdHaR&wee5>_-5jQ^*ge6XYZOTnb$7wIJJ6l{JF0u-u_X# zQ9ttPo|>n3K3zNe;a|`Ev-SA)m5;AJIdlKqbWix~`lT=Y)$FhKof`-5|NPt5EOTeN VRsH^})zj(E$hKz9^OYkX{0HHqnsxvH literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_358_file_import.png b/res/glyphicons/glyphicons_358_file_import.png new file mode 100644 index 0000000000000000000000000000000000000000..27b4ee5e6fd2bd25f01c50bc325b2d5dc91e6310 GIT binary patch literal 1324 zcmaJ>eTds+7!Mmaj=3rf=A3R4QWb}5zS^WoXzxsubXTU7(oq9SASO|Pv7j)f%e`#yPo z&+~h}^3-T$XJY-$>oE*Vlt$DlT5m+pO@r&u`|>-9d(g54Y7=nWtHZV)08BQ$Nr0Ce zy#cB~H>V%{2;?wq?FFkg0Vm4$N`~ilybvl&w>g45P84SX5=cC&&$D~2GTQW@7dAZ~SH^k#&a!S;ZYul3253YVPCb`I!{07fwE!N09)4c5xfh=%8+_1GpIIX*&T*vMGq>&7&I_!MYbZl1XD^;rV9 z%slZtTc*ms0$SFt*#Jz=j#rJ@X+toHu~B>^5|IN3Kpl@9+YQAiPjvl?NRHJcfp<;d zbe>oxRVz>6iWdN!O=nUDMbkLPrRgloar7|GP&7kQ=;l&%R%AJm$>F_=K+yuTAy(8v zFBUrGi57&uNRpjSC*8@Uy`V|bf*`~`7$$`*QsImX^(f_r$-V~_ghpWb(DGb7_NY&J zZI~wz)72Clzg%8(?1sHUp^}l2?vr$yA{{5rt7{#?3b;$-p4MS?#s_2tgkC!^P(K>U zJ{Z;R{(<_2rm<${w*$MIr)iMD1`cpxh)B_0Mu@q%C$LZhbzAj}cKo-b=81OOGDVKn zxQsw?Jf{?BT9qYEV^p5cDVn6nSt=I?iyf>7B2C&v*sQ>_6vbvKPLXI@V+5g~N?d{G zc{RuKIk}H5xgpeD1H?gNtaTTgxi3~!0-!@LsCu5=AC-xg2feW6`M5I4;X`HJu-sVj zblk}vR}fe)1G5l#4&H5rXx)PWMe}ITawtazrB9<1pDAdJEM*i{(>RvsVa;_V>t~Jt z|HEoIPL-&PO0fz}kcf~S%&9^ zBV;^-wuJy)X%$PZ^Vn6d8`{1l+JsnKTS0VKTVmj%%?;3s)_=YI5nAt`OR7|jE}eRN z-^1tdN3|c{df-BWkqg&`mfuW>a`F42txH#qBzHW1=(YMEN4{8G+&;IX{@c~_CscLk zrc<)M^v=b@M>hSF zd+yF7r{&$BKQSNO+S6M2Mo1l~1+(slH+N=%yL9=+?v+Wccx+(t%h$I#bKB3n$G>=? z!fsx;&Hq$I XcKO}p=s(A<$H`$OZCqWJ>-+x$1QNQ( literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_360_bug.png b/res/glyphicons/glyphicons_360_bug.png new file mode 100644 index 0000000000000000000000000000000000000000..46d9dbb0e16c69ee9b25dd9a836e413da351d9c9 GIT binary patch literal 1394 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 T?LWAo#QJ$gxH@(?)VlLu@xk*? literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_363_cloud_upload.png b/res/glyphicons/glyphicons_363_cloud_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..e750ead43a7bcbd50edd79df540f6aacc38ccd52 GIT binary patch literal 1381 zcmaJ=ZD<>H7{B#pTf25Jb%N`V<2q$RlY2>WNp4ANa(7u%ms--;^@DHMyML0S_qMx# zOj5QnXOT`bsrJL@m!gB|K8S*qZQ`Oh2f8^G5m5?ai&~sc2V<;$5b=L$(iI##?&bME z_xzsc_q-h&8r<92zM~z(u+C(^kVfAw^xU_3BYGb^nmB?!4?uAg4x3q6lx%>-6mtyV zNnOf;G?0|?flDBQVai9$hD zI5r@%zA(jxSUy41LOjNbj1US1c`?Sv{Z!Bm<~mppL>jMxu%WOhus$D8v3#7SMJ60h z2r)Jh3WbDVAQX%@ut~##k|6^(sEbu^W8-(la=Z;BXxbUm)Ec8QlsBR2RXpN$vd$IQ>T^Iz*rtxxTEVGzU_j9!G-yGTBZJbX(JAChh)g`@;{&3|28cRV zSy!?~<_PdVtQcg4808bF08bMnBBRJ0RG|jyGaA!iUD8x{PB=|6a;P941!Sdy28rIB zR<`o0Y#L64bZ1ag5uhfmV##$LYwC4F+pt8N;EHQ2hz@H@3=FinHd@i&KWRFJVH-M= zLM&5SIRC_!Z7)zA`diqhKX&4+ZT*in-7`JZHgjZh;B?DQWyxEWpPKQX{n1|8n*a9v z^2^OwZo}nD|K@Xe_sB(jE->9ORVAL^c=his%<fT?kjP!f9pAA+% z`)VNNVMb;zoblhff8nwArHO~y<3Ck0v*`z$uMTv+JNV+O*6!m^-rRNlV#^8Q^XSaa z=}6D)^2GFwh2OsEDUq*jKQ(`F|0|V;|9$g^m!gN#T_fM0Te`-5ajWaS%;7!P@a2|G o{>=P$D|6Kk`Yu0n>FK5pY)7lD9^Q8h6$ZnS;-K(O{Mn=b0qGRd(f|Me literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_364_cloud_download.png b/res/glyphicons/glyphicons_364_cloud_download.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3c572701c0a84c4b79e4cd31398d5f13263869 GIT binary patch literal 1409 zcmaJ>eP|nH7{3~8?bd2_Y@;oe<2LC!P3|MfB{`bbBzM`;EnSw@uBd3PcW;uTm%HoT z87J|4qoo-NgRoCe!-8l6EF|kg z0FULw3`hb|E{$9Oofzg=RQd$r+J1EDdjv%6@B(lCJd5XdN6koa}> zJpxzcAhE|Ar{YEgWR>lsCg>aO?UzP}rGQLycj28y4jIS+DB{JOs##nyNR;hzXm5*2 z0xzq;;UKY0YA~L_Bf1H2ugmR}D4NDu)livM3rP?V`wB&W@|BZNVh?kH#&vt^Se$$Rx1z zyeXl2q&HQ;D0jDaR8^Fv6+I(ws^vIki3BRh0S#J+6kTS7m~*>K1r<v0TIiBGk=(U018ElE~^%x3ao{ zNBUTNOI(x`%@%anm8@_Drt&n9qo$t2%cbCyTQHz#KWa1|ijhI#)9B=PM+GJva!0&^ zz^|XCQOlr&IAxF) z^C~2|GHS`lDw3{Qouu7^s)7LJ-7=P3Ww9(?)wESjGzs>0WdzY-Wr%@>Cf7tGYBm4J zV^~c`j1Tn}ubdh9=Dz(@Q^WYpHysO)^h`M}?t3{^zkFZb_h70HHf_Ahe1G`TcT#3U z1~2TG_+;|q$KKj}XUlZm!uX!)+Pr4~fBmd`-Kht@__=lHneay=4GW1R_fV?+e#cCz zv1RLv>yw$Wn&Y(>0*#-~CL4s^@Q=WjZf*Yk#rXQm#ksk!61%3`ny(!=?rJ0G_KoKq z(ur>`9(i@?@X^tubFZks?ESs<`i;_+xIV2(2{g29-ExGd46u-hkH7n_$hT@ ze)7?I?of8;J4=W1*B|#Wm+IS|yY^R?>+H-MnVj)tlBbti?9wdXuzFC2V#7IR>w)8~%; TiGTg9{Zotyz5LtZ)c$_~)rsDE literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_365_restart.png b/res/glyphicons/glyphicons_365_restart.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad33f61088bed76337a093fc8845ac096729a24 GIT binary patch literal 1465 zcmaJ>eM}o=7(ZlDLbf@?Nl?SiLkW(xch}Nud$h&&u7xHRurNTygzMega^b$bUe|(g zVZhAr4;(HeX2yVQlCckU5?yptvX5k&GmQpC!s}vNr_mXCmgZI2%9%FSjI2R4f_UmP8prnn1C4=%sCcm(N9Qn9 z6uel6BSJ(p2K0!H{W@svZ))TFdwI8j)%#FShK3GgU~p(gmXsu&@nTuOG?Yy>j-go- zqt}Zqk?M@Jpp2>m)M2$-c!DHRin5Zm4vHc-p*DiF;RL)X3t3A$DB9*ka~B4q=|Y^2 zvY}ioc=BRBhN00oo=&H&X}eX`6FBL1yG_h=Myb?rNQE>(c-p1xYof z^ROTB$~+j>?%sj&h62BAr=@f$o2S6zKmsyQj3gvQW*I@|bh9qP267Us@+tFcnDt_* zlqk@YBS_iZ1m&Wb5J|EDKNYmGE|-%D`k6p2;WUGp4psu8#wtK;tv_fBFr@X!5kQPEaUlpdm@2vQvp?xCN z-s$!i9(eJGUGHQ(HSGiP?5y|9CUh-Tx-Hh!m3rf9bBS;B@Xfb~=dRR0KH^4|g6>4T z@c5UF2df8fjSY<<<2%@iz_EehG;;IGLS@D7>t%zBZ|>}S0L7-9?t<~fk(nou(_QZ%i9y7{9`Rfx|Ip2>R(bBGF0jPfM@u*}~ep7OE?&g>6i?gzMc)xp2KZ?%vu$ zlubpAQNaxt*qmm5Q1?N$WM&#SBStXM59;uPj3q9bF=8~C`o)+`iSLz`k+|$~cklZ? z_xzsc_x!t;6I~s(HTTzG7*-qW6q0Cdu%FG9=>1bJ_%~YagOOg?t@p#6XaX!G>nVW8 zGGZDefhZ3TeGLK_R(?b2>4m-VU7Vz6NYU0I^BDu7F)YxYH$-U=Ks*J~iWVe(zc@?a ziX0^NdE#{3;K6{>IbwqDk**$TWKixi`dB{7FhV%QMqGl==j9_IKHN%sZD+QDjX)$JWrS@FMO<5n25{o zj|w3+>ht*ougB*Nm#{I-f}$n?+o_FJZee|Q#B#g|M5voRx~`U5B{85w-5SshobP7w z2jiloXtv-XyOKq&z*L?Ba@5o_c%c-WavKIT<3o++MKQWi_zXJv+))%z$jy5q5!OQ# zvGRtLl_E!g|6wCuRtV8wY#hQyzW=ZS?@#qPTg?O8rI#wn!%tpYZVODj`pC+bmLt*apO0!BJq}U zVYn~)@6P%QldETzHZKTfZE)s*~6|YiSeUb8?L(>XYJo(EYc;M3HLqsA7pym@&Et; literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_367_expand.png b/res/glyphicons/glyphicons_367_expand.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9842e40db2a3442a6da8f535de9fb08f895332 GIT binary patch literal 1275 zcmaJ>U5MON6iz9WTDwn+w6+Q%75tqfH#51D#GUPClFaUaGp@6P9Up{dle;rvliZlx zab{Og5d~MF&|L+UK6QOiS`>c@f)8D2MbsjtFXHNh_#(Dc!3Px)_1@W;?SiEt$-VdF zeCK@UFDtY4>9Ku>_Hi6HR-LgMbRB2U-aYi4&caJ{xsy08GKUvP&rK0$`gk7k)yQq5 z26FwSr@lZF9Jl+IpxGj=+9QUCBhh6#Vn0eKn&T#p_7m4zM1-G5?I11*zkYgN-~+!T z98+s@EwNB1m|0HI+;Y9?EiZbyFC3lZC;A385Fz67{V0qxqhAsRb`82`VoBf!DrB)F zY>{f!W_b&zh*!mY&XWP)ArwJDg%CW%D>6_dncgr53Wf>|rN|F2fqF~*1*2hChQ8>j zBy#=ZT1g5#W zwWE=u?``WP-83A;>3b3iQG{ZWQBq*Qh%z@GO#@m$H?*Dvpy<(fNqG_64RJCGx zgssLIabpiLrwkk1z*@J&8di#2g3~6(;iy$+JDA|CgA?AGgZzCp*9&4MxSv&W$Q7l* z)5x!+IN}GTFoK&fkby=Utw>{3X!wAhw0wmIWacf^aiA&;vHp&fjUuOj|6!dXv`sm0 z%c=zgiIVX>g9Ic*!yYw5GTem$>k}h%<2Fr5&PNMwHzdMjJ6uXSfrsO4LSj7_1{5&Z zZDFMy76;-TO*_)0lfbsyBS;V1LyTfNxhWmdGar3>osRc<)i#^`%}cL+ciRTP-&w2w zu=m8}$L@M}U3)9OJa)zY_~k#}`Eh#p0cY)kvp!{SxUCb;?W@MPzRNy*-t-tpJj zw?+M;c5>{+&!#SJXve+35A69FzGB^dZsoz>E-Zib=HY`${_DcE_>TZr6L7!C|nU0kTG4{dGXG*xuPnOtUbk_kJz%p{rapfjD$4s_QGY&JPF6DP?@ zlatQO3bO5s);C3}z6e4oisDm!5Wx%dMc6`H$|6$5;uW?R`XJIbPiAMP3oQ*v&N+Yn z@BhF5meaNB;mL`86AZ&lmgn_4U3VwXqdVw3tig4<>?Ot`S-?%wHABP{Y`lU%*)vMgXJYF#f4ebG~% zZ4(lx9M|o3Gu>OX<#LG)QA|^fbkz5W*-QJ;p^*h0MONqp#KAsDESf7gCV7@J z-3q}ADwVNeKN=>Ari|;E0Via5&hwJE2HFv+qkA+Ss2w%>0pjW?!f|NPdNdD>z%+Lc zcQjJ8t+8GZhwdOw+v1RmJmiyzk`e}tD0B5l=+FY1u8yrZ`C8WVY#ckb3MB((b39a_ zRuTlgSb&D8D~hZc1+6&E%ZanZz;+;&WNeD%OFWz|N(v7(T@Va0mn-Q7SW*;4mnB6m zj<97vBBpPl#A$+c?qTJJVpT0fCc$9?V|UalwKgU=YU2QC3lKb4F)hbW1XD>Rhg?zU zoIrLd#2y%wLUkU*Ku~C-$uvfhhA+^Qk}Vlxv5?gy!+;Vy#M;|ZHjW(Lk2Ped7x=8s zOPauPl#Feu#33#k_GrN+!=39SeWJRi-=Yag+o);AE@5X|Za-){7WShVF6lwnp@6|| z3(IY@I1q1Z+L0!mgk(D&L3$VuG4ko;hIB;F{QBQlbi6+)>xD+|=k@n5Pp*N-^;ez^ zQU`uGy8qoL_MbeuoRU9H*MEOx$Ave4`eWCw>r1y7!2b5~(n;gMdvWKlr+4n1SB@R7 z{)3;{Jg=>%?yg;0di%pYsXZIDyVi1lb2K)f4<&1_1T3RmnY8s{rc3! z&BvCnWdD7B?X7pdxcMS;?&FWnPBq`yc=hZ0={vVKpUnOepZL?Cdg|NO8Sdu6@0sg& Vyd%}w8yAzGQQ4^KUlx~7{SVlZqa^?U literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_369_collapse_top.png b/res/glyphicons/glyphicons_369_collapse_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5f03255db173928cf9279ee57a7e55c11f601b GIT binary patch literal 1274 zcmaJ>U5M0H6pmG78J(ilia%gOgt8WA@-v$|nJ}ZwBpG)~XS>c0b+AyIP43QwO>(oz z9VferEm8{mBuYyK+n1vFP_@tpU-n@|+lOt7to?zd?Tb&PRFp#TMM}MQc4k~q3`y?2 zC+9ooJAauUA3K~(>`pKYldO#DHL`A_&(KEl4#&ZdWZ8v{2A)7uxMPNpDcWcfvK7y4 z!WuN~*_kDnXPEU5oO%N{s&ANNylD5&a8GbJJGN<_;ZX^RY?{co3Ux?74oV#s#ixS0#HY<~g>jf~O1I zDyc?woYhbWSvj3aS%N6C0Hnnc836GBD+!{+3*-hVaYU7YDrMQ;#Sw3zJ*C$4a?ckz z6}T40fy(opPAA>Tq*2)9#au2&ZAemzXr!W9ADeN?kM{K~=rFQEC%_K!S!&UoL~UH) z2-DRNyr5bg81|!HqDad4*bI0vE%2U4I-pA8^igAr{77eyfbP5Jpi81*|p!*x{;aIX)Har=Y_}Au^E?KkLK-bgVw6buA~`9UvLTg<8BI0}Aagyey(VRY$icH%BMbDR zkkJKM6FHucu`Lxl*oD0wExNe3a~;|zs%!d9l8}@Qr_8pCxr0r2HfT8(@}oRYd(d?V zpu1be@@p)1#cP_juSq6>ZU-Ys4uc_vKAGH*jOeBt`2{lGUsm*DJ^t;NPu9KsAv0?VP$J`IpPp`amd+RxC)75z+F@JpY^Q6AA%mui~qfH;ro@NckXVzzGvrq(#LPC zRF^(_edony>eUNZAMa?K8eVRk`SqK>UOWHJAOFwXJ)OAt^Wu?RU*FIE{wVXq*g`^J Xj2!>Pt>mTc^lwx##`No@_s={5*ngeu literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_370_globe_af.png b/res/glyphicons/glyphicons_370_globe_af.png new file mode 100644 index 0000000000000000000000000000000000000000..96df03c0ba170870434931203fccec909678b3be GIT binary patch literal 1492 zcmaJ>eQXnD81LL1I5s!G_!`sOjj1r&yKC2Lds!K6@48iN8EqpoFy(gluDk4d*WF!h zw=7WsVM}yb<`kC@1BfvT3znUQ#mmhA z@kQAP2m+SxXg>#P42Ilag>a+R=zo^thPaOfOnvk_Vt)ecExlSWCc$S}}AN z39^LfjBK+U*PJL+x)4G%=J#ibB{iKWm@+KM#xTN!W6`J{SISz|g5W>Qi`B*YKtPk17t;7=HmKS zAMHfrae=2uD??fwIB6$6UV@4XdZW6~y z4^0q^+2QcgF4Aka+i9ECZgXd_K1tPBi37S*9V=w9R>*Jk|G_=Z^ zthUNA#1kTsr~ND^NczS){Up;`fg-#Fc&{QykpeR5nS>QIfYAC;Pg?vwuH+bwV6m zpZDJI&%1sYJpRP#(yOoCWacWnDo*!1UY`zs65bw2h$l{2Hrsuj`9rhs7Hqv)-ekG) z&OdKnKcC+-z9;eIK}Vpw`1yn~L?mWT4g=N~;+;;%is z{=|`?Vl04$p23YP{3E>L+&5&U>UAs8lbVm3o$F#L$|Mkf+<(E6nLVqOj zaxb|iG&Fj9@9ziS9y;p0J>h?`Y%V$x9Gx0yADaL8a^6Y|I literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_371_global.png b/res/glyphicons/glyphicons_371_global.png new file mode 100644 index 0000000000000000000000000000000000000000..312903331256e4ac5f70c5b1645141db88255f60 GIT binary patch literal 1390 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 Lv0FG6>!0`=-k;Oz literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_374_claw_hammer.png b/res/glyphicons/glyphicons_374_claw_hammer.png new file mode 100644 index 0000000000000000000000000000000000000000..e39c436f72113a9f76b770f360dc66a169e7e2c5 GIT binary patch literal 1370 zcmaJ>Z)_7~7{At0+2TGp6Vxr4=drL6Z11k^U9Y#5t-ZUlf}OLgP!l2C?%uVR-M`(v zwcQMX00|I+2BIeZLrhQ-l`3(GiDVJ+gCN-#;e#;{rzV;iv*{PVAkp`_b}W%_xx4p$ zpL>4K^Lzf?vC)xj?QNZH7>2cHhQ%COyU^3QK7iioqrHEk<#8w#;FvW5E3yNyq-u== zJY&d3kOQ(hJ#`ffVAumoTD|}a*{6BMGD5Pa6RH|ELSxv#VAYnDNdWP2P}Ix>v3&7M z0@u_8v5U!4Sz7=lZFt53V>2UpWoA-|tHj_|e4xrB0|tOHUNv;n<*NyzZkI=UPfQYc zT?I}ih!s+W>?kf+4#1gEB&bj{jk9csjxsDuKZS=WI!sdNW`lH;XIMTQ!y6ZYygBLw zpA*v!U+9z|N)XySNmeSAP$d$woFYlb<8jYMI2=S8L3i4Oay4kW8=DqH;3|%0L(MXA z&!RkTm0^NFOjklM>}+<`u<14ug;GXVWt*f!6loY5S;z_rSb zg6c7`u?a@GyT7BRqN=Rw*=0ws$EhkL(18I==ps^doe^TrKjUbqfU+)HO4<9G5fenY ztf@T9NNgldu^cO;XGf1d0_TnwG-x zcv?)dX^!K>7{kRD+=p=>I^bLwHWyV%ryvAo~_8Cp)>vh-%FjFv2Dxh2cSg)tWI z%gTyodVeF^fQ!LXRAiW;cH3X>dRpwqHn}WM52TosM#2^29;g`$(@yyhRt?#sTy_GvR7r}P< zmJgmB+ERFKdvK_G!yRX6%VKeKPc^;V_4h}6TT1@@?@lh|kIZd8dTf4i->tS(@2yAj z*c;cETFzX*`9XJ||2;jw?%7j&I=}n(U2NM_6!tn8Yf-1Jn_!F=&*5)qiR~nIVv}rjY==Z!x+)1I2&t=U-z28~!@eO& z84p1D86d6fY2vA%f%CqfJ&1#pc2xwNn0NV2&Pd`h2T0(LM5hIc6{#f z`Of*yUyhB9K0G+EdjP|*!E8p#qxW6t*}ZiO`b|Bv`mL{kav2uv3T!AYzy!^n1bEg| zsvr*(t@Y$rAc0|j^lhE;cyUH1ih98m1fZL0$mRh@KjfKpl(~Z?@^hw z>o7?mrt2w~PA=DTY#7}HMM8w)Lo;Ur>2s?04A`Yhe*+FMu<6o*ws-36+^Psy8ksRC5d`n*LaqZ z*$79maaK&zw3HH9IV{EFF;N!8RFsPO!F&fBfk+e55SF2%FDqyA`~C0|pcwM}rnaIfhaCG&;p2X*rw{A|fNpEJJj#+J=&K zGe>~`VdWSr2~hd>M>2GOPIyDHs;D4A4OEo60g3%pqvh0e z)wa9@>Cd2{BS2eP$C4X7w$&Skwrhzt!54cghz`9a1{T^}7p>@n;liV6y{}~@q1ar0 z_uQtzFYqDk^NVxCmnSkOcV39uW_c0{(Ujh{Ml7>o`r zjlUNq`!a=tiTD37HD>YZh5V}*7gBRS?V5YK^73{!@b^ncmP>;}w~dq+wjFxq4 zpZ=M{P6%&T3fC#lKAC*IT6pC5OOLO7*f+m3y;9Dd8$Wu>F6^GGt&e^@R-X0$-m>zj Jw2+#3?q7be#gza6 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_376_hand_saw.png b/res/glyphicons/glyphicons_376_hand_saw.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa71818fc00cb369c358ad341d5955e29fdffb2 GIT binary patch literal 1410 zcmaJ>eM}o=7{3ZuoK7P~jYQ0Od<>@T-L>@Eo)j#1SJpuh3(kUZa@@VNXYb3qx3=IP z3d}^7B`N{jvPGw3#?5H9#p%E$8iOY2vJZ{ZsEHble<+!WF;SNoeXq2P#ATPed*AoD z=l49n=j*0=dpb96sM&yF*v9x4K8e;E=c#g|_o1!br_pjd6jHFy7=d}w0$5Zwh5;Ve z#570(Q67DK8MI*<%qvQk(k+S~Bf0*ef20E&1)Q+1myM2MnY7VRA|N#I2l zn2ivtq*94qoHHzd2fTidMA0XQ{=&RCz5O<7Y@hx zC=&~XLVPd~3U-vSaovWZE&<1>gH#pYM-wC>BTFn)pbAPo8dYIwrz%dLu&Su1Q9?X27!h+SB-+yI zsF_hDL$_N=rw3I90gAg-EV<5NQM|5c%bI8sobB2OqQlw{107ASg+|m{Z!cq*Yjd2B z_7}c>d)v92CaCKV-tq6TaTTwlCJr1K4~?t)>!_>hVCA>irVp0777jl@$NY4mHZu78 z#qAuv=e6c3*HXpPlP^7TTij}_o*dj)MO?G1op;y7T?Z>4NH^SB)ir-&4>L3WPWAEg z|4je9*nZqq|I93Z@A=2LnZ|D_-dMTs$L-Az(%H_%wp-{YudWv!*6;qDOzxk;&aCv< zUwYKJ>|lvwt;RJbCVg zt@}JxuTJAbQ?H9RO!L|Fj=9%QCF)Zl*9^Xy^u$k@Qi>YX#n?qfel11nE` zq}Hak^^!Ngdy4;fpfNhsspSWiPgnlT%s+SQ=Eap)WUu>|vtu_lxDA&ZJNwlazh1kr R_iyK~7#Di@w>pL<{sT~Y+D8BY literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_377_riflescope.png b/res/glyphicons/glyphicons_377_riflescope.png new file mode 100644 index 0000000000000000000000000000000000000000..06d083947829e3b0699122bcea814e25331c9175 GIT binary patch literal 1451 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 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_379_electrical_socket_us.png b/res/glyphicons/glyphicons_379_electrical_socket_us.png new file mode 100644 index 0000000000000000000000000000000000000000..195a6f78922119d2bb0237de5e44f0d23d6c0bed GIT binary patch literal 1377 zcmaJ>eQXnD7{571heNU@W&zE(+>+^t?R~Vpwr9&|@2;+a&e;{HQ((8dckN~O#ogPr zoilEZ7&apbab$mx=>E_s5|sr1z({n7UxCCx5Fr5)2|^@F7*P@-QRjPIJC;be+}-=W z&pp5A`8{7Z+0*^ps+DV3Vi>k6*(IdW+TuQstU&Ke>(9)hWepUwu-6=fMac$OOfd%l zp46orNCQbJ?>Y`57*>Bn&17LVwV9Jm-7C2|-jZ%1G=@bwOO_-L0f-NPoN7dg`7gdA za8-#C+X5*nW$_@dc8%DecceQbj||CSh3MRXM@k$rpaUr3C0#Qdt`sFIb~&_n#Uz1O zRNzpQSR|EA_29f|13cjMd1Q*FahCPc{s7C;&)^J2GbDv>)lE-k`Y8C|G$hK-h)iiL| zqBLL@V3a^i7emmkRBFkv;ZzfaQbv{}i=@32sq1cB6>SHm!Ce~n)OIpu3y^8xm<3x# z^%!icfl==6@2IAz$V+-w!PY8qDl!Q)paTOsh!kC6gqU;B+bSxcqzR^6aK9#nC{ZY= z3daUS))%JO5X&cMT8PJ3kr6_nATP%FxStBT&Rhe_fk@(25LRSjF`f$YR0S(C;c!BT zv58P9Bm@JYV7!J+8V-~U8Msbeta=w4zb}^KZ6HC@&X}fFYn7h72~8(&S~%a!;!md} zSv6cihg-=iS758dKuOr9j#o;-srO(&(IM1mK@=l{!l%(Gz6Q}@B6C@&|$Q)Fm2C6+8(_nR{scxTenq=fqLOco>lnNRoHsrLj zl~-lca3ZAJgPMu}mE9tiTxPK%Ue>fVO*9Gac4-9BVQGkgfhN~RBl;xq=phWNYe)*Q zOzHfYEqc=g)u_{$GqyXq@qy;U)I-{1?R5=Z*uz~L;~&g!8XlLouRZ_Pzu6nD>t@cK z^QZdWpI(pE&$aFuhpSt5Jay{UzHgZQr$#TYo;%)m=&!NJp>y;p^|O z{+*a-iTak0_HLaTT``SKEcD;*-}dY6#>tZ}?LF}4v$J(q_PsLm l>z|W=Za>|+<-~=BjyX)5*xu2!m1uQ;dP%Wc_$1!{`hO~))b;=X literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_380_pinterest.png b/res/glyphicons/glyphicons_380_pinterest.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f9805accb95257693ef6f997b5a523b61554ba GIT binary patch literal 1379 zcmaJ>eT>s&81Es%0p4lmNBjt;*8{M)Z{{hf4E=_DDg9j3ek8W2L>;Oc>JN5sAx#^5)=_a@a=A!mq=*ZzVG|= z`906?`RZ7I=8=x2_b$aStRvMYX3=`L_p~oU@3YnTCA8cFr2&|;3a~0W0OM6_5a208 zE`ltO)uCsPgI)}~>31zZ00+{Kaf)RGWKSnhGi-#$u->&bTUN>d;)9^5nQ`KePd+Db zO^p*9B55jZ3!tR+4Lcw=oXIQ0WhJH(YuDhtH4Ygt0F?2Xp_?vOixYLb9NK$glECXK zupB4mNDZX>alvu`9tni}3Psa6!vyGXgkk81@E}D8NebPJpAK^oh6_gV#zi1+j#}Wd zVzS{2o#I3ZLYpJWYPA}uh60vTBv&Yr8ND{-beSZ8tw;12PL-tKulA z9)<2E80GH9j+%<9($cdlj$V&bRY;%%1DMc7r06;$#GG62XsCd)E?P>(`f<&Mo7}MnBW;HD6(u+ka!^xrlOuR&%k^jk_1$Qm4ZAkP%K5&u~IM=ONu;` zWLZ{>M%ZYgiA|Xz(qFQm<(4cP7jg`~IxQ=j z=?Nb6D%s!)9Bm6wla6KJ^-^%!br?`IiyAG8Vhp12X>?*kNhz4%LqbH7m}hn1p?$WtMaiU>48A~LGNK@IAl(WAT$8#`U|`h?SEvxpMnS3yCp=#W@b)Q9Yn zrdX!iOL{%1YY0%^&0)!T7VF}9P21E&li+PzBZv;IAqFOzTnCLPd+6Iu7}mBdCGz>& znIlgc9be$L#b3K>E!R6=TDT&=z}F-DdfJxs9oTk~UwOyPJ06&HWcahP<0oI|M}K!- z4s5`%AN5M%IsLwg&FpXcPExnbjPJZXeE+!<7uIi`e(T+J&z$;Za^s#<@zeM3I?^@v z=;*bN|Cv47zWNl~^~(N*%i8u5SH^c8@GTfSR{e9bebi&#&e4|;pxoQ!@`!Sp72-SjpWj&6IaVmom*LXXYiNZuY+0oiG$m} z7y0Lxy#2-*ZWM6S+mk<>_SFvFsv2Ma+V%3{%iF4fRS(a8_TKsZ7hgO)aeg^CRvy0i l^u`Ho)Y|u#HMMS}4VykYvgm_rt6uefdnqX+9!hL};a{xA*GvEa literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_381_dropbox.png b/res/glyphicons/glyphicons_381_dropbox.png new file mode 100644 index 0000000000000000000000000000000000000000..532ac915d576f1756abd6f99ff97752a4d6b5889 GIT binary patch literal 1396 zcmaJ>eQXnD7(c$HY!M+Q&Mz*vspx3$qwDp0S((?~l~wI*+6psK+3oIad+xrxdrLnM zA~P5ig{T9C#J>zCeqhuD{!oY_OLR)eGz!TQ3CvAnf}j`^_y>HiYsV4^m%Dr4_qpfy zJiq7bUQYL|YxUjf!!WEh*(+wydWZMivKYP3mZO)^(gvk|n6>h-EIR-bRBI66NkcAx z43O38b7PMMnLv-0u{qXXbkJ_so1hI1Ry>L3Yr-uE`ISPfop1% z*bqulDLW2|T5rt(*;-#tsSPO+mFQWEcUO31zyMIjD~4{md?iZM?eb{viAe<H7Zs zF+-|9mB!8o7oe9CPQ>j_QrrSsqN*P&^ZITX9q+xh*)wNxi0oQ5VP}|K_Z9ry#Yn2=Y)g#~D z1f$&D+)-0eRc7_g6O|g930W!3loMq|FR!J8vXt_np#^YHQU!9T_&GZBh zdX;Q&1&+1}s0qh1@OmkD?FI}ennR5iMlmudd>Wm&U_xSILNFeZBsN4euKX#ncQaUWj>WooPSZ9u(Ij}=*%3sC*&zldnp_8s=+5E35QfdWJ1Gje%EXcN z%Wiv-YH1Bp9n_L{7IfhAmiE5A@HcGf3E}q_A`j1hV*Eh)k6nAVetkGlzPPLX&qv>U zD~(~#jt-CaymaoPWi>8#Z+4ONeSXQe`uo_1(YC+;x_n{B%E`UH$(2QRzIN~!c2In^ z^V-0cDXX}9_s~C+pPf0s{NEky+0L<5t$1uoBu?#Hbn2&1vG-c;`xS0ce;Ik`ha)FD zG8=`pSo&PeH3=`9&G*CX84TvA52Pp;>WRp;r{>}wb=#$ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_382_google_plus.png b/res/glyphicons/glyphicons_382_google_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4eda8ca9f7fde31d2ad6f36ebc474734fb5f9e GIT binary patch literal 1425 zcmaJ>eP|nH7{5&IYPDbomANr`Ue|RSOYS4hCAlT*lDj0$Xws5~THRo~-n~iBUhdAj zH%(e6NGpPC5f#PZ6xMCE{bLAZ}U0ir+(2bmDty(iI##?(Tix z=bqp5{GP9StTP#_t=Uk6VOVXvO-P}2z5P^Iq4#1T_$ONKf{`BBrDtG4GyxWp^@Bs*5*iAnv=^ogVXy+t7=MrrlS21TGG=>FQi-sum1Bmy6tfB>ppQmRC zT#~d&ti%9}6 zslfgqu}rEb(TVfA32=|g?UX2*##z=yw|H2V-hnd|&5#tjSts4Xd039|;^m7#-b^{e zrG#kN7di!rJ_rqtBnyRttKfF&W|pM=e!p#lVVp?AX$@*nEIKu-v0_00mSidhRCEou zEsDK*9tH`-bUB2akw~l<)~s@(P|C=nXpppvB6B%Au9CI|Q{Wnn>uOu+K?9H}VCi{N zLiNZrR=_BCH+ED}l%*9tBX6puIAw_hD#!s1T8I=~VuYA;9j1Z`D5`=k9OGelbFHjLL8>LtQl`O*e z{ZS#rMtwe?;Pv>t;R-gcSy0p@U^}(3$~A1{hFFd_fe3Xot?O!~RXY20s9Sxyf%9D~ zzBM6Aie?M8*_AAF1*S3p%TwR*4(|{)a`G5JHq&pgcTHkcf;daZrIODEDYch2@>9*nPsOqLxJoampYg=2b}S z%Bq7#pCaj+6(H>%R22j$?Uu3RDvKrYs-~@IqDio~DC&es_uoa54yjj!*UdiBDd z-`1Ih&qpr(I+fb<0@gTtb^YNhCls^uv$4}#Ui)Z1nG5`z`~};GWoH-slXbr4zx%h> z&CNaZu%i>Z{pi}B-L<2}-Sbb&M}F9FX!Ngt!n|X|=pH+9u4!@SGs%qy_pjT0>mgy7 zx%};WU9)F`?dq|*_7A5{4ZQOH$Csz8$0n8t|Bj}U*52RGJuVC5J2MSd|DrHX-@8e@ z@D|&oZCf+5clSum)*8>r^e0mb)Ntmu;c4Go@Yw?m@W|$4lO06<#YbJ?FP)R4_id@K z|B-#-)YrtoXvf=kp5DJ^Fy?GN{Ic=<@fiKcA4lT{=ij}!ws|7f@zm)3-yLtAtbg$A i7n!dnuFNI0Zy4$YWKgoC`DZCUuF#I2Uu;oes literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_383_jolicloud.png b/res/glyphicons/glyphicons_383_jolicloud.png new file mode 100644 index 0000000000000000000000000000000000000000..05cffb4270086515aa27bba410acdffaceabe0e1 GIT binary patch literal 1283 zcmaJ>Pi)&%7%sV(0~({X+lCmV!(+5R6-gcCRDW3B%}cohaF(tI82P^H0dfa&9eR8`~3aB z@Av)l`Rdy9(^Iok48u&9SB)B7XOic{L-c*4U-*YEPZP6A>Uf>>tq3uigWCv{eXE0N z$Z|Gc`5rAXO!`l^(Im~vS=GjV)=G4;13#o_hFLl@2rYX95zs~*Hz=@wef2d9T&KXE zlPY{A)KS-6-HK3sYpr2#ZPd{Atz*c&i9kJhT1Wyp?fs$s~tBsL&VikjC+wy>#;sR2GiU< z*wI+gu@CjaUgQnqbZicJ$VUN*DJfydh%#4Sj9gkk%QLXuOTLzk0^94kjtV6c=JGsL zpk5LLqo_esG!#YFO-(N@@^a!VF>n+}C0U1JHQnG%SkvF!v1~U;1kWXv9C1aF z`zmru5%$5b6smh42E3q9)-sKel28PCQgS6zENVGjGEFG4Bdl{IW#h;x;D1(5Oc>kBoMnoAin5SwV*;B;%lUtLG7Rx#MkyUDw7zyu>9v=(!Xy z+#O)KBNm6^BTYNjq?3?r4@Zz54u=>8baEp)qT4TBzCg$Old_>T2G`rIRx4zFdu-*- zM?cIsm(ug^?ftYecYEjL%X3$mC(`fieRsJv|M=X$cke#)B;H;*ed62W=l567?!Lgx z{`lH-dT(N4>*3ku)ce1#UN{Y|Y^SRWD{oGwE;hs0XY|jS#V;nOF3vvs<&6}4gs+{f z{+$-?3dmBpUJg}Tg}@$Z~gJc)l2T@ bli(X>Ve*4JS8kp%liyO=Tr)l`wzmHRUd)?2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_384_yahoo.png b/res/glyphicons/glyphicons_384_yahoo.png new file mode 100644 index 0000000000000000000000000000000000000000..aa89343daf1dfd7cb59b9e529d69410536969f58 GIT binary patch literal 1315 zcmaJ>Pi)&%7R?|uG$ z-}n3e`NHDDshI=M9H1y_rgB=Xk@Z;g?4Km>%}(JVS&n0E883Ma+|dI>$)>l8K*iCU zsD^a2_sZ8OPf_vTtokxuuAY$$&q?W#PO9tp1Wi%-`L3@UYY2l?)U@0J{rktC(ZDhb z^hGctLqOauylb3nY@1Nw8@)2g^J!vw{jC)VN%(tja<;o6V{s zpA}1EY{d<+?iwg^8euJhl@*oML{T7EQtto2N=krq>;-ktv&XHn*z&L!wmcswO9FVI zsvDLY30{mUIpT@}>s4fy1J41&Qb^Wg7_cx)Jc}eoj)V`%DVr{9TuDwVyru~}J;IuM zQZ|m90RDy5L_w9=w94`dq!~iSG$d?c8;yEYw()3ZTT!1#w(d4bLXswG=xrO*b4|PF zw=BbR!#or9pluPraJPeH_E;Q>_cZNTlT1Ri-5o)4*d1czlF1Foh}I^byhq0Sn~Eye zyFab2tgQIdgQtp*-n((h{`U{ge0A`C=H+7eWef<#bT@W6|GIedIdJ^S`nBG~ zTR+G0jl!f%sZb?Boe=DZ(NP- zOT|8<`&;1GKKK*N#rNMDoN7&eF*UvQ!|eNi4K_d6Ow8P!dbj#r<6v=pf;xBT**EdU RsTe`p(39M3i!U0nS&#I-PeT-VWw$=$p3E|+W5ndB}mn$*w+t=kZCh?S5Y(Z?Avmb-(xfXmcHG^2?|a|R z_xt(&y2Q649{y<>eA9`T~kL0qVYMWuj*9q55hoA$2{v9<(QOgK}QB>5eICc5sPbr{l zaq3Yn$K;$8D(O4NT{JvCSWw5yYD}Yc41oTcNDP<=E1+f?mM7NYRKu=F_P&^=KtlzW z1wqau13PPTclwu7V~YeY=~%tyt;*zTFCOcS{5Yasjlu|-L`;lQ5m%> zI8G6!%ORLfF1KRX@|uYvDWhwOL&Gpbo2DOEL)*hc=o*ddYI}vcgXkgT*%enM^%(1F zfl2Oe?5L%vsVjO;#WfmnYATHkWFiZDgcNKrBFx2yU7ZwAF(g~9_+K+poT^lGP2@S5 zkHi>W;8SS`rDTGaSxFG0DLIi!_A*i5nQve zcE6HMuE^E*A}#IOCTNsG)UU&UfdXl?D2b6J;X`r~B59dTCL$?LmU)h9VzpH%Yeh}~ z|HH~rUP>?#iQ!U^q6ryI6|s&D)a=oOftx!+_xnUN6st%Q64KC^QZX!TVm>>)!TPD^<%?}E&9}|0$vSgyoay}~7@D1gkN?&EJ6D}PeI+PK z8@GXb&R)`vJ-_Mo+4Jx2f_-`AU-P-!_sl;gU6?rh{=V#;vs2#$?%jHH^D|rUhI3!x zQ{{zquZ%wg9yy|P2$yz&HSyzb^=;}n^&kp@ncb7W&JNtPSiaJ6^tI1>&VBg>+I!;r z1IA+a)w%SUsZQpTEgv19KHvT9{kObR`T6AEbKCA%JfTVlPflK~UwHbdBqto(zyDCq z&L8@2;pR8jfB0v1X6l21yOwSpe06>gvy^>%-|oBDZVY_=!`9M^;62^{wPoZ%X)5`| F#D9>7$0q;) literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_386_picasa.png b/res/glyphicons/glyphicons_386_picasa.png new file mode 100644 index 0000000000000000000000000000000000000000..7b783705a216d1bc81539ce36d05df90c7049b34 GIT binary patch literal 1370 zcmaJ>eP|nH7{9ezx0NufmexAwadB+IlKV(;V!reYC9WS}sdCg3|R@lm{6x8?9q$@af+}-=W z&pp5A`8{7Z-QV}LXJ^+=48uI>LqZmz#M@U$p%rxS9fuxKb{SHJitoeqT%fo!8mzPc5FS$DYs%{}PhD8rnElC~)5HEnDYQ%_@x$^|B zDluX(l%XBpr!FTpJAILmED3%z#qWXE@%51pzp+ty)ku4cxUT z70fb>5s2wV2)dQYY#KJ4dZJLu$f{(Kw4Wk%-HofJ?Z7O!L*uU6PHxNsWEMDP*_Kf~ zM!XF$%H6#kH53(jQ_m{fS}jgRCV>WYU_b|vqHBy0bN*RdMFo^J!IaDH*R&8L%4JpI z*^tNvA{5K9$rMcsi8w1V0>_1uVmz4$QeoGbYhWu7N&E`J2B-*~3b72u3N%fNOeB&L z;%tiJI3XP3!ifepZ8%UeWZ*h=vFaTxeNQZ(w1EUoJ7=0&qgDD#CN!OrY2nEM7T=$d zWYus5Pq~$>a|O0~3@9nv)bUy=c=av}D4Ii!7Dh3m05}?*xIju|67fJXB#LZ^sAH8a zDQiTI0RO{^VOEG!0f7o7X@W##6q$!A)IhyQ;~K2*G}Y}BUXzR>N{CMZBT`v|M0Zge zvr4LL8cvjSdr(smptjqBU`- zD7~-A3&T4uJ*0X%=0EzOec5~F$I|E**zNV*ubh5!aNCKibFcRJ+O4*mgIepyJ%ux0 zb$`}$v%Por?d_ds|Crl*d`GA8`re@rXD%-XE5g}t3NIb`I(Tc>p3D1R$TR8tj~qL- zr~mVX>2C+WocdX~b>)F3d;J;TQ0w7|{K~cI)%mdxuD-m|a&+mPwSV_59-!KPdw+KI c+%@k!)^TBV`S!)-@7=#$TI>@(NeoZ?2iM)sa{vGU literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_387_amazon.png b/res/glyphicons/glyphicons_387_amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..eea2a6e561195c321892f52b30a173e1d39c24c6 GIT binary patch literal 1421 zcmaJ>4QSkC7>?^KUFntCQEX?WAuXG8z01!vxm>(kcXzq7=XPCb&shrM(&X!1Y%YmO z&Pxj`YZatOhd=8;L3B8Oz%e!{DE@U;of{LjTBchqRH=${#ev$bZi;@n-gO1XLXz+M z-n`HIKJQ;f+S?vt%Q zGeQb<072@1;xq^#NXc(+o|l@BK{ zRF;C+BXojD=n;^XTL%o#Inb6A2l_<6gtcr#12zW@WPl~0c1BT6&JJREyByp*VjM&B zDpp?*TPD?&Xh$QO0Z`iGb&CW^q7369n`wq2n^1}%DV%^e<0hLqn&BuPTDUOi&5(Mz z4n9`!1y4aNZCN^pf>2e4eJ&{;3teS;H!Ia^)pyQ;6z%v;quDrHsb%2{RZmDf1`*nbK08`5v zBCJPmLlF#fcY8-gMM+%I)3b(>k5dwHpnwceEfbO=^Nb*KZkHj$0tyPRiCO1soDX8z ztSoU19c8?Jf?=6Rj3oJRh>21>%labGP$b+;_#9`Bfz?1L@kkIG^ZF>7kN60NCrL6& z`Ta3I#Kc&Z<$W~k3m36*)wBdv1ddY&E8oO2x5aW10|=I8BsEPbwn}?ivotfU>1d>r zLGMclqO3ZCElwp1T!A4!38a{zWzc*nIQbR~2$F@3=7TX(Fnki8SZ^#!g+ty59gQ+H zR=`TDQdW!{0{(}M`WQY$czJ@3kQffhNFry+mI4Yr8d9vnPLZ8H;S@nl!GyRa&?{sW z3)_}b`t`IdYN{E)ogP$V2*~f2vG^*BdGV^IEo#C^aJDNW2oEbm3{*I|1{~2hudn+R zLGGaAd?;zp%=7)eO0QNo>D}FzL-@XJ6P_ z`_A|f(~`QhMb%&JoM1n#5d-Je2*Uce-di}5*m$`qwWIg3O~=1ze81#@JsZNu)-JW2 zpqbML+A9yop89!cQ+Q#jerxpQGfyAuxj!^s`pr!FXLnwB_R@ela-CXy1Dy=-J%6NX z@$g^IRqkkfySn!LEdCODH(z~r>`G%zb?w?w`zu>{_`+P>^RLWY`)Ob4g!xeNlgFta zZse+FOV?Z-ZW7(y>IcLBY`Af8`yaueUCHj%uhz>$-AiL%&sWr~Prhc}yZO(Ly5Duz z5BjF|jgR$xK0R4?G7$SQmRo3jy%Oh-|l*p%?%#f{oVA4F?i;lopbyDosV6v h`aQR4aqi$VNC`4;9IqI?Hqqt$AmhH7cx literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_388_tumblr.png b/res/glyphicons/glyphicons_388_tumblr.png new file mode 100644 index 0000000000000000000000000000000000000000..2d61fad9bbcefdc5adefb0b14efcbb88709f9d67 GIT binary patch literal 1302 zcmaJ>U5Fc16u#RPTUN`uEwpQkFiuofF`2oO%uj~Rb|*6vo6@Wy8#E6JnatcI`>Ut-eY!@sYX6D{| z=6vUT=WkAx=U&)5c4!O$u(x}-amD7f05;Jtk>|o-^5)bL_o3p2BM0t z(LxnuSWAo7&@=#}ckF5n*Gk7_(|1!wtdr`w0YL*WeWVu{<^sZ01GQ`~NB@5LYnrmH z9Q`t1VoQOF+V;`q5X~>oRn6rEGi%XDW~k|&OboaP8&uDAyh!fl=)PT<>|-%QQ+*Y@ zkfXOq)ko-a@M>SG2;w z7dhqVHpYR>Fx_r9)lH}Tu*JY^HXGaExFpd?MoS(xdPy%z3@vCVGDADSw(n7~MWf+& zaE>NSw?c4(Qfb?;7Y!0cQpWU*fPpENaosqszIKEw=pK#xYDd+j05KI5`JK=t^=KxB zV3NBBI~pol=C)qY37vkNmdPLoxyZv2AqD%42y^+x&?W^m9L+a7@zV&q8pkesA+LFe*HTIF?J;OPO@+L5whAAsNw=pZrrNwim8})iU z06&k<-aT`D(mFqy_-Nzi?BPF7PrP>c2G~FP-UvL9`FC^k%)~o3+Sq;UgfjK?9`Nc- zaK$?R%%}SfuKWO+(xn6SlK#y}F_HLX^U2d|Q@eWUL(Aof{ZCzGRtw3Mx87an9y#`5 zwYvVRRla>;Wc46e1l1d(wZ&cM&c1nWZS1kR*^A%__4~~FDgJ}T#_m@>o;{&{Iesg7 zc}2Z5^4;z6)#rZu{Ij*0Z*Sdw|IrKHMexuhcq#Mu@s&45{*3=rMSV{DB42;|KQBL| AX#fBK literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_389_wordpress.png b/res/glyphicons/glyphicons_389_wordpress.png new file mode 100644 index 0000000000000000000000000000000000000000..406cce42309312a33910f0080f14cba661e6f07f GIT binary patch literal 1459 zcmaJ>eQXnD81L9J=L!>b4p2vq8-!`v-d#Vg?WJY3y({ZN$LuB)6|?KzyY|@i?sj*j z-Hhml7*Jx|A`8(tjUgHp@MC@@j7z-M#Po z-1B>$-}805TbkD`s=T+-WHK#^G}1A+E;XKta`--*_5TT%WjYhrTjdTt%c{T>;N=8B zB55`WVu0nlyS@fKlc{t{Xp8Id=z5Bi(>B)7vE|YVM4L>$hMdB3oj^wtASpyNoR9bNvkVbpn=Azf}#tu zgcugtgq+d+C}cVtLRyJN=L}0)AyF`8SdLXN!iHn%v=LWcThn9U2929)Yi->Mz+ym? zGb#t`(NR|f!`$84QBjfS=Jb?|D(2(lIShy(4J2KIq=-Bt$eh}s3b25zNXuNt_!^=8 zXeJ}@6zO6}hZiS3WGGA!bTB|NcG}}{hnPSp=)~QIGsD1qAe7j6hz&d3b{8EA<0MTG z1Y`Gl!*qZQdpsW6?ee&TMQlXUbXMYk;nctiH?Yhtu~bL}tS+lVpbFanA6Dfwk}m}%+=Ky6cwnQsVT^VdJ^@c2N0_k(1CEf3 zVMrHR!1D7_R*W11{)c7UBptvVH0}x!C_|gjjjd z!Dd7qU6T~Mm6X8AlIFvV9ux%#$nR#c*gT7Q@w}!jYQjk{wsRv04|78dBsjS$9MPlS z59Lgzl1C$Spe^^)$j0Zpo z>3gic;J|O^s`uai^nN`Lb0 z%_|jr)Y17?*_Shorza~O`S99Utej_G1HH|Iub{o{4}IG>QoZ``>Ae@tiA1gM^5wOY z!!JF4N%;7O@|oqw|9Y(UK>GxGY2ompPYpL z=_i(!9$1DhPaS+0Oj!0`Xj)tKocV;h;E&Jhc6RLi=>E-HkAL^x#lGLs-rGj6ukT{_ zJloXp&FOFrb)jCLDEsl%^frv>udMoK%aN_)r&1d#atmk1`a}P!Kw5HMzH;Tvpj=XJ Xat*H7{;+NApz#}xFwOL#V0+(xdJOq2 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_390_instapaper.png b/res/glyphicons/glyphicons_390_instapaper.png new file mode 100644 index 0000000000000000000000000000000000000000..d3788bd6bf493c72c3bb4841c296ab15ccfab9ce GIT binary patch literal 1210 zcmaJ>PiWIn7>^GB;1nllWvl@yZE2Yv& zTL6HS)723CuvA(z9K?e} zk(BXWE95~+;C-LQ)z^-38Lrd#r*>TFg^(}97_}pt)T1#m1e4tT-_cOfvDfs%cI5Tr zbZj1a(1!tz2`SKLM3}3mB9|1<@^oak>DQv3*;CMpDu~qD1 z4-R@X@8QADb7`Nbo)t7nLXr+_SZxn;$C_R*Y`HcH;whf?pyv`mf47R|H(2b8H#F@~ zlS~5Lu8kl$tPL>?$mB+3L}x!lC&_r%i+aA&eP6HDY9aG!_w?@@&lAqAk%{Y%UrvvI zzqaT6_zPz5$dyf_2e+)OtTdMoJ$d?c=G9Mq+n&3|a$@!Yd*FWU&85?$W-_sJ-`LU8 q=QHPae^GwTXg?k|Uf+ASd920+52ml)e0%3Q{hJhxIsJB_cIgkrJAt17 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_391_evernote.png b/res/glyphicons/glyphicons_391_evernote.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae80dc1c7addba024fb5301bcc7d2f9d195eb42 GIT binary patch literal 1377 zcmaJ>eQXnD7{6IG11W6&!x$PbhZ;1t_tD<=Ch0`QEf zjDj3cwEA=3fF2ABEa*c8SjcV@RND+IzD~GiItYznJ)3KeqLu-~N5H6VC5Wq^e@WoF zmLQ&DvsBhegOc7i=7RiK|ByOXR^uA6xfk!L3CMs6pn}&-!}5e$f@s(k(ApQ11l~}A zEiHM+KG>m>Ax?2;|Mxib775 zo4(L4L6jhL1d^;)tKn)SY`dc*9goL-8w?Xd8X>Q4L8TV5yp1gjBJfmKcc5-txNlJz zu`4h^Af}5Um`*mkWZ3eWi9#tOYl=hCVTv?OKdy$h2Xo*ijazDaLv;s`IpEn9S4H(G zZft>3?r!g>rKqV(dQQbP8gXhW2@GHY3wnqY-C%^63j?l>3aA*OtycWM88JarD!L|c zti(m)6vuOEnWn{5l9L#b=VNIpnNCHinD5LtupEdaVGUtZEG>&N!%>{b(6q$FW{V$*yhUjZz5uEf`QVj~Xq8Vq{SGG}`eISz=PjNSc)-jwPB{ZCT1% zkt4wWuu_Z@lT<{c*fdR$h>WHRP=^L+_Gr?8&6T11eIgi&HHs1v(m+wE7?9{4HR?`D zS8dDdA^jdSbOdOu7O~_qiw*Izrfq4WN${6TBZxLjLkui5xh@*f)vtA;^P+8KMobRX ze)#B(`QSL!v3JLXmma%g!`JPVfIJ*nzo*j)%$@AKw=L$ZIP_lcL^)U9aO}v5UuWb~ zFPuJc`EW<7RNAwxXvRN2G9$gd|A~7(EKG{?bAc}|dE?f17up{vo>@I*9_)B>A3b}e z=5Dz>(1}KflY?D|9SkE@3(K&`G*GjHr+S%(=$(3HalesRPfwqzg>#%UGvtiH5hyOudaOkLG{gx2Tnhd`-eOG{zc;FwY#TZ{2(vS zr2hV6N;}-WW9^lLSM#!TAlmlqr`S8O?%(GQ@hh%Pkl!9Zb@#P}>B-=5_UQE6ue`cI j-Z-=F=)a%ry0Z(LIQ#Pa!oKv={-KwV`o&|Z;qm_f#Iw=z literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_392_xing.png b/res/glyphicons/glyphicons_392_xing.png new file mode 100644 index 0000000000000000000000000000000000000000..d617baab53bbc1cc8da5db7e244bbbd86eabab85 GIT binary patch literal 1355 zcmaJ>U2NM_6n3?$G=)rK@URVOvRqBjiNrst9mh-3C9zGik0eH?- z%Af!gt?|M|5XZ1>f9l0aIGKM^P;E1;_&VXb=^!+Q#YgInqRs+{&w#RSC5XSyEfct| zC5WSJp2|BJP|>q~YD^AOj|V3SKu2%ME!d9hApp?D3mg?t~ewerbyHD<7#VrumJARxU05TY&d`{0MD+vDym0m zunR`HySJmRqNZ-@IaSwa$Em3#Fn|dx=pj;cn-O9zJmu=BfQlj7YSsUm6B9(Ws%rwr zN?asHaXgoiXbU-=k&?g>Oa@wY;dXh+k*=iddxtp*gTw0PPHbEes!={ zTRd?idU@r*!ZWWTWs4@7&c{ssiV^tXMpwbKhdm4==*u*<2nmkUq^ra<%l0|v z_y7I>_uu?>W~jfdbw?|PVQr}aIg8eg;Msg1dS9zbD`LYSuR3jSZ`m=Rkbky@ljARY>8N2_?Ey8 zT_RrO(p1__fU+?#;ep|ap`11`rbTt4Z#Ujs6OjQ6Kozf9rtOP0iKyEZ(LNB91YTEx zV-m4Os*uj$3C9CC7iL2mMbkLXhv^=U=jmr~hN2mgLN_0xdqj>GnF!vv2;|Mvi(*zz zHhiIzM3fIX{a8> z&L$Y;?(UA7in_M0=Tbw-G}xYsjK0aa6Wv`X+bB}+u5V(22z zDLfmcc!5tOXru8Z(>un4^>+OfztqM+{VW4iWL(cP@&`H9LH?7N~Y{U$1giBo*3rw?zE~I zb|82vsAPjH@Qi~%PkN4p*GnN9cVIx#0&27fijhI#)956yNrj2W*aW92JV!LJ`i7J> zBS(P$VU-9k$0$~&xCBj*h>Wg@(10dr^k~e4jh$%(eIlBwT|x;7>7b}qOi1i5nd5HR z&>Y+EC4(L`4Fss~*0AITi*@marfq7XNeH&8Jdbwjc0qQgLM9_~AXzwX{F2w)49_oZ8fdzaH&wU7UI8q4~_AY5n6fr;PKHzb-6% zjbSYZ@P9@&4Sjdx`d0sYIy?L5>5qQHuS&!VFHbB#iA{HQjrMo^m@mBY@Z7G|N2r^Z z{$AQ~=0?XnJ@DDZ$KO5q-pmDV&)zNjm%hPg56ySKdF0i7Y~P>PPfZT5zP5e!>fFvr zc3bGJ`@h=hbX{y+l%GACAN1e0TN O{%|Q}Nd6)|^2UFQcgFJo literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_394_dribbble.png b/res/glyphicons/glyphicons_394_dribbble.png new file mode 100644 index 0000000000000000000000000000000000000000..ed801376ef4d675f59a337e2bb8f25b8965c47ba GIT binary patch literal 1490 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 Tj}dzZz296`9+b|c_fP)^5BbB_ literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_399_pinboard.png b/res/glyphicons/glyphicons_399_pinboard.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6062113a83ee532859488fea3301834ff66e08 GIT binary patch literal 1278 zcmaJ>Pi)&%821>RwzUNf&2A7BvC)lwEr1D;xbd{K9*?#YR{(j&0 z`~LZ(#f8@=kG_1AVVKFvNwY@Q6nzdKBJX~;xJ{Oqu(gbr!Y1z8F=TW%T!C!Gw_C6V zZFlY6A7O!E4*rem%Xqo^hUSDmZ&Mw<=SKw1Fon5ZWIL-6vn#NLf+F|Ncegnfxkc_R zxhhs81Gdr0^%yR#FVvm&RVVLqbF*xrrx61_#5UXWy&%zgMQ&hMBYP?qICh|dSBu;( zspaY-YlJamWj>R3L;zSt;Xzhb6fna|B9H`;+)5f`HCfT596P)?;w^TYTFopEeUVd< zYhxT~g3#@D`EG^}5DNok^yPSyf!_tHT!J+ffJ#EDUaQ5dk)qP-G!aFHWS zcSG=_YIVM)Mx=nYXNFFPeyx~AuG2xTrpT6($%~4r z7-ay=lCD^isj4}{(v4D9%u#35z`Ld}iWmQ$poUGOYNVmriP(heimSW?(mtG0szDtL`na>y0N z=soC`Gb6jg})ZN+f(hPHLuXNhLjF$d;wZ+z{*TOW7!L0{9=+$|3u?bJmM zzj*q>q2I>Np1Cmj!9<|`BD$7g@Jf9~rC&t$zDD)V%T XX%{{pkEi}B(?3$hS}?Dd8t?xH5V)F& literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_400_behance.png b/res/glyphicons/glyphicons_400_behance.png new file mode 100644 index 0000000000000000000000000000000000000000..f21e26876c0e0bdeee05935599f868758a1baeac GIT binary patch literal 1329 zcmaJ>TWs4@7qBIhb_7c}VO}zRx`=m+p zFuL-xLXn0v@d!hj*w`clLP7{0ScT943Bl`l0fweYXxfU{Lnlq@j?<*8#5BwHIp_EP z{r~shyi%NgZDjZ1-57?A;?;Fc*7 zZ*m2?;47eRO|=6s)1EFH?Rg_@5|hXAiI#{AH~{K+%dy>1Y)M4Nu88)Lm?H3w3Y?dS zEmD<25m&qb;2fEV8#Ke4uMWdUKGf9!-MK*ZaCJnpn}i{EFW5)i$@mqS+4;l z0x{hR!SM@)ZNqNZO%zHQ)zW>6A!*8SqPRNRAuNF>G@hy*mKS|Ml|bk<0t3}!Zmb7J zxqG&wo}y`N>-mkq?!;*t6tIBYb}!zl^GsCTF?#4jRfOS zCA(ZfU@ZVM7kCcdDTQb~g#pb7sL@g=Mizz7pp%fuX>3+bD4eG89MQ#^J5tt*90C4^ z)l$4F(+QR46o#M>8PgD<1#QsnQQ3ywooz*ZBHFrJLkWqSU`}t?kT_nm7yY_rcy2gB zMLlR+2+-MWVW}M!JK`Np+tWmo5N)?d5FNIM7`SM112m%kzT4lU@xGZ?<#Oxy*=n`w zW4B(&Jo@P8gXSl(u?uUzW{#}CzxULUU$FhL_tvfqTspbFx%pNO4j)+Pzoizh;y3nP zc(A8`_-lIf#P!S1pFDH@kh;3My7}=&Y;|J5$l$*JhI(&Y)fQ_FiuGddX*<%}1%72sWZ{OV9 aHCn~)1Ooo)z0cdxPb{xZtDj}7%Z~vXIPi)&%7h!q+$OR%XU?Hr6z%p%L4D$5Iu1NNwn4!T)1$XoG zKB?8(GLRe(0WOh>Yb=C-=Myl^@jQGEBw3hbSaS1mm=-x+OlH9NqKP+8Z;5reGWJDI zdAftKD>6*K-%s>Y3CC+QFq_SWHj>FW(TMx&HdceU?JrC$$jH|`!^MVUgV3Vdbb2^X z6Q=tiSZ=L$VA%G@i6SXu0@Y<;f@Lf#jBBLr<2t%ev1r-*H?Zt?=M%P1OuL6g(4F za?BNZ#v4elc#Z`|r4Wq=FkqoT8ZAR&BmoGJoP<;Vc69#zK>j8CQ&p8E`P1^+=6~!bp&bAK literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_402_youtube.png b/res/glyphicons/glyphicons_402_youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbb6c324a7daba093c4144d74da4e8e7741b557 GIT binary patch literal 1405 zcmaJ>eQ4Zd7|%W^b9Ig(x@v`mTnBUAU6Q*dmkUj6F3Gi5cU`?+yF&l4Y4Tn#ZN8f1 zc6apyX{WBBpg0Co=vM!k!zq3-&`zpje^~6s1Vxz+yAQ?`+{zF)3Payq@4A9xA<6r` zPoCfN{GP8&c6GLG+W6!~1VJ_>+r>0o>-=X!4SX*YxI1up!jt;EZY%2*WCtL;Y7GK3 zX~;t$4P>=6ItQ8&WZexd)93Z2cC(6Qgk)bQR5WaeMv&&#qAe>Uz(WVYkY;k&&6!yY z)l?4KOQndEEr6WXKIVY#vCfP#HloB-thEJgF0#;o0X!Kk8oKGSMGh<5W#Qfz;}}|2 z@kTgonN(k@3l%H}pj0RlR0xtpX*xtUQ8Z2NLc;_Z#tC@SL9&UZXf_;0D;Ea6IckgL^dYtLyZsq!7z6Zc2reVl@&cZ@95iXM`8rc&_aSF#W+t(VUb~?g2W5)CL-!P^9`&9LP}^WQaBb% zh&-KO7)FdzOf+7_CQa9qO$GQ)eXMp5OFaFwkQffhs0!<8o(?KK%IjWbr)z$nu)1sx!Gr`=kd^bghqVmp zB|E1nmgzR*eh=yz1eABnSbUYmvUpX~RyE-y_}i5cgol+O1}2WQ@hW;{TQn@8&xYTo!}1Hq^M{^|Q^Y2o_YGlk^z z*$?MxkEJ_e@wUar3735n?bc5GJn(FGrtb6GQ*+z)H(vVW;J~)hl=e~WEoxdi@_7G= zK7{5X5&!t|vpTYnus|I3a2fz7|w6*vEL?%j#{j_20(wx4|D)Ai?eA3834 zU4MGAYrr`DLc`ft4_;K)mik8*cU@jQwMEDsn&;<-@4UqvtIfaj-cw(+d>enLpS_Z$ zN?q^wzSzSJHg>4j=-7_AyXpC7xP1*@{_dUc4P1Zp+RdInXM=mz)F8!N+??8Jp7ei+ MNvTu(I6g4`AG}=RfB*mh literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_403_skitch.png b/res/glyphicons/glyphicons_403_skitch.png new file mode 100644 index 0000000000000000000000000000000000000000..b277eaea2b5ed8726d5ff96c289cd58b3f7f6ac0 GIT binary patch literal 1361 zcmaJ>TWs4@7*NaHw7x=Kv5Y@c&} z|KINKE55pu;Kh3v53}y_iPS3pfOlf)mNeNNz- znk1fJ3sk|*g1WY6-T^c7Qzd1-p~O{U_avTZ3&?;0pp3T--E@U^lIYqM(B2c11m0DF zjU=&7YPK+qXDtWdY&a59D4NDOE=)&Rj-w}VhN2mgLN^zpqXNqbObqW`1oGynRiP;6 zdcM#pNz@^<1(IyFTH#hCY&kWOj>qGk4TcFJjgZ?hq1+CcZm@4b1g_#}HqezrR0@rFf3aUpn z*axHB-P%!KQB^kd?53l4<5U$A=)eFbbP*}K%Lp+S_Bk3Vpsb6Q()7OO#U#;eYO27o z5*LY69M5HQG%aS*oWzJcAInPVY$i&@JZGMP%|Ijxs|d?eSvnfcr72EiXI`q;ebLfKS+=hVY$H?YX_EwDn?0W!3ll4a@rR++9_&~odRjb~>#{NaME zXr?FFbcW;nV2EM{*LANk_7*BylX!!>XH7 z){h(k{)d%foS3E}BE@EDf<$CgMSvRAL9a*CI_&Lq&Fd3Em(3bVNJs@$xv4{9vZiz6FvtTn1esRcuJM+-gkpVIAb4tAY)gxzp`|Xh@U)@o{_MY+a z6Ib^Q50wM=9NV@s`RiwsLB( O_mj&@Q{u@?`OtsIdb;rd literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_404_4square.png b/res/glyphicons/glyphicons_404_4square.png new file mode 100644 index 0000000000000000000000000000000000000000..77e7f69922c35dd7151878bdb284152cf7b3864d GIT binary patch literal 1519 zcmaJ>eQeZZ7{3V|IJUS&a8n}G4hA^x+TKU+uGs;1*B%_>CTt7Nz#r?{cUxJny|q2= zZkZsP&M{CShM{Cch#G_7GTmYj6hoZMiD5#NkQwJTlWm&0WyYw%1$}$F8%rcKZQu8O z`uv{f_k8uxj^Ztu=})8^42I0WR=NbPx%#uj2;W0d_up`NTw}_$Qn^ZtvI;PGc)1cF zfe>2_N&w5p>-s>U!LVRbC@a^>gWD-i4w+e9#~cfVA=+Rl+!PD5TrJR$N>D9GZglF> z=O`lZZuD7u5D$iZphnnQuYl6};xewjmUHpwrj1BpjDiM2Kx2_uNR(76=0+2CDY)0g z7>XoRv|2YhOR7A$1M$fUKt;Q8-wSs=O2!=I+6cQi?n`rx%VWVj@nS!+;1vK+;r5ibybm%&BJ-0Tz%IX_<@Y zUjwuojYI^VBJB)mb>XCw^!W*b_IgOhLOY!fALH?PZMZ{srW=?Kgc36ku{Mj}MiVwG zPSPYnFcz1~PkTte)9IugcBjLe!UiN&V-7?5L47 zS*?-7h_94H)&*HkkaWR%y^=|;KoRx<-ml0ZBvA@VxDNxIaKc7&z!)J3Cjn1RtDmuW zJyxHcVMsfg#Pah}mWmt#{)c58B<;biG;a41ClTX9?=LvF?qLhQ*^5<@@?ysam{}TroKqt*(-%T3XVFmah&q z+m{}j8Gjp}e(cch&hgWob-}c~Zz+rJbY;9hG`TAC`r3f^R9koP=7$Tf6)wJdrCa9W ze{F8JB3*s|RQy<%Cyz0YGzD6wZl9bn7etvwdm4?mkKZ`rGF?AY)ID|~(3^e1U}v{& z`|3mEbnyAQWla3km6x~Nc@5oeX#+dgv|za-dv3Oprx)MMn9g@DbXfj1GUqR!={cOctLxR)ot+DtzdP{R(9(9# z#G^kS{Nr4EtIxR>2q({dO-;mp7;G%vKk?MZ;8M$%#5YZ8>(zhcCXn`itEB zJtLQm11}bJWxl>Pdu;6VwKapS2g%{l!KPzB_3XBPn_pks`&+|s5BlqxyC*Vk#?qQL k<`@tBQaaw>wkpkN*h}3y`u%$yllm_>z!cLR-ipTm0IeP|nH7{6>PwHTB!MqNSA>u?pC++C8pBxlo+++DUvQ?oR4Q7C%7dy|~KFYn$g zm!e}1QN)@*rbBe>k4?9+`Y|m+L7k2jIz@+HAa)3LYx|cHCrtDoKi*4|uHe}5-rf5? z_xzsc_k7)pxsjdz?ycPzhWRtQggkopcz4%r=($)+{Doe3L$L@)%@V9hHo%gKIS%lQ zE|ozZNJ{;wFTfy%ZEUKAA}nTyIoZ^MlBW}Nbqk>}Y;cEbN%91M_&6x5MuPb5007|&4Ylg$Q38H0}Lwiq55_n4m zP9%s`QpIcz=S>^nOfVdfDVoMvHb_SpmZb;q5JiVb3N1E3M>vM%LQ%YZ5y+dZl(@W* zZu>%~1W|#|;z+Vqs|9P}plO#$Iv$UEHbS8Q(g-+p14?edaQZqH1mMWFYC+XBaL=MN zZdPG}KulLd(5-BC&9LFL6NOSnx{^iGL5kFMFRqrh1M}cIjT>q^g}MdEJaEjaEu(sr z`Z{2gyPG@eC@S)ro>jHAR-B4V0uAWEfDR%>w-_Pj+{3nt3MgrUDObI(86iPbtE$4W zjL3%L6dPmtG))VsBrAr5SS-qmNj?>!qMkF)z*Ap&@sCap zFI;6_|KxWKoH(yuJM*r1->kg*>Uk2InVw8v5b(J%EIv2&c;o4Rn&R6Ve(at9`Pd)k cmwONRuwOPcn#(We9Pg)>5l4jgQcoQG57^Mvj{pDw literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_406_badoo.png b/res/glyphicons/glyphicons_406_badoo.png new file mode 100644 index 0000000000000000000000000000000000000000..f386dfd9b9be26bbeab28ce59d33f1e5f07e9588 GIT binary patch literal 1390 zcmaJ>U2NM_6!tdJ{Xg_&bOj;TRndSZ{z>8_rd~M9DFTDDd|SJ)mVF-9vUU{W7C^?^z-iBYks(nO){LtjAC5G@l3Z9-yPr%9>AG|TqA z_xOD0eCN-nI@%BI-BrH}!?3-HHZg_PI``R8gWf9z{vKNP!&nA(nmw=}*#L_uW;ehS zx|9VeASr#XT?Z`~wry2SXJ96Igp*C(E4ez}qHZBHhPAX7ElKVL5bp+A)!>P>nXd?3 zRe0ifAW0=H0p!%Sk_|db?P!tkxmZh6^!c2;|LHdbpGr zulPbIp2$IHaU@wN6ubqW*R-=F9S(@#?jG%^s;I~tdRE@n%5f?(2{fPs13HKlU1o%sb1&H{Dxjo^rkr=bCPbdd=T(Jc z12NVYrq~cG#A#ZLM%Wl5hC)Fh77?O;D(E_M4QvJ?iB~~b!B6@8L0^PoMV6*xOgJ1D zBWyer3W>o$C>X6`6NUpNLk6x>7po$ypNacL+W%-QC)hxOrkyrTt=cLbITM;r&a`l$ zlf@4tC0R9G!82|pD_nuCz7CYQZR&Wr6rB1H1{57ajTS^PGAMi+okG5NjEP2kLLe4n z14IR@Y)V-*as>DvHWp;X2;~#0fIt%@BBRJ0RG|hcJsQzqWv8ibpKzLFWKlvq3h0sY z8YB*8wLUAS%BJD8kZuoZDgu;u>sWG=#j0aAsvV&A=&!u6++TaAW_Y%S8E6a*G_KT4pEUZPm_7*x7VR$z;V+xg zAI)t4WarNN`x@SwXr3DUsjfZSbmhmP7Jpl2E9sBOq&53i@=D#27KR-9vb9VCY`qZVjM~?(X&%E>P z0-rd4`oO}-%e{N1cAxrqy1DrHiKFzhlTANgUZ}sF@GfU=Kb`!6dZX#in``|2$A-_0 z+h6nZtG}eQeZZ81Hh)Am=uLV1n>Z*YV-U?)q`N-d%GyylZ=Mvb&Aj$tK3Iu6?&P>-Fv0 z9(S8)HbV?L0uo1z4i++k21R0whA1Xm5SOs{2TDeOfti2s5fw2bLH{u7+uPk(BB5#f zzVFlL_dLJnt8cZWp09SVbz>M-o!BCz(YnTYmRF+pTt4y_TAsAUcDogJ*?GwXSX6=^?dekigCTJZ~Lk6!lm~EKAqp3`H{}g>KeEH*kKIV*+^TB9J#z z>EhBtyyOd=B1DgE8yrdI^LcOH=Y?iBNryrq#|FcAkcP+V*KMib(XG0&1p!#HsT#Hl zb=mqq3qRFX|aNQ!B=)$RyA}7U;HxNYO<`h&k76s;GdHCO|pod`$=u zB9~JYj`fSIFGR6HmXFi45R0-RBLss1UX1dw1}fk47%1dZ2;x ztt|djQj%5O5j^cwvcwgb>Mo$fO_;@trQpDvRt&I0l=2CbpQi~Dkx^vMR&5QGdNiuprJbfaeZpyy-i;FCQ9zfJ z(`=%#TkAJ^R2k}4m~?tjQxTxJTfmY_EEdH}nzpQoCc)V*jvzWL4l&TtXXu70!qO7&T)D!Jm{k?PBXOoil%-*#*7tXwm+l8arzujAT<)C%pqxbc^t zKU}@FdHTk!skVI_$1iq#bm`#scfXub>cV-~Z~XGFUEeo<@z2`Uk)Muk zY%}`?SM7Uo$FJ_GTeToD`NDHGio3$ZR%7e$@2P#IFP^ENHFj^}cQxgo-4}K3)F+>K z^XAx(>#9NPv}MiuPQNsiGOJFuV>OMi9(X{X1{}{pscRPE2@UMI{FJ9PkEb R@4o8%5EEibI2G%7<3D=J;gSFV literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_408_stumbleupon.png b/res/glyphicons/glyphicons_408_stumbleupon.png new file mode 100644 index 0000000000000000000000000000000000000000..f06248650c30c3ebea76dc8039b1d44ff4839ee0 GIT binary patch literal 1356 zcmaJ>Z)n_P7?0a5XW3*MqOOXD^ox_-<xxd(4d;?0+YmB7lFL_#)wc* zGA&=|Bobu^J%J>v)oQF7kGXz{q*JL>XoF#*NFy559jMi!PSD-9pnyR4O%Ix`gNGKi zVYdQB0x{hP!S-^wO~X#mN)$>NS<^g{j!~p-hjBHv16Tm}XxvvjDAqkd7C_)ud>z$e zq`M79xqGmqwxXeL>UkC4YQ|~kB(Q)D92g){bdwQcF1+ZQsDPTKxOyf0npH%iQZWsI zV^uDmqBx$DGc>KFB~E1&o=?iEB&QQpGISOi*a}3Fn1Qfzf{G`S35Mbnj;2*6mC7g* zm*II{NwR!0-Nt5}0BVj7LZ>0tyoaS9h!tcXXwdbGu4}bhC0}--8{V_8I?&(ahX+BjwM=HV@t}~ zkt4wWuxgT1Br2{@tV|OmB4g+RG@%7rJt|qSwX@8yPXtSIN+=;w1B_@D3laxQR^2O` zy6XfzWY~k2i2%*r2A14nu_@ltv~5i^3E_5g1kqu0h=GG9*GD6I?$Yuk8t*$`I)!+k314F{(29rzCLdsJ0N{2 zb}D1H*UvY^&e;1z#V_CoO6@$^#->)X?ruXn0< zxQE|=;=`%@2TLzq`CHv13`y56u75N(L=v~p|9)|8_OpS;`lXXM_WiI>_-ExN+}-F9 z7SHXyd7^81>d|L@e7rn$bZG7Fn@e5OT}K~#_W6J3CO*ZsV|!=b(7E2V%i;emtM(}~ I>DSKu2asIMhyVZp literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_409_readability.png b/res/glyphicons/glyphicons_409_readability.png new file mode 100644 index 0000000000000000000000000000000000000000..904be625dd6ed4f7ac9f348b797d53a1654b0929 GIT binary patch literal 1364 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 X;@;hjuitoO!2i=_rEYO9JvjLvU6IY) literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_412_instagram.png b/res/glyphicons/glyphicons_412_instagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7f4077cf85eed1815a38db91684f7cc7a3a4c6 GIT binary patch literal 1469 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 E2elaDbN~PV literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_417_rss.png b/res/glyphicons/glyphicons_417_rss.png new file mode 100644 index 0000000000000000000000000000000000000000..9002c0284c697648a5f61cec31f2dfeb2b112797 GIT binary patch literal 1394 zcmaJ>eQ4Zd7|&|m>gYLLJFKi?Y;W9-VOSv9E_I`|!GCJDqW3Sk*d4Sy3grRVV~@a`>H(+6rjJu={Qqy#sI{^_-yDnUL!1gz^~&p)ss=f8J5GF#z#lFltya;`ZVN z0yp#+@j@g;rJMvv8|@P==$Yu~)h5O?UMKdq;jMWA8OQ*r;`xkec|tx$l7_m-jAk~E@Y!~2>P&lYjG>x-th;E6nEWHnBD4HQDbhAOaMToEh6UECHfxNl; zh|n!5WnbtNBhnB$0!ij_xlk?~vfWXV=6T+?!7xFj5%k6_sOE!~*Icn60Z(%c2O748 z`xez6-8a!&~vh`S&CEFNMM2tu%L%X(IrNRxzOnvsDP>|*;>~Bnv`Nh zHf!ht8%B@92ZTHu^5SFH7MWMNSV}*nZRA{@swry5gr7LYi+e_OH zp6Frmr&FqCSiayHzmjFHz%>p5U2*LUUMhuP+=T%}bEwgxC`JZ_PoonTR%9kFh7%E4 zW+Oxyt8YqKC2|D#A6AaCl1POmDw3cH5|Pn00UFQ*kXcGMG#t5Rr#t;JwO|FYZ^!bK= z`Y>!uV^R`(^HL^I!GfTzOo4&qWIC%cTj_PZnUz_Ide`K=n_Nk?VH^I>HkCID!UStoMtJe;X(}AJl za`4Qan|+PkmBB)>^VpHEcXx3_@#Rm}YEK_|X|1XjD^y+o^v}P}_Z*0_L7%$u0=GdmVpl%7;b(;a>UE900ch~HOch{bGx|?Hnj;SA9*S@#w)_=6U z-Q5P+ABceuA_l~1jL}3SF~rP(;NP%KK1hVPC~-idBMTqq7nBbMkQjV>yBkX+G;QDa zefs>K=lA^UzOK&aYN{Hl5Co}-M%Zq+K5jpitQ47&bHo&6k3a?!kZ{y|B?dFh&;)pM)o`JIuL)0e6Vv zIGVx=SaD6tijhOW|FE2gW&?zqC8!XI;gF0dFqUM=pwOcM*(&U0$?g+I=G6h15Qhko zd|I}!_5nGkrzAmB%{JWbL0N);{B8w{ud$dHuW8z%CY%I&yE=mKusXy*g_CQ*5uI2R zE+WXf_9z=jWG|oSQ8w%*s+G*`pPDbs9_V^7@@&Z?2gb{qt=g&5W}<=%JT}ZPfIljP ztJgL?S(E!X*Ie1Sr@VLkw)^nZD@)PF{hz;#y*kh1w|x4Y^3?n0FGk~$V^_NPlaHSI z;#|wo(S=~&Tcy(tM9bjy9pu&W8xiMt`#T@jmPzZHwna{r-PqYtJCU5s{Qgg5Z}r(T zpHw!yKJznmZu#%(_(6sG>(`Ow3)S&AH_x7Vc)p}|YNG1G(8c!x9WB49CBa1FyER*I zu5aJ*xxS`LW3Q1<^(@!j`gDD2eam+hUpk+jJNeP{OULL9V+RK}?rH`Fs*%iJhnSCU$=xBp({w^L*<}^Xw@0@BB^KIdSKK?e(+N!q@S-H!hbh8k<@(ho-|v rc3tY3JU=}5)##z~OUsLgk0PZA79G2OeCCI5?LTFd>tsI*_D%i=oM_}1 literal 0 HcmV?d00001 diff --git a/res/glyphicons/glyphicons_419_e-mail.png b/res/glyphicons/glyphicons_419_e-mail.png new file mode 100644 index 0000000000000000000000000000000000000000..61ff2c323f600b978e68e7ce64b770dd6716ae1d GIT binary patch literal 1422 zcmaJ>eP|nH7{A#dZD~8VI;eG{x2qquEV+;LF3Hh!UUC-~U218=EI4MbcW={c?jyT< z(8~z23jpt*~D&tI8bzUIw&|lr_@bo{YP|vtc3oycZj`cZE~OL+tGV57yb(^cR{Hi_E|$PC))rMRBI66 zaYIglULdQ5y>p-w!>X=m$$r?M*vTuF;gek*U*5W~)c;3)WhtG$Jl3gC{T`@`E zB^8(s6Dy?p6Fqp;vH{Ne{9c8kX`JJHbO+0E^fsKKXojTF&3Wk#p5=HZfR`@B&B1WsbaU@#DsglMFL3b@W(18adu;!_be#KZ(C;+H5+4AHd2 zghDY<;9|jGPzqa|O0G3e=cw8F;A_ymk`?6dgp37C9-}Gps3=>2#8A59%5Mly)mva*f53cumt*G|?ou+tm?7ht(klCYoFujp!d;KmCJY z>$tcmB=Z+9?7CDxOV#bXqX?_!_nQyKey!f}W-E1DEA-4`T=m`R#OU~9GBx*nt=2w1 zG1XWI=4R3#v`xLTwa!xnp6<8k`F9v@WO~!7L+$#dx`q3{o!dnwjLX8Ynj_cte2%AU ze4kz&J-e~tz|pTaT$#K$yXU30_AgF(HaGn6P5qMpWADCaH?M2la`NbX$Dg3g#lEda z4tlmVTw|J#XFqDW-Zbzsw(z30P;37g8aO}Y`Q`8ZkL+z1h|9Efdbf67J8^dT$AkXw z-;JSB&d)Bf8}}W4W7D$Q@_Y5dmv2uuUSB_vdLhyMntl4jG+s5?yy3G*)NI*3*?!f3 zPs96Zk2>;t;MmC1Uu6%SxifxY;F<64wTr*8Kfn6qdJ`X1W|Wh)#ebh#Zagr97pEUC b8ig7PGr{BXnR89&+&^So>K5ON42=H=X^!J9 literal 0 HcmV?d00001 diff --git a/src/css/icons/glyphicons_003_user.png b/src/css/icons/glyphicons_003_user.png new file mode 100644 index 0000000000000000000000000000000000000000..84a7cfde0d4b30246d844c4212a36c74bb5e1af3 GIT binary patch literal 1283 zcmaJ>YiJx*6dtKsTP+qMiVx&6X-$gm&fM9|od>%OyYooax^c5vH7KH!nY+6~=GB?I z-QD=dM5T%dMf@uYDl`ZRwt`w8`D>t{ASi|4tI!stzQ7+D9Cq>`$aht0z{kV_UEd25wOe5Oc2&Ah#T*OzDrB+1 zZjzd>RDl-87>LN^OTEQTL#^rNz!yCg z*cKs?%5j}eC)>$o!??*oMNv{4f{>vanWPsGtD6au(V+z$CwA;c#0>+GTC^6zHYu=_ z>1GIiRH%`jbH1O()z?l)4PT*gRqdqSi!fKiN!X5UT93x)5KMD- zZAU{z$KKM5+OgM<)3G`1VIK!1p`>7+5oNAE9J{oDmZyhyJN;VL3v9dXIw}$klv8*l zBh7?RFBOp?=&~$nMo}wG@KWk5HLx8>C0U1JOF6|bp$T~;K?n^&QB1vvOj(w7NtC71 z5L*rsVg)u%ou*j#3YNbnR@Gu`kua`@p*L)mYAYmR(h4J>%^@&ev1~U;1qaef4!Gjj zJ%SxG4t>xsh3Z~~0S{%`XcCQ4py5M$l5?gZl!`e`Gz=uN1FW+xWy8oR;D1;{LVA(U z>Aa{xmZM}GTO}^>@SsPF9vSRBH|-PEvw|i~NXEeptL+i?VAJbGE!Pf%B+sQi=(!Zo z-)&;KZ5I3DZB0AWq?3?tw?>d2wuTr7baG=lqQ<}PoTcOaZdotZyJvoR?d4t1^0(-B zk44u{T^RplIrwV!p4Cx#WoGZli{O!w-=C}I;GIlePV3w z_;=qgPwlw(!#}~XC$C#OJgcAk@%W?TKdf(jBRzHb`9EIhn4f+8X?1b+jF5X>dF8Er zJ8ftA?~`wU(<4FSeCzD`PqUW}i62diJ$cv0skb-Q_CNl9Y3|lTx1G3j^v%_0jvbwR h0{wPj|6da~^UV2g$5t-SG9RSBrLr-jzgK#CPiWg#7*{(|Lf4FzZqW5G9!gd^Qd@emCCkE2ktKOG%xQ4E&4)pwNYA#2q^C*G zvmG|*b{N|ZV;x&*FF6!?*-8$*CeTwMZDEY#*obJ+9f@*=? zAq`@?!}srz634x;>or@fRewu!Xpps2o$Mfp0L^iw^MlBC)(AtZq~nEU{?XPQ9(it= ze^;)H^~fMy@4|Xame&`X&ia~DbouiOs5H>PKtPy{27w}s%2#R88;Dr~LH z?~!WNmykhYg5+#2>(zqkwVzHRokfaP~WRhXX>_H|>W+xU*k~py!F^`5QwP>%>9xL;} zbT5P;s@L}ohsiimkTPLlM*_}@LJ*{JjkFWiApg;LrgqXCMnq_kg!Wd~H^fFXC! zcQjFSoqfHi7yF|)T}L232}sBiAcaSafVp-t_Mm{aZ&Ih1eyy2hzSr|yO_41nR}>Xh zF{&7w66W;+@#c>w8~PKGMaR0gp6ecovquB7p8(Y z(n^lGlGyuzxYd{jXjBT#dj|V|P z_MqNnI6Qyvl|NRdhO^@Q zJ(Q;gheY=iWXhzjNaIAHMk8@1JSE_Vbm^(}y11+&DGA`_GT> mo&0^{)}@85okvfPuWu2uXfA~%MpQ%}k=4NH(lYaq?E{)0n literal 0 HcmV?d00001 diff --git a/src/css/icons/glyphicons_016_bin.png b/src/css/icons/glyphicons_016_bin.png new file mode 100644 index 0000000000000000000000000000000000000000..0c8414bd64474ce73e9f24c56907965ae8b669d0 GIT binary patch literal 1256 zcmaJ>Pi)&%821PiR9b06)5N-Id$`j0BNF>L^|ND|6~}hkNTiF>Xv+nuj{TZ=wf#K% zWpR69>S2I{_;cjM0XU2ygm&e?4nu$dX@^ZhyCFDEaGK}=sXV7iR%z2L+wZ;4-|zc= z-#@?KSY4i-o}1=4Znm~!HraZVJtv==VsHE2XX|V^POUawBO7#J$C%Sy(!rn>*j?Pj zw!3xdXS~R9xxc+uo3`t3X$}brcBWHEgNUIyZgDA%Y-bZw(7|0VEc5?-_dO3hx6EIV z>ta1JaL-%Wj`7;|YRlQ)bV@G2bQUb88Z!`JYJ)WJ!$eEV{Lrq(_L*4V!BB;6mic{B z?Rop&8rB#7)rdAOj-NRt#Wx_IU-b~m)9SsnRer!wE8 zG|~iNFc=gD#R7@D0xXqEnGH$GGmU(*6;eCRhspfdf{7C+_9E($5M&nZ4(Zb}&zSCq z5JdI*#Bi9562(#`q;@30f+z$*7S~Wap-udd#$&aU)>edtCQe8{c33?&=Eq=`yC*vu zE4t1^FY3qsFizJIu#W>A(u9$MLq?3bb}sf<0d3zTPCxrvGs}Fx@3|V1EmSOtNJT~! zLbIYHOEOheF)ZDvEQm_xEHiKr$Rq`qVMR;Q6+_WQq{t9jQmIrmbyQVV)l_6vsf@9; zFrjwn;LK@;^&VoG=O%2pDS!yi&IvFU$n5W|bUq#j$r8 zyVaNkU|0&xdmIC(vPM%_j1mhUvXfe@T2e(X8nR^}nIB=@11XzCjvmEY3Nm%EXo|7{ zd4Z8}9gTX_$DUj|r(tDlVy}hLznt6Km&Hqk6 z8{Yi#qa$A(e@2v~Y3|y;Gbz_NJ&!IOn|g|Sd;a!~z1=&-Kg7RsxlcLwjg{h3u77j+ z%+zbSuRp0AxiYtV=-dl09ed}>%O@&udFRg;ubsO3`^>LbJMpb=&)om<=zH+?55Igq w_2Ha)5&SlL>%96?6Cm^X_KoX}!-o#9bIOCwx#rIGyV<{|X04jvRMvO?2a7t4d;kCd literal 0 HcmV?d00001 diff --git a/src/css/icons/glyphicons_030_pencil.png b/src/css/icons/glyphicons_030_pencil.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c11b9a763ef03e30b8bc582f3a105625b425f5 GIT binary patch literal 1316 zcmaJ>Z)n_P7>}Ku(s4NJ#LoI5ri#<;lDxU*&xO0zyCi3C_PTPt>4_VdChy&a=3kTd zytKM8EB+bcbPOE(G+{b~ZGtdxSf$%=ir@#QUu5{9e(KjkSscS z9hRYP&dvS=GX$~eZ>v&8)zY|Zcn+<{I&|dt7)=nF(a6`08HmVfShw6Pb$xM(A}upZ zz08-`lCQvqH8vl>sriYDF+XFZO=@(6%tSIa;6S94kz>1|9A&AtT^a9VF+-7U6*QBj z)<{)LlceGWkmTu9(qI7~1%U>`ydZ#GB*y}dVeu^_!LZB=GAELqi^ARlvnH3-LdO?A zWvK>2zRWPKR*P<>XfLQUAe~OfHaIScHIm_+i}WbzhC^KoDh!Rl@{#4aWNcBN_L?Y5 zVWw*#IDVI%`%P?$JN#jQ5oK$aaZlIGUr343`4IO7`Ps_p)MHb z?%s~Nil(uy=Qjhp9j9q9(1s3lQHV)_HY3bj-V<23fV!=EMl=3eRI^mGX_>OXYeFi` z3X-4{08sNeLE}_O5*00{ld3={XD zZDBxrw}xdlSZs?oG;LQCPeQz1A3=OrA7bd@$qn#`KD_O$t|~E{H5oy-g7rj_T2yNj^{7!=^a}=P9#PjX*_j{eE;TR_0gTni-%ri zUb@m3Js0iX`_(sRANZZxd*$5&r&jeuW9f9OXaD8k=EdKB*u2vJ;lk-xdIyNJ<7Wm} S&Q)&3|E;1np?;ZvZQ(yHX0a~- literal 0 HcmV?d00001 diff --git a/src/css/icons/glyphicons_034_old_man.png b/src/css/icons/glyphicons_034_old_man.png new file mode 100644 index 0000000000000000000000000000000000000000..567fb4130c301ccdcbec30ac8432b033ee7bb13b GIT binary patch literal 1341 zcmaJ>Z)n_P7*AJpW2_&BV_H9GNGERAyCio_E*I|F=91ic+tQZni5){|n!I-xFaJ#5 zcxh2Ab0`i)I~iptZqo^ytaIXULt#^~4F7x>`y%yIarh6VRSuc>L49+*>k5vA#7GZL3btr zUa-^(C<0ZVdg@D%!LZI{qcjf3m3_SCSaCJdiHDYp&={5(2whdH0f#~FoEToF`_p=l3{O%Io}>6(_-iGhAR6Y|J_1)z$DmTCKZm?fHad9;tjB!M?o zU@c3mk{VY=anbPr&cu^3jiPCsW#e=o!?N_Fc!Hu6B!zA^M)&ay%O_HJ>mrahPcQRD zDc|yiPFbP~q05tGyxO$HpUz z>ZB9EEP|Ia&~XEl61+2n?NP z8JSI{DVAf!JWWeEft3>y$E8GB5OaN0DsmPXSPw*!xQ?(g&2daRFHmfXqiH#jPUj_o z&2t+Ok<$ok+`=Nycfj(Z2UO^ICC4$_tuk75pyO8^7Z=A^e5ayn zh8+oZMU`xE1)lLV(DR;S;muO;#%&l-G=~~3g|6%16D+yFmq8O1TNJK{0cxXTqw0cx9VQXg^QJ?UpYFAJ~Vmc_RfeDHJiaF(0 z4b8Fr3>o#HX&^vzw~8g#S!{~eHEmlHO+vI?8$onf8)9Ii$@S2PK5*pNvuM13C`dvn z{O+5hzjl32Z8>x!e(iim50%?Ju`U1ePPG#)i!=JciM>CLh`(h97p|Wr{nU5(#7VF7uH}o}wT+jV!GZoA&o_=Q)N>!c wGZU_yxI_v!y-!mwns5L6!qo>qxUqMp1N+R}pls=wyC?dg735**TyEmvfAodMH~;_u literal 0 HcmV?d00001 diff --git a/src/css/icons/glyphicons_130_inbox.png b/src/css/icons/glyphicons_130_inbox.png new file mode 100644 index 0000000000000000000000000000000000000000..c49a07bd0c215ade4dfb333d7a776bddbaebf001 GIT binary patch literal 1316 zcmaJ>TWB0r7#>U;YG{n5h)E%MGAm*ryK~u{tGg|`GqcT>Y!Wt$U2373ojKW^W^S1| z+nuEPQVSvqeNa$Di%=0nP#={(q!*DCBDA2^D{89fL%pDaAXq%J*-ZnM4l{Gk`RD)s z|NC$A?CkWx!GV1P1VIdzCe;dFhw<~^u73R9Gj=A4ml34Z(44n`+Ij$qyy?{;C^>oq zR-kS!FI|CIg6R9zs@71gJS7{RlhR|IROI*=O%T}wk*^zz5P>>uSZFOSu`Y*Jg^^RBN-cTAksnP*ls9CIkIC{#`{=Ik)Wf37IWk# zsakm!C|&>omr5rMnqdIXr9oQ|391PfIi} z@=B3m)Iy%uSXC4SMawIN3@yaYVguWOSdua^R!}uMli|`dFX57DtRxlHJYN(=Q585* zDD+O_UIx3- z%OGK%e*Ws7;jskD6xVi*jwLSac=5^im+l|hyMAm&zW2%>uZd4zJUO&RjQ;%C2j658 zeTn(sOZ#@L-?Oo{v-QByt3TWo6=BluzHw1^@Mh=_Vq~r z$uk$7cOU-nr6a5L-M{?%-U;Wqf#jb*JtFDT=U$(uZ}m^~3A5imwR4!b^y$PyVf~fA PTWs4@7|vKWMG>9Qlp-kYWSmthqlxWY9LGw!CALE{nyw_-s9=b>_Gx13*v38~ zNttL%I}j7n=)?fQ5G$(ofW%a3k6g-DUZzPCmkB7^#3mlt*l4*3_6Wym(p6%b<;yw0 z|L_05|8`y*9C)nF-QjjP9Br92pF`gV(9_}CjNTtF9RCY_9)!XW%2m;Iux& za7>Zo_>n2Fd`6SgovT7F&zs4ZAE_+hPL8 z8Y*x!j<1p$$_`?jZUQXq5BemMqA;5FQ=u?TQ@vP#qyhwqZrVqM*f7loB3SdnkvCHw zVRL+{=?m@RcnLy-C5URZ>aPa+QsXf$fu2n2jc!)MhsDAs(MVQsUV(8OF|j;o<6;o2Q0l} zN~j(q-WC|;?(U9Sin6q(XH-nJ5vME>Km}!>K?{+h8jKKgc8{r`0*WfHOBMTXhL7Ww ziXyXgSfGPZl4fWwMNxb*K??z%VIrK6;F2LSVmq@9tOp{AUq;wuD3at-3_?dKiV_0R zXo^qJDTZPANSKKvTiA?dK~a-{?bOC9x3SD!u`Fi-5$a|^*VR_543>1LTP5AVxIB&Z zWJO8QY{4UTC7WDl&P1oMk!e34h%?&L5&tcF$Pfh6xuPtln_WJf?QY-=rG>I z%Ii|riW~v{hZQ0;pCE%g8RjUQKxAZzg$h(bvquvuY_3$r?h{rOwIWK0PX;4mMTK}@ zQLP&#Mbb4ZM%X>5DhSY6tzwCF78~MqP218$lVC5`Mi6b*h8SpQa!oX%$J}k`tk~el z@QFh0$D4&G+Na2S=k`ua@7{HGdm-7~e|CHSJzL+HaL#!)^1)Xs!OwbqWn1js zOEX^HcmA6bvv2;oc4B>L%M#&e>SKf;->9OTkppDw1hUeT`}TA6?N{tLo;p@(|TFTZ-SZ}ZIK z^S@mGcXEq*^xMyScPvf0ZZ6G@%X_{%`C+`h>);R0r73rsRxWPav9B{s{}H+IRrg!h zv1fcs3m3cgPtSkha=reOOa15YE^YVU9q;^h6P_z)W<0a|KDgk%e7tjfL;679 d%=k+#(y{pc`_$eohd;B=x{NTupGqEh`9FdM%838~ literal 0 HcmV?d00001 diff --git a/src/css/images/ajax-loader.gif b/src/css/images/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd1a189c21fed1c7ba00c4bb4fad407bd6d1e5f9 GIT binary patch literal 7825 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 LHfkt@K(PD|Q{O_Y literal 0 HcmV?d00001 diff --git a/src/css/images/icons-18-black.png b/src/css/images/icons-18-black.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1b758ad580663f92c36fb0902afb677ded0b11 GIT binary patch literal 1767 zcmVlz%mt-!G0MuWqW8&UGMNlr(K^f(7o)CA zNad5BOvb?OM2WoqFqzE8Z0L&2Dj&M0sH#{bm1tkxbsvujBYJ!cEEXhFV<9-C!ocD0 zg%JydIGA^8#7Bd{fEFom=)s8{?hhdi9-Jt?>8}k0-q@Y^UV$Jr@v)>9bsSvwX)y29 z77*UHsi%HWSf>#3rJ!bLx8)3{CVWZBRFrbz|XfeYncN!yRbkJhMH9aXJ!G-f3 zSY3w$p+OTo8(3)Q;h?7ppSK>ugc&uoFnYC%!w{CWZA?TJrl4bOcvHXj^ZY)1vf)2w zl@DDLgq2<#VyPC{4HtaqqOIxU2SOhz8R0@z6J|vucsaj;7D6X=S!JyB7(qxzqOcn= zV~z@h3G<0KvWiw5CS|*Fm=>Sdb`@$7ji^cYq^rz1Q+CFH*cm92@{E9y$m%RU9amB^_oA2geg`q%>s+gTlTv4|QQT zt{vvUb640cl~kHlK6Fi3#e*p&5Go(yKq8^?ArPpf2ea1af=+xI%xBc&R_M$HJL=Z; ziV;oPT|%!L8wj-QGGtpD*%&4{n_)33BC`%>vT9s}gXVO+Td+}KX(aSoL?ShKIqG24 zlWkts)O^>Gk;ikXhwJ*MwC(QAH96?NK1KArPpdCtB%q zNhdxAHmH*i)&_Az!>i9IinJr6B@Vp8qftk~5(m=MCq-n|nAA6LWi%t2U=W90_9^`` zv#+DR(%nIf7)%%yEviFeLI@k&8~wP*EDN_9og6jy3It(3QXEzuMCjzIZsP)BSgQ$ zRV0k!ppArDd4qD1V&`L*@V6K=ZA#82q=G_NwfDWLEKw)Y?4M2oVFKMf5L#H-0mb5V z12r~G6&LlUd08Ui$5_-AGl|S9AG#*2;%#3KRlK!D-7YtkzwHM`ArP3}%vztzdb>j) zL_W`>UYUD2-$6)lbD9wc!Q&8CHS;=*_H2@;$omAJ*C>BA4aVu_$O|lWq`@jeF73$3 zN#hJdL&XB=R8AQPtvV2z#Va00ivgWP-2}ch5I8j8jd#N|@9!kAFPZ5+fdD)OhcZM0 z`Y-BvFNZX=3a|875cCj6m;}Epwg*odvEntg z=!2UM1CJhQV03V*K=E)O_?-X;533l@3DFf9*b}kx-dGQY1~2akg`+fdw=Q%Z%meMk z`v&YE`=8U7wzM4nCo-#i=$f#SAE6@Vic7l{m9}E$y~_`Ci_dvo@*&haF|?%rF}zcH zS){`vll})v>B(d~C?XI-B$T$O3%9k*4|fa%;59ffF;^m%ICv%CHlI_S^~q#1nan5i ziA4KQ2z;U=nN>b?O<2urUe7wb(k!(k_sL{3narE{Oph1znXrmS^GKKUm2eXS{d45- z4-JO0m5XK)|7{i4z3m#T@GAXWt$|D^F|O41(ht79?AUy4}=$)9||n}-iz&B zzg+t^SxQJP>|br{qF3uvJT=P7ecJ^kxP-36@>_ya6jFm4>U$t^dF?WsCW#? zDG-oowkvwh>kk!(ag7BOCbiCoiM(N3gY#-3w#h4a{ec1juuw^7ju=pTAfN-#FeeQQ z!0?+2v;am1=o)u^17hdVK%zzKJXK(?L`htbqIB!f@UtvoIXAfdQ7rtTvj8Hjs)m%e#>9@ zFd;9+#7YmlWlyyc>?{Bz0b#^jQDPPyyhdKRLWA+-lUlCOA;1RCnOXO3FS3D z7owCO9SGg|%WT4tMay&JBLPFmsb=F~QV*HzU@*k9p&DeHoLFmytJTN+ZkY9(4IW@vgKx5>$CeY9jd>jNdEHD|= zscZQtjxq#IM}<1*7nj#7sB!O!RX%bl)@J0gph6w$ujUm#ldtAb7pkBueb(oL2G&I= z!r^#GA@rMQlUY9^Di&dm+lY=`#z!>#=_klSumC4Rfw1YgLmgaHdPZo`!g`#X`f~T4 zOoCE(27_VDa^d=*^Ph@Ys2W~h4haSFH{G45f=t4b#ji4q?LmZ3W%#o*)K)lPv?T_> z5RWll>rjf)!Jtr&?M+>%L(>g#dN74L%2JkMm5*GCb@|+gG612{uQ=%ymG(d=<&9YD zb1~*VXz`xA-oJ~-$>BvOw&ZLy>q9~kX z=FUOK!(4munecJJDQLQVkfxn%^6xkeCcJqw=`yPQwbJRI;R%u^E)S78zm zsHmTN;OAKB({|C{wy2L({&pbTO@*AMj2;c5@Mv5tv z^J2GOe-Fa~O5Ey!cR_nD>LR7!oiQ+Qka@l;CVmMSKp6aL;sIf{E_=rI*9AZ_T-9zs zh)Ce$put?0e-8mY0|+(d(ok1pJWhjgTDVe`sN|8pbf-@Iv|Uu`BURFcSmh&^VqHG> zvN{2wn*pKofU4xZTj7oI|Wctr^XuYMcs`5+>Jj|0u{Xt_v;IEXhrJu(?n zf)_EKnu^z0B)X{coYJF%SDo~gHW4Eb7-1PD%4`k<>*kl8g($;(d;q9n;MMK{gec6E zoX6;pV8W{I(tvPizFS1$!5md3_W;6!m>kM?w~R`Ms0Xpu=W@LDiM^fqKsS{w%=xHh z@7gyzZ#xOt@X%`P_67%D4ic<)U?ZVsU708_CLeWzKNJQ|net~t&g}V5n00&KRE9zn zV}5!Agb{LgAaqdB5eVEZwb!dBC=w(qD(XY~Xc6?o7Ij4=Lx@#Aaw*p3^DJn>2OU*W zcjueR-=+;C2LzJOVy(~Rc-{dBiO=)I&Ybz!X~Y5l<}@Xj6+Lq#Rxz((F+y$f6nW48 z|AO`ZataI@&OUM!$mg*U4pfBP&Ra%JD4Y!}z-*A_YM4Oi*g$AcUJM^XhXDrltMN#< z76{}D@Ig1j2;k>Px+Ic20Kw_rIg}0wq#wJ-jQk-Wdg=R!E2-GQ+Dq<($Q%W_6q z=hbXAyF{=31qHcD_iG{ezbuA|Pa1(3pQ%GXxv}xBJ?8iV!JuIQMWca)hIY`?P{~dz z!h!QAM&`ksG7bCp;M!l4aE&(6goN>`6>uYNB6$--tn!gdu{NV0 z!sk;_sg5B^RT0tT@f795y9Sy@?GSuf(7 w{Qr0ntI=}7<$FRAh8X4daP}B``i*`50q}Jcs=$TL1^@s607*qoM6N<$g1p~T{{R30 literal 0 HcmV?d00001 diff --git a/src/css/images/icons-36-black.png b/src/css/images/icons-36-black.png new file mode 100644 index 0000000000000000000000000000000000000000..1a59d7c375d6611262a9ac86db23eb94570d7319 GIT binary patch literal 3611 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 A8~^|S literal 0 HcmV?d00001 diff --git a/src/css/images/key-128.png b/src/css/images/key-128.png new file mode 100755 index 0000000000000000000000000000000000000000..71814f3e6a1d8a864d1954eada5ea91786100911 GIT binary patch literal 15826 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 V_y-mQ;6Kd(3NotFRg$Jb{{yUB(;xr< literal 0 HcmV?d00001 diff --git a/src/css/jquery.mobile-1.2.0.min.css b/src/css/jquery.mobile-1.2.0.min.css new file mode 100644 index 0000000..1ab3c2b --- /dev/null +++ b/src/css/jquery.mobile-1.2.0.min.css @@ -0,0 +1,2 @@ +/*! jQuery Mobile vGit Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 jquerymobile.com | jquery.org/license !*/ +.ui-bar-a{border:1px solid #333;background:#111;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from( #3c3c3c ),to( #111 ));background-image:-webkit-linear-gradient( #3c3c3c,#111 );background-image:-moz-linear-gradient( #3c3c3c,#111 );background-image:-ms-linear-gradient( #3c3c3c,#111 );background-image:-o-linear-gradient( #3c3c3c,#111 );background-image:linear-gradient( #3c3c3c,#111 )}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif}.ui-bar-a .ui-link-inherit{color:#fff}.ui-bar-a a.ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-a a.ui-link:visited{color:#2489ce}.ui-bar-a a.ui-link:hover{color:#2489ce}.ui-bar-a a.ui-link:active{color:#2489ce}.ui-body-a,.ui-overlay-a{border:1px solid #444;background:#222;color:#fff;text-shadow:0 1px 1px #111;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from( #444 ),to( #222 ));background-image:-webkit-linear-gradient( #444,#222 );background-image:-moz-linear-gradient( #444,#222 );background-image:-ms-linear-gradient( #444,#222 );background-image:-o-linear-gradient( #444,#222 );background-image:linear-gradient( #444,#222 )}.ui-overlay-a{background-image:none;border-width:0}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif}.ui-body-a .ui-link-inherit{color:#fff}.ui-body-a .ui-link{color:#2489ce;font-weight:bold}.ui-body-a .ui-link:visited{color:#2489ce}.ui-body-a .ui-link:hover{color:#2489ce}.ui-body-a .ui-link:active{color:#2489ce}.ui-btn-up-a{border:1px solid #111;background:#333;font-weight:bold;color:#fff;text-shadow:0 1px 1px #111;background-image:-webkit-gradient(linear,left top,left bottom,from( #444 ),to( #2d2d2d ));background-image:-webkit-linear-gradient( #444,#2d2d2d );background-image:-moz-linear-gradient( #444,#2d2d2d );background-image:-ms-linear-gradient( #444,#2d2d2d );background-image:-o-linear-gradient( #444,#2d2d2d );background-image:linear-gradient( #444,#2d2d2d )}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#fff}.ui-btn-hover-a{border:1px solid #000;background:#444;font-weight:bold;color:#fff;text-shadow:0 1px 1px #111;background-image:-webkit-gradient(linear,left top,left bottom,from( #555 ),to( #383838 ));background-image:-webkit-linear-gradient( #555,#383838 );background-image:-moz-linear-gradient( #555,#383838 );background-image:-ms-linear-gradient( #555,#383838 );background-image:-o-linear-gradient( #555,#383838 );background-image:linear-gradient( #555,#383838 )}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#fff}.ui-btn-down-a{border:1px solid #000;background:#222;font-weight:bold;color:#fff;text-shadow:0 1px 1px #111;background-image:-webkit-gradient(linear,left top,left bottom,from( #202020 ),to( #2c2c2c ));background-image:-webkit-linear-gradient( #202020,#2c2c2c );background-image:-moz-linear-gradient( #202020,#2c2c2c );background-image:-ms-linear-gradient( #202020,#2c2c2c );background-image:-o-linear-gradient( #202020,#2c2c2c );background-image:linear-gradient( #202020,#2c2c2c )}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#fff}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-b{border:1px solid #456f9a;background:#5e87b0;color:#fff;font-weight:bold;text-shadow:0 1px 1px #3e6790;background-image:-webkit-gradient(linear,left top,left bottom,from( #6facd5 ),to( #497bae ));background-image:-webkit-linear-gradient( #6facd5,#497bae );background-image:-moz-linear-gradient( #6facd5,#497bae );background-image:-ms-linear-gradient( #6facd5,#497bae );background-image:-o-linear-gradient( #6facd5,#497bae );background-image:linear-gradient( #6facd5,#497bae )}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif}.ui-bar-b .ui-link-inherit{color:#fff}.ui-bar-b a.ui-link{color:#ddf0f8;font-weight:bold}.ui-bar-b a.ui-link:visited{color:#ddf0f8}.ui-bar-b a.ui-link:hover{color:#ddf0f8}.ui-bar-b a.ui-link:active{color:#ddf0f8}.ui-body-b,.ui-overlay-b{border:1px solid #999;background:#f3f3f3;color:#222;text-shadow:0 1px 0 #fff;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from( #ddd ),to( #ccc ));background-image:-webkit-linear-gradient( #ddd,#ccc );background-image:-moz-linear-gradient( #ddd,#ccc );background-image:-ms-linear-gradient( #ddd,#ccc );background-image:-o-linear-gradient( #ddd,#ccc );background-image:linear-gradient( #ddd,#ccc )}.ui-overlay-b{background-image:none;border-width:0}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif}.ui-body-b .ui-link-inherit{color:#333}.ui-body-b .ui-link{color:#2489ce;font-weight:bold}.ui-body-b .ui-link:visited{color:#2489ce}.ui-body-b .ui-link:hover{color:#2489ce}.ui-body-b .ui-link:active{color:#2489ce}.ui-btn-up-b{border:1px solid #044062;background:#396b9e;font-weight:bold;color:#fff;text-shadow:0 1px 1px #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from( #5f9cc5 ),to( #396b9e ));background-image:-webkit-linear-gradient( #5f9cc5,#396b9e );background-image:-moz-linear-gradient( #5f9cc5,#396b9e );background-image:-ms-linear-gradient( #5f9cc5,#396b9e );background-image:-o-linear-gradient( #5f9cc5,#396b9e );background-image:linear-gradient( #5f9cc5,#396b9e )}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#fff}.ui-btn-hover-b{border:1px solid #00415e;background:#4b88b6;font-weight:bold;color:#fff;text-shadow:0 1px 1px #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from( #6facd5 ),to( #4272a4 ));background-image:-webkit-linear-gradient( #6facd5,#4272a4 );background-image:-moz-linear-gradient( #6facd5,#4272a4 );background-image:-ms-linear-gradient( #6facd5,#4272a4 );background-image:-o-linear-gradient( #6facd5,#4272a4 );background-image:linear-gradient( #6facd5,#4272a4 )}.ui-btn-hover-b:visited,.ui-btn-hover-b:hover,.ui-btn-hover-b a.ui-link-inherit{color:#fff}.ui-btn-down-b{border:1px solid #225377;background:#4e89c5;font-weight:bold;color:#fff;text-shadow:0 1px 1px #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from( #295b8e ),to( #3e79b5 ));background-image:-webkit-linear-gradient( #295b8e,#3e79b5 );background-image:-moz-linear-gradient( #295b8e,#3e79b5 );background-image:-ms-linear-gradient( #295b8e,#3e79b5 );background-image:-o-linear-gradient( #295b8e,#3e79b5 );background-image:linear-gradient( #295b8e,#3e79b5 )}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#fff}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-c{border:1px solid #b3b3b3;background:#eee;color:#3e3e3e;font-weight:bold;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #ddd ));background-image:-webkit-linear-gradient( #f0f0f0,#ddd );background-image:-moz-linear-gradient( #f0f0f0,#ddd );background-image:-ms-linear-gradient( #f0f0f0,#ddd );background-image:-o-linear-gradient( #f0f0f0,#ddd );background-image:linear-gradient( #f0f0f0,#ddd )}.ui-bar-c .ui-link-inherit{color:#3e3e3e}.ui-bar-c a.ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-c a.ui-link:visited{color:#2489ce}.ui-bar-c a.ui-link:hover{color:#2489ce}.ui-bar-c a.ui-link:active{color:#2489ce}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c,.ui-overlay-c{border:1px solid #aaa;color:#333;text-shadow:0 1px 0 #fff;background:#f9f9f9;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eee ));background-image:-webkit-linear-gradient( #f9f9f9,#eee );background-image:-moz-linear-gradient( #f9f9f9,#eee );background-image:-ms-linear-gradient( #f9f9f9,#eee );background-image:-o-linear-gradient( #f9f9f9,#eee );background-image:linear-gradient( #f9f9f9,#eee )}.ui-overlay-c{background-image:none;border-width:0}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c .ui-link-inherit{color:#333}.ui-body-c .ui-link{color:#2489ce;font-weight:bold}.ui-body-c .ui-link:visited{color:#2489ce}.ui-body-c .ui-link:hover{color:#2489ce}.ui-body-c .ui-link:active{color:#2489ce}.ui-btn-up-c{border:1px solid #ccc;background:#eee;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #fff ),to( #f1f1f1 ));background-image:-webkit-linear-gradient( #fff,#f1f1f1 );background-image:-moz-linear-gradient( #fff,#f1f1f1 );background-image:-ms-linear-gradient( #fff,#f1f1f1 );background-image:-o-linear-gradient( #fff,#f1f1f1 );background-image:linear-gradient( #fff,#f1f1f1 )}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#2f3e46}.ui-btn-hover-c{border:1px solid #bbb;background:#dfdfdf;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 ));background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 );background-image:-moz-linear-gradient( #f6f6f6,#e0e0e0 );background-image:-ms-linear-gradient( #f6f6f6,#e0e0e0 );background-image:-o-linear-gradient( #f6f6f6,#e0e0e0 );background-image:linear-gradient( #f6f6f6,#e0e0e0 )}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46}.ui-btn-down-c{border:1px solid #bbb;background:#d6d6d6;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf ));background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf );background-image:-moz-linear-gradient( #d0d0d0,#dfdfdf );background-image:-ms-linear-gradient( #d0d0d0,#dfdfdf );background-image:-o-linear-gradient( #d0d0d0,#dfdfdf );background-image:linear-gradient( #d0d0d0,#dfdfdf )}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#2f3e46}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-d{border:1px solid #bbb;background:#bbb;color:#333;font-weight:bold;text-shadow:0 1px 0 #eee;background-image:-webkit-gradient(linear,left top,left bottom,from( #ddd ),to( #bbb ));background-image:-webkit-linear-gradient( #ddd,#bbb );background-image:-moz-linear-gradient( #ddd,#bbb );background-image:-ms-linear-gradient( #ddd,#bbb );background-image:-o-linear-gradient( #ddd,#bbb );background-image:linear-gradient( #ddd,#bbb )}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif}.ui-bar-d .ui-link-inherit{color:#333}.ui-bar-d a.ui-link{color:#2489ce;font-weight:bold}.ui-bar-d a.ui-link:visited{color:#2489ce}.ui-bar-d a.ui-link:hover{color:#2489ce}.ui-bar-d a.ui-link:active{color:#2489ce}.ui-body-d,.ui-overlay-d{border:1px solid #bbb;color:#333;text-shadow:0 1px 0 #fff;background:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #fff ),to( #fff ));background-image:-webkit-linear-gradient( #fff,#fff );background-image:-moz-linear-gradient( #fff,#fff );background-image:-ms-linear-gradient( #fff,#fff );background-image:-o-linear-gradient( #fff,#fff );background-image:linear-gradient( #fff,#fff )}.ui-overlay-d{background-image:none;border-width:0}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif}.ui-body-d .ui-link-inherit{color:#333}.ui-body-d .ui-link{color:#2489ce;font-weight:bold}.ui-body-d .ui-link:visited{color:#2489ce}.ui-body-d .ui-link:hover{color:#2489ce}.ui-body-d .ui-link:active{color:#2489ce}.ui-btn-up-d{border:1px solid #bbb;background:#fff;font-weight:bold;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #fafafa ),to( #f6f6f6 ));background-image:-webkit-linear-gradient( #fafafa,#f6f6f6 );background-image:-moz-linear-gradient( #fafafa,#f6f6f6 );background-image:-ms-linear-gradient( #fafafa,#f6f6f6 );background-image:-o-linear-gradient( #fafafa,#f6f6f6 );background-image:linear-gradient( #fafafa,#f6f6f6 )}.ui-btn-up-d:visited,.ui-btn-up-d a.ui-link-inherit{color:#333}.ui-btn-hover-d{border:1px solid #aaa;background:#eee;font-weight:bold;color:#333;cursor:pointer;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #eee ),to( #fff ));background-image:-webkit-linear-gradient( #eee,#fff );background-image:-moz-linear-gradient( #eee,#fff );background-image:-ms-linear-gradient( #eee,#fff );background-image:-o-linear-gradient( #eee,#fff );background-image:linear-gradient( #eee,#fff )}.ui-btn-hover-d:visited,.ui-btn-hover-d:hover,.ui-btn-hover-d a.ui-link-inherit{color:#333}.ui-btn-down-d{border:1px solid #aaa;background:#eee;font-weight:bold;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #e5e5e5 ),to( #f2f2f2 ));background-image:-webkit-linear-gradient( #e5e5e5,#f2f2f2 );background-image:-moz-linear-gradient( #e5e5e5,#f2f2f2 );background-image:-ms-linear-gradient( #e5e5e5,#f2f2f2 );background-image:-o-linear-gradient( #e5e5e5,#f2f2f2 );background-image:linear-gradient( #e5e5e5,#f2f2f2 )}.ui-btn-down-d:visited,.ui-btn-down-d:hover,.ui-btn-down-d a.ui-link-inherit{color:#333}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-e{border:1px solid #f7c942;background:#fadb4e;color:#333;font-weight:bold;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #fceda7 ),to( #fbef7e ));background-image:-webkit-linear-gradient( #fceda7,#fbef7e );background-image:-moz-linear-gradient( #fceda7,#fbef7e );background-image:-ms-linear-gradient( #fceda7,#fbef7e );background-image:-o-linear-gradient( #fceda7,#fbef7e );background-image:linear-gradient( #fceda7,#fbef7e )}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif}.ui-bar-e .ui-link-inherit{color:#333}.ui-bar-e a.ui-link{color:#2489ce;font-weight:bold}.ui-bar-e a.ui-link:visited{color:#2489ce}.ui-bar-e a.ui-link:hover{color:#2489ce}.ui-bar-e a.ui-link:active{color:#2489ce}.ui-body-e,.ui-overlay-e{border:1px solid #f7c942;color:#222;text-shadow:0 1px 0 #fff;background:#fff9df;background-image:-webkit-gradient(linear,left top,left bottom,from( #fffadf ),to( #fff3a5 ));background-image:-webkit-linear-gradient( #fffadf,#fff3a5 );background-image:-moz-linear-gradient( #fffadf,#fff3a5 );background-image:-ms-linear-gradient( #fffadf,#fff3a5 );background-image:-o-linear-gradient( #fffadf,#fff3a5 );background-image:linear-gradient( #fffadf,#fff3a5 )}.ui-overlay-e{background-image:none;border-width:0}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif}.ui-body-e .ui-link-inherit{color:#222}.ui-body-e .ui-link{color:#2489ce;font-weight:bold}.ui-body-e .ui-link:visited{color:#2489ce}.ui-body-e .ui-link:hover{color:#2489ce}.ui-body-e .ui-link:active{color:#2489ce}.ui-btn-up-e{border:1px solid #f4c63f;background:#fadb4e;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffefaa ),to( #ffe155 ));background-image:-webkit-linear-gradient( #ffefaa,#ffe155 );background-image:-moz-linear-gradient( #ffefaa,#ffe155 );background-image:-ms-linear-gradient( #ffefaa,#ffe155 );background-image:-o-linear-gradient( #ffefaa,#ffe155 );background-image:linear-gradient( #ffefaa,#ffe155 )}.ui-btn-up-e:visited,.ui-btn-up-e a.ui-link-inherit{color:#222}.ui-btn-hover-e{border:1px solid #f2c43d;background:#fbe26f;font-weight:bold;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #fff5ba ),to( #fbdd52 ));background-image:-webkit-linear-gradient( #fff5ba,#fbdd52 );background-image:-moz-linear-gradient( #fff5ba,#fbdd52 );background-image:-ms-linear-gradient( #fff5ba,#fbdd52 );background-image:-o-linear-gradient( #fff5ba,#fbdd52 );background-image:linear-gradient( #fff5ba,#fbdd52 )}.ui-btn-hover-e:visited,.ui-btn-hover-e:hover,.ui-btn-hover-e a.ui-link-inherit{color:#333}.ui-btn-down-e{border:1px solid #f2c43d;background:#fceda7;font-weight:bold;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from( #f8d94c ),to( #fadb4e ));background-image:-webkit-linear-gradient( #f8d94c,#fadb4e );background-image:-moz-linear-gradient( #f8d94c,#fadb4e );background-image:-ms-linear-gradient( #f8d94c,#fadb4e );background-image:-o-linear-gradient( #f8d94c,#fadb4e );background-image:linear-gradient( #f8d94c,#fadb4e )}.ui-btn-down-e:visited,.ui-btn-down-e:hover,.ui-btn-down-e a.ui-link-inherit{color:#333}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif;text-decoration:none}a.ui-link-inherit{text-decoration:none!important}.ui-btn-active{border:1px solid #2373a5;background:#5393c5;font-weight:bold;color:#fff;cursor:pointer;text-shadow:0 1px 1px #3373a5;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from( #5393c5 ),to( #6facd5 ));background-image:-webkit-linear-gradient( #5393c5,#6facd5 );background-image:-moz-linear-gradient( #5393c5,#6facd5 );background-image:-ms-linear-gradient( #5393c5,#6facd5 );background-image:-o-linear-gradient( #5393c5,#6facd5 );background-image:linear-gradient( #5393c5,#6facd5 );font-family:Helvetica,Arial,sans-serif}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.ui-corner-tl{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em}.ui-corner-tr{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bl{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-br{-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-top{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bottom{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-right{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-left{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-all{-moz-border-radius:.6em;-webkit-border-radius:.6em;border-radius:.6em}.ui-corner-none{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.ui-br{border-bottom:rgb(130,130,130);border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid}.ui-disabled{filter:Alpha(Opacity=30);opacity:.3;zoom:1}.ui-disabled,.ui-disabled a{cursor:default!important;pointer-events:none}.ui-icon,.ui-icon-searchfield:after{background:#666;background:rgba(0,0,0,.4);background-image:url(images/icons-18-white.png);background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px}.ui-icon-alt{background-image:url(images/icons-36-black.png)}}.ui-icon-plus{background-position:-0 50%}.ui-icon-minus{background-position:-36px 50%}.ui-icon-delete{background-position:-72px 50%}.ui-icon-arrow-r{background-position:-108px 50%}.ui-icon-arrow-l{background-position:-144px 50%}.ui-icon-arrow-u{background-position:-180px 50%}.ui-icon-arrow-d{background-position:-216px 50%}.ui-icon-check{background-position:-252px 50%}.ui-icon-gear{background-position:-288px 50%}.ui-icon-refresh{background-position:-324px 50%}.ui-icon-forward{background-position:-360px 50%}.ui-icon-back{background-position:-396px 50%}.ui-icon-grid{background-position:-432px 50%}.ui-icon-star{background-position:-468px 50%}.ui-icon-alert{background-position:-504px 50%}.ui-icon-info{background-position:-540px 50%}.ui-icon-home{background-position:-576px 50%}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%}.ui-icon-checkbox-off{background-position:-684px 50%}.ui-icon-checkbox-on{background-position:-648px 50%}.ui-icon-radio-off{background-position:-756px 50%}.ui-icon-radio-on{background-position:-720px 50%}.ui-checkbox .ui-icon,.ui-selectmenu-list .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#4596ce}.ui-icon-loading{background:url(images/ajax-loader.gif);background-size:46px 46px}.ui-btn-corner-tl{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em}.ui-btn-corner-tr{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bl{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-br{-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-top{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-right{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-left{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-all{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.ui-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5;position:absolute;width:100%;height:100%}.ui-overlay-shadow{-moz-box-shadow:0 0 12px rgba(0,0,0,.6);-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-shadow{-moz-box-shadow:0 1px 4px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.3);box-shadow:0 1px 4px rgba(0,0,0,.3)}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-shadow-inset{-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);box-shadow:inset 0 1px 4px rgba(0,0,0,.2)}.ui-icon-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.4);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.ui-btn:focus,.ui-link-inherit:focus{outline:0}.ui-btn.ui-focus{z-index:1}.ui-focus,.ui-btn:focus{-moz-box-shadow:inset 0 0 3px #387bbe,0px 0 9px #387bbe;-webkit-box-shadow:inset 0 0 3px #387bbe,0px 0 9px #387bbe;box-shadow:inset 0 0 3px #387bbe,0px 0 9px #387bbe}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui-mobile-nosupport-boxshadow .ui-focus,.ui-mobile-nosupport-boxshadow .ui-btn:focus,.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus{outline-width:1px;outline-style:auto}.ui-mobile,.ui-mobile body{height:99.9%}.ui-mobile fieldset,.ui-page{padding:0;margin:0}.ui-mobile a img,.ui-mobile fieldset{border-width:0}.ui-mobile-viewport{margin:0;overflow-x:visible;-webkit-text-size-adjust:100%;-ms-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ui-mobile-viewport,div.ui-mobile-viewport{overflow-x:hidden}.ui-mobile [data-role=page],.ui-mobile [data-role=dialog],.ui-page{top:0;left:0;width:100%;min-height:100%;position:absolute;display:none;border:0}.ui-mobile .ui-page-active{display:block;overflow:visible}.ui-page{outline:none}@media screen and (orientation:portrait){.ui-mobile,.ui-mobile .ui-page{min-height:420px}}@media screen and (orientation:landscape){.ui-mobile,.ui-mobile .ui-page{min-height:300px}}.ui-loading .ui-loader{display:block}.ui-loader{display:none;z-index:9999999;position:fixed;top:50%;left:50%;border:0}.ui-loader-default{background:none;filter:Alpha(Opacity=18);opacity:.18;width:46px;height:46px;margin-left:-23px;margin-top:-23px}.ui-loader-verbose{width:200px;filter:Alpha(Opacity=88);opacity:.88;box-shadow:0 1px 1px -1px #fff;height:auto;margin-left:-110px;margin-top:-43px;padding:10px}.ui-loader-default h1{font-size:0;width:0;height:0;overflow:hidden}.ui-loader-verbose h1{font-size:16px;margin:0;text-align:center}.ui-loader .ui-icon{background-color:#000;display:block;margin:0;width:44px;height:44px;padding:1px;-webkit-border-radius:36px;-moz-border-radius:36px;border-radius:36px}.ui-loader-verbose .ui-icon{margin:0 auto 10px;filter:Alpha(Opacity=75);opacity:.75}.ui-loader-textonly{padding:15px;margin-left:-115px}.ui-loader-textonly .ui-icon{display:none}.ui-loader-fakefix{position:absolute}.ui-mobile-rendering > *{visibility:hidden}.ui-bar,.ui-body{position:relative;padding:.4em 15px;overflow:hidden;display:block;clear:both}.ui-bar{font-size:16px;margin:0}.ui-bar h1,.ui-bar h2,.ui-bar h3,.ui-bar h4,.ui-bar h5,.ui-bar h6{margin:0;padding:0;font-size:16px;display:inline-block}.ui-header,.ui-footer{position:relative;border-left-width:0;border-right-width:0;zoom:1}.ui-header .ui-btn-left,.ui-header .ui-btn-right,.ui-footer .ui-btn-left,.ui-footer .ui-btn-right{position:absolute;top:3px}.ui-header .ui-btn-left,.ui-footer .ui-btn-left{left:5px}.ui-header .ui-btn-right,.ui-footer .ui-btn-right{right:5px}.ui-footer .ui-btn-icon-notext,.ui-header .ui-btn-icon-notext{top:6px}.ui-header .ui-title,.ui-footer .ui-title{min-height:1.1em;text-align:center;font-size:16px;display:block;margin:.6em 30% .8em;padding:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;outline:0!important}.ui-footer .ui-title{margin:.6em 15px .8em}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:15px}.ui-icon{width:18px;height:18px}.ui-nojs{position:absolute;left:-9999px}.ui-hide-label label.ui-input-text,.ui-hide-label label.ui-select,.ui-hide-label label.ui-slider,.ui-hide-label label.ui-submit,.ui-hide-label .ui-controlgroup-label,.ui-hidden-accessible{position:absolute!important;left:-9999px;clip:rect(1px);clip:rect(1px,1px,1px,1px)}.ui-mobile-viewport-transitioning,.ui-mobile-viewport-transitioning .ui-page{width:100%;height:100%;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ui-page-pre-in{opacity:0}.in{-webkit-animation-timing-function:ease-out;-webkit-animation-duration:350ms;-moz-animation-timing-function:ease-out;-moz-animation-duration:350ms}.out{-webkit-animation-timing-function:ease-in;-webkit-animation-duration:225ms;-moz-animation-timing-function:ease-in;-moz-animation-duration:225ms}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeout{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeout{from{opacity:1}to{opacity:0}}.fade.out{opacity:0;-webkit-animation-duration:125ms;-webkit-animation-name:fadeout;-moz-animation-duration:125ms;-moz-animation-name:fadeout}.fade.in{opacity:1;-webkit-animation-duration:225ms;-webkit-animation-name:fadein;-moz-animation-duration:225ms;-moz-animation-name:fadein}.pop{-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%}.pop.in{-webkit-transform:scale(1);-moz-transform:scale(1);opacity:1;-webkit-animation-name:popin;-moz-animation-name:popin;-webkit-animation-duration:350ms;-moz-animation-duration:350ms}.pop.out{-webkit-animation-name:fadeout;-moz-animation-name:fadeout;opacity:0;-webkit-animation-duration:100ms;-moz-animation-duration:100ms}.pop.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein}.pop.out.reverse{-webkit-transform:scale(.8);-moz-transform:scale(.8);-webkit-animation-name:popout;-moz-animation-name:popout}@-webkit-keyframes popin{from{-webkit-transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@-moz-keyframes popin{from{-moz-transform:scale(.8);opacity:0}to{-moz-transform:scale(1);opacity:1}}@-webkit-keyframes popout{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.8);opacity:0}}@-moz-keyframes popout{from{-moz-transform:scale(1);opacity:1}to{-moz-transform:scale(.8);opacity:0}}@-webkit-keyframes slideinfromright{from{-webkit-transform:translateX(100%)}to{-webkit-transform:translateX(0)}}@-moz-keyframes slideinfromright{from{-moz-transform:translateX(100%)}to{-moz-transform:translateX(0)}}@-webkit-keyframes slideinfromleft{from{-webkit-transform:translateX(-100%)}to{-webkit-transform:translateX(0)}}@-moz-keyframes slideinfromleft{from{-moz-transform:translateX(-100%)}to{-moz-transform:translateX(0)}}@-webkit-keyframes slideouttoleft{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(-100%)}}@-moz-keyframes slideouttoleft{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(-100%)}}@-webkit-keyframes slideouttoright{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(100%)}}@-moz-keyframes slideouttoright{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(100%)}}.slide.out,.slide.in{-webkit-animation-timing-function:ease-out;-webkit-animation-duration:350ms;-moz-animation-timing-function:ease-out;-moz-animation-duration:350ms}.slide.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft;-moz-transform:translateX(-100%);-moz-animation-name:slideouttoleft}.slide.in{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromright;-moz-transform:translateX(0);-moz-animation-name:slideinfromright}.slide.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright;-moz-transform:translateX(100%);-moz-animation-name:slideouttoright}.slide.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromleft;-moz-transform:translateX(0);-moz-animation-name:slideinfromleft}.slidefade.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft;-moz-transform:translateX(-100%);-moz-animation-name:slideouttoleft;-webkit-animation-duration:225ms;-moz-animation-duration:225ms}.slidefade.in{-webkit-transform:translateX(0);-webkit-animation-name:fadein;-moz-transform:translateX(0);-moz-animation-name:fadein;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}.slidefade.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright;-moz-transform:translateX(100%);-moz-animation-name:slideouttoright;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}.slidefade.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:fadein;-moz-transform:translateX(0);-moz-animation-name:fadein;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}.slidedown.out{-webkit-animation-name:fadeout;-moz-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-duration:100ms}.slidedown.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfromtop;-moz-transform:translateY(0);-moz-animation-name:slideinfromtop;-webkit-animation-duration:250ms;-moz-animation-duration:250ms}.slidedown.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein;-webkit-animation-duration:150ms;-moz-animation-duration:150ms}.slidedown.out.reverse{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-webkit-animation-name:slideouttotop;-moz-animation-name:slideouttotop;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}@-webkit-keyframes slideinfromtop{from{-webkit-transform:translateY(-100%)}to{-webkit-transform:translateY(0)}}@-moz-keyframes slideinfromtop{from{-moz-transform:translateY(-100%)}to{-moz-transform:translateY(0)}}@-webkit-keyframes slideouttotop{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(-100%)}}@-moz-keyframes slideouttotop{from{-moz-transform:translateY(0)}to{-moz-transform:translateY(-100%)}}.slideup.out{-webkit-animation-name:fadeout;-moz-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-duration:100ms}.slideup.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfrombottom;-moz-transform:translateY(0);-moz-animation-name:slideinfrombottom;-webkit-animation-duration:250ms;-moz-animation-duration:250ms}.slideup.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein;-webkit-animation-duration:150ms;-moz-animation-duration:150ms}.slideup.out.reverse{-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-webkit-animation-name:slideouttobottom;-moz-animation-name:slideouttobottom;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}@-webkit-keyframes slideinfrombottom{from{-webkit-transform:translateY(100%)}to{-webkit-transform:translateY(0)}}@-moz-keyframes slideinfrombottom{from{-moz-transform:translateY(100%)}to{-moz-transform:translateY(0)}}@-webkit-keyframes slideouttobottom{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(100%)}}@-moz-keyframes slideouttobottom{from{-moz-transform:translateY(0)}to{-moz-transform:translateY(100%)}}.viewport-flip{-webkit-perspective:1000;-moz-perspective:1000;position:absolute}.flip{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-moz-backface-visibility:hidden;-moz-transform:translateX(0)}.flip.out{-webkit-transform:rotateY(-90deg) scale(.9);-webkit-animation-name:flipouttoleft;-webkit-animation-duration:175ms;-moz-transform:rotateY(-90deg) scale(.9);-moz-animation-name:flipouttoleft;-moz-animation-duration:175ms}.flip.in{-webkit-animation-name:flipintoright;-webkit-animation-duration:225ms;-moz-animation-name:flipintoright;-moz-animation-duration:225ms}.flip.out.reverse{-webkit-transform:rotateY(90deg) scale(.9);-webkit-animation-name:flipouttoright;-moz-transform:rotateY(90deg) scale(.9);-moz-animation-name:flipouttoright}.flip.in.reverse{-webkit-animation-name:flipintoleft;-moz-animation-name:flipintoleft}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(-90deg) scale(.9)}}@-moz-keyframes flipouttoleft{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(-90deg) scale(.9)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(90deg) scale(.9)}}@-moz-keyframes flipouttoright{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(90deg) scale(.9)}}@-webkit-keyframes flipintoleft{from{-webkit-transform:rotateY(-90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoleft{from{-moz-transform:rotateY(-90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@-webkit-keyframes flipintoright{from{-webkit-transform:rotateY(90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoright{from{-moz-transform:rotateY(90deg) scale(.9)}to{-moz-transform:rotateY(0)}}.viewport-turn{-webkit-perspective:1000;-moz-perspective:1000;position:absolute}.turn{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-webkit-transform-origin:0;-moz-backface-visibility:hidden;-moz-transform:translateX(0);-moz-transform-origin:0}.turn.out{-webkit-transform:rotateY(-90deg) scale(.9);-webkit-animation-name:flipouttoleft;-moz-transform:rotateY(-90deg) scale(.9);-moz-animation-name:flipouttoleft;-webkit-animation-duration:125ms;-moz-animation-duration:125ms}.turn.in{-webkit-animation-name:flipintoright;-moz-animation-name:flipintoright;-webkit-animation-duration:250ms;-moz-animation-duration:250ms}.turn.out.reverse{-webkit-transform:rotateY(90deg) scale(.9);-webkit-animation-name:flipouttoright;-moz-transform:rotateY(90deg) scale(.9);-moz-animation-name:flipouttoright}.turn.in.reverse{-webkit-animation-name:flipintoleft;-moz-animation-name:flipintoleft}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(-90deg) scale(.9)}}@-moz-keyframes flipouttoleft{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(-90deg) scale(.9)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(90deg) scale(.9)}}@-moz-keyframes flipouttoright{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(90deg) scale(.9)}}@-webkit-keyframes flipintoleft{from{-webkit-transform:rotateY(-90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoleft{from{-moz-transform:rotateY(-90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@-webkit-keyframes flipintoright{from{-webkit-transform:rotateY(90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoright{from{-moz-transform:rotateY(90deg) scale(.9)}to{-moz-transform:rotateY(0)}}.flow{-webkit-transform-origin:50% 30%;-moz-transform-origin:50% 30%;-webkit-box-shadow:0 0 20px rgba(0,0,0,.4);-moz-box-shadow:0 0 20px rgba(0,0,0,.4)}.ui-dialog.flow{-webkit-transform-origin:none;-moz-transform-origin:none;-webkit-box-shadow:none;-moz-box-shadow:none}.flow.out{-webkit-transform:translateX(-100%) scale(.7);-webkit-animation-name:flowouttoleft;-webkit-animation-timing-function:ease;-webkit-animation-duration:350ms;-moz-transform:translateX(-100%) scale(.7);-moz-animation-name:flowouttoleft;-moz-animation-timing-function:ease;-moz-animation-duration:350ms}.flow.in{-webkit-transform:translateX(0) scale(1);-webkit-animation-name:flowinfromright;-webkit-animation-timing-function:ease;-webkit-animation-duration:350ms;-moz-transform:translateX(0) scale(1);-moz-animation-name:flowinfromright;-moz-animation-timing-function:ease;-moz-animation-duration:350ms}.flow.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:flowouttoright;-moz-transform:translateX(100%);-moz-animation-name:flowouttoright}.flow.in.reverse{-webkit-animation-name:flowinfromleft;-moz-animation-name:flowinfromleft}@-webkit-keyframes flowouttoleft{0%{-webkit-transform:translateX(0) scale(1)}60%,70%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(-100%) scale(.7)}}@-moz-keyframes flowouttoleft{0%{-moz-transform:translateX(0) scale(1)}60%,70%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(-100%) scale(.7)}}@-webkit-keyframes flowouttoright{0%{-webkit-transform:translateX(0) scale(1)}60%,70%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(100%) scale(.7)}}@-moz-keyframes flowouttoright{0%{-moz-transform:translateX(0) scale(1)}60%,70%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(100%) scale(.7)}}@-webkit-keyframes flowinfromleft{0%{-webkit-transform:translateX(-100%) scale(.7)}30%,40%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(0) scale(1)}}@-moz-keyframes flowinfromleft{0%{-moz-transform:translateX(-100%) scale(.7)}30%,40%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(0) scale(1)}}@-webkit-keyframes flowinfromright{0%{-webkit-transform:translateX(100%) scale(.7)}30%,40%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(0) scale(1)}}@-moz-keyframes flowinfromright{0%{-moz-transform:translateX(100%) scale(.7)}30%,40%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(0) scale(1)}}.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d{overflow:hidden}.ui-block-a,.ui-block-b,.ui-block-c,.ui-block-d,.ui-block-e{margin:0;padding:0;border:0;float:left;min-height:1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui-grid-solo .ui-block-a{display:block;float:none}.ui-grid-a .ui-block-a,.ui-grid-a .ui-block-b{width:49.95%}.ui-grid-a >:nth-child(n){width:50%;margin-right:-.5px}.ui-grid-a .ui-block-a{clear:left}.ui-grid-b .ui-block-a,.ui-grid-b .ui-block-b,.ui-grid-b .ui-block-c{width:33.25%}.ui-grid-b >:nth-child(n){width:33.333%;margin-right:-.5px}.ui-grid-b .ui-block-a{clear:left}.ui-grid-c .ui-block-a,.ui-grid-c .ui-block-b,.ui-grid-c .ui-block-c,.ui-grid-c .ui-block-d{width:24.925%}.ui-grid-c >:nth-child(n){width:25%;margin-right:-.5px}.ui-grid-c .ui-block-a{clear:left}.ui-grid-d .ui-block-a,.ui-grid-d .ui-block-b,.ui-grid-d .ui-block-c,.ui-grid-d .ui-block-d,.ui-grid-d .ui-block-e{width:19.925%}.ui-grid-d >:nth-child(n){width:20%}.ui-grid-d .ui-block-a{clear:left}.ui-header-fixed,.ui-footer-fixed{left:0;right:0;width:100%;position:fixed;z-index:1000}.ui-header-fixed{top:0}.ui-footer-fixed{bottom:0}.ui-header-fullscreen,.ui-footer-fullscreen{filter:Alpha(Opacity=90);opacity:.9}.ui-page-header-fixed{padding-top:2.6875em}.ui-page-footer-fixed{padding-bottom:2.6875em}.ui-page-header-fullscreen .ui-content,.ui-page-footer-fullscreen .ui-content{padding:0}.ui-fixed-hidden{position:absolute}.ui-page-header-fullscreen .ui-fixed-hidden,.ui-page-footer-fullscreen .ui-fixed-hidden{left:-9999px}.ui-header-fixed .ui-btn,.ui-footer-fixed .ui-btn{z-index:10}.ui-navbar{max-width:100%}.ui-navbar.ui-mini{margin:0}.ui-navbar ul:before,.ui-navbar ul:after{content:" ";display:table}.ui-navbar ul:after{clear:both}.ui-navbar ul{list-style:none;margin:0;padding:0;position:relative;display:block;border:0;max-width:100%;overflow:visible;zoom:1}.ui-navbar li .ui-btn{display:block;text-align:center;margin:0 -1px 0 0;border-right-width:0}.ui-navbar li .ui-btn-icon-right .ui-icon{right:6px}.ui-navbar li:last-child .ui-btn,.ui-navbar .ui-grid-duo .ui-block-b .ui-btn{margin-right:0;border-right-width:1px}.ui-header .ui-navbar li:last-child .ui-btn,.ui-footer .ui-navbar li:last-child .ui-btn,.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn{margin-right:-1px;border-right-width:0}.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn{margin-right:-1px;border-right-width:1px}.ui-header .ui-navbar li .ui-btn,.ui-footer .ui-navbar li .ui-btn{border-top-width:0;border-bottom-width:0}.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn{margin-right:-5px}.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn{margin-right:-4px}.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon{right:8px}.ui-navbar li .ui-btn .ui-btn-inner{padding-top:.7em;padding-bottom:.8em}.ui-navbar li .ui-btn-icon-top .ui-btn-inner{padding-top:30px}.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:30px}.ui-btn{display:block;text-align:center;cursor:pointer;position:relative;margin:.5em 0;padding:0}.ui-mini{margin-top:.25em;margin-bottom:.25em}.ui-btn-left,.ui-btn-right,.ui-input-clear,.ui-btn-inline,.ui-grid-a .ui-btn,.ui-grid-b .ui-btn,.ui-grid-c .ui-btn,.ui-grid-d .ui-btn,.ui-grid-e .ui-btn,.ui-grid-solo .ui-btn{margin-right:5px;margin-left:5px}.ui-btn-inner{font-size:16px;padding:.6em 20px;min-width:.75em;display:block;position:relative;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;zoom:1}.ui-btn input,.ui-btn button{z-index:2}.ui-btn-left,.ui-btn-right,.ui-btn-inline{display:inline-block;vertical-align:middle}.ui-mobile .ui-btn-left,.ui-mobile .ui-btn-right{margin:0}.ui-btn-block{display:block}.ui-header > .ui-btn,.ui-footer > .ui-btn{display:inline-block;margin:0}.ui-header .ui-btn-block,.ui-footer .ui-btn-block{display:block}.ui-header .ui-btn-inner,.ui-footer .ui-btn-inner,.ui-mini .ui-btn-inner{font-size:12.5px;padding:.55em 11px .5em}.ui-fullsize .ui-btn-inner,.ui-fullsize .ui-btn-inner{font-size:16px;padding:.6em 20px}.ui-btn-icon-notext{width:24px;height:24px}.ui-btn-icon-notext .ui-btn-inner{padding:0;height:100%}.ui-btn-icon-notext .ui-btn-inner .ui-icon{margin:2px 1px 2px 3px;float:left}.ui-btn-text{position:relative;z-index:1;width:100%;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.ui-btn-icon-notext .ui-btn-text{position:absolute;left:-9999px}.ui-btn-icon-left .ui-btn-inner{padding-left:40px}.ui-btn-icon-right .ui-btn-inner{padding-right:40px}.ui-btn-icon-top .ui-btn-inner{padding-top:40px}.ui-btn-icon-bottom .ui-btn-inner{padding-bottom:40px}.ui-header .ui-btn-icon-left .ui-btn-inner,.ui-footer .ui-btn-icon-left .ui-btn-inner,.ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-mini .ui-btn-icon-left .ui-btn-inner{padding-left:30px}.ui-header .ui-btn-icon-right .ui-btn-inner,.ui-footer .ui-btn-icon-right .ui-btn-inner,.ui-mini.ui-btn-icon-right .ui-btn-inner,.ui-mini .ui-btn-icon-right .ui-btn-inner{padding-right:30px}.ui-header .ui-btn-icon-top .ui-btn-inner,.ui-footer .ui-btn-icon-top .ui-btn-inner{padding:30px 3px .5em 3px}.ui-mini.ui-btn-icon-top .ui-btn-inner,.ui-mini .ui-btn-icon-top .ui-btn-inner{padding-top:30px}.ui-header .ui-btn-icon-bottom .ui-btn-inner,.ui-footer .ui-btn-icon-bottom .ui-btn-inner{padding:.55em 3px 30px 3px}.ui-mini.ui-btn-icon-bottom .ui-btn-inner,.ui-mini .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:30px}.ui-btn-icon-notext .ui-icon{display:block;z-index:0}.ui-btn-icon-left > .ui-btn-inner > .ui-icon,.ui-btn-icon-right > .ui-btn-inner > .ui-icon{position:absolute;top:50%;margin-top:-9px}.ui-btn-icon-top .ui-btn-inner .ui-icon,.ui-btn-icon-bottom .ui-btn-inner .ui-icon{position:absolute;left:50%;margin-left:-9px}.ui-btn-icon-left .ui-icon{left:10px}.ui-btn-icon-right .ui-icon{right:10px}.ui-btn-icon-top .ui-icon{top:10px}.ui-btn-icon-bottom .ui-icon{top:auto;bottom:10px}.ui-header .ui-btn-icon-left .ui-icon,.ui-footer .ui-btn-icon-left .ui-icon,.ui-mini.ui-btn-icon-left .ui-icon,.ui-mini .ui-btn-icon-left .ui-icon{left:5px}.ui-header .ui-btn-icon-right .ui-icon,.ui-footer .ui-btn-icon-right .ui-icon,.ui-mini.ui-btn-icon-right .ui-icon,.ui-mini .ui-btn-icon-right .ui-icon{right:5px}.ui-header .ui-btn-icon-top .ui-icon,.ui-footer .ui-btn-icon-top .ui-icon,.ui-mini.ui-btn-icon-top .ui-icon,.ui-mini .ui-btn-icon-top .ui-icon{top:5px}.ui-header .ui-btn-icon-bottom .ui-icon,.ui-footer .ui-btn-icon-bottom .ui-icon,.ui-mini.ui-btn-icon-bottom .ui-icon,.ui-mini .ui-btn-icon-bottom .ui-icon{bottom:5px}.ui-btn-hidden{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-appearance:none;cursor:pointer;background:#fff;background:rgba(255,255,255,0);filter:Alpha(Opacity=0);opacity:.1;font-size:1px;border:none;text-indent:-9999px}.ui-disabled .ui-btn-hidden{display:none}.ui-disabled{z-index:1}.ui-field-contain .ui-btn.ui-submit{margin:0}label.ui-submit{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}@media all and (min-width:450px){.ui-field-contain label.ui-submit{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-btn.ui-submit{width:78%;display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui-hide-label .ui-btn.ui-submit{width:auto;display:block}}.ui-collapsible-inset{margin:.5em 0}.ui-collapsible-heading{font-size:16px;display:block;margin:0 -15px;padding:0;position:relative}.ui-collapsible-inset .ui-collapsible-heading{margin:0}.ui-collapsible-heading .ui-btn{text-align:left;margin:0;border-left-width:0;border-right-width:0}.ui-collapsible-inset .ui-collapsible-heading .ui-btn{border-right-width:1px;border-left-width:1px}.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn{border-top-width:0}.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn{border-top-width:1px}.ui-collapsible-heading .ui-btn-inner,.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner{padding-left:40px}.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner{padding-left:12px;padding-right:40px}.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner{padding-right:40px;text-align:center}.ui-collapsible-heading .ui-btn span.ui-btn{position:absolute;left:6px;top:50%;margin:-12px 0 0 0;width:20px;height:20px;padding:1px 0 1px 2px;text-indent:-9999px}.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner{padding:10px 0}.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon{left:0;margin-top:-10px}.ui-collapsible-heading-status{position:absolute;top:-9999px;left:0}.ui-collapsible-content{display:block;margin:0 -15px;padding:10px 15px;border-left-width:0;border-right-width:0;border-top:none;background-image:none}.ui-collapsible-inset .ui-collapsible-content{margin:0;border-right-width:1px;border-left-width:1px}.ui-collapsible-content-collapsed{display:none}.ui-collapsible-set{margin:.5em 0}.ui-collapsible-set .ui-collapsible{margin:-1px 0 0}.ui-collapsible-set .ui-collapsible:first-child{margin-top:0}.ui-controlgroup,fieldset.ui-controlgroup{padding:0;margin:.5em 0;zoom:1}.ui-controlgroup.ui-mini,fieldset.ui-controlgroup.ui-mini{margin:.25em 0}.ui-field-contain .ui-controlgroup,.ui-field-contain fieldset.ui-controlgroup{margin:0}.ui-bar .ui-controlgroup{margin:0 5px}.ui-controlgroup-label{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .4em}.ui-controlgroup li{list-style:none}.ui-controlgroup-vertical .ui-btn,.ui-controlgroup-vertical .ui-checkbox,.ui-controlgroup-vertical .ui-radio{margin:0;border-bottom-width:0}.ui-controlgroup-vertical .ui-controlgroup-last{border-bottom-width:1px}.ui-controlgroup-controls label.ui-select{position:absolute;left:-9999px}.ui-controlgroup .ui-btn-icon-notext{width:auto;height:auto;top:auto}.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner{height:20px;padding:.6em 20px .6em 20px}.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner{width:18px}.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner,.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner,.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner{height:16px;padding:.55em 11px .5em 11px}.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon{position:absolute;top:50%;right:50%;margin:-9px -9px 0 0}.ui-controlgroup-horizontal .ui-controlgroup-controls:before,.ui-controlgroup-horizontal .ui-controlgroup-controls:after{content:"";display:table}.ui-controlgroup-horizontal .ui-controlgroup-controls:after{clear:both}.ui-controlgroup-horizontal .ui-controlgroup-controls{display:inline-block;vertical-align:middle;zoom:1}.ui-controlgroup-horizontal .ui-btn-inner{text-align:center}.ui-controlgroup-horizontal.ui-mini .ui-btn-inner{height:16px;line-height:16px}.ui-controlgroup-horizontal .ui-btn,.ui-controlgroup-horizontal .ui-select,.ui-controlgroup-horizontal .ui-checkbox,.ui-controlgroup-horizontal .ui-radio{float:left;clear:none;margin:0 -1px 0 0}.ui-controlgroup-horizontal .ui-select .ui-btn,.ui-controlgroup-horizontal .ui-checkbox .ui-btn,.ui-controlgroup-horizontal .ui-radio .ui-btn{float:none;margin:0}.ui-controlgroup-horizontal .ui-controlgroup-last,.ui-controlgroup-horizontal .ui-select:last-child,.ui-controlgroup-horizontal .ui-checkbox:last-child,.ui-controlgroup-horizontal .ui-radio:last-child{margin-right:0}.ui-controlgroup .ui-checkbox label,.ui-controlgroup .ui-radio label{font-size:16px}@media all and (min-width:450px){.ui-field-contain .ui-controlgroup-label{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-controlgroup-controls{width:78%;display:inline-block}.ui-field-contain .ui-controlgroup .ui-select{width:100%;display:block}.ui-field-contain .ui-controlgroup-horizontal .ui-select{width:auto}.ui-hide-label .ui-controlgroup-controls{width:100%}}.ui-dialog{background:none!important}.ui-dialog-contain{width:92.5%;max-width:500px;margin:10% auto 15px auto;padding:0;position:relative;top:-15px}.ui-dialog-contain > .ui-header,.ui-dialog-contain > .ui-content,.ui-dialog-contain > .ui-footer{display:block;position:relative;width:auto;margin:0}.ui-dialog-contain > .ui-header{border:none;overflow:hidden;z-index:10;padding:0}.ui-dialog-contain > .ui-content{padding:15px}.ui-dialog-contain > .ui-footer{z-index:10;padding:0 15px}.ui-popup-open .ui-header-fixed,.ui-popup-open .ui-footer-fixed{position:absolute!important}.ui-popup-screen{background-image:url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==);top:0;left:0;right:0;bottom:1px;position:absolute;filter:Alpha(Opacity=0);opacity:0;z-index:1099}.ui-popup-screen.in{opacity:0.5;filter:Alpha(Opacity=50)}.ui-popup-screen.out{opacity:0;filter:Alpha(Opacity=0)}.ui-popup-container{z-index:1100;display:inline-block;position:absolute;padding:0;outline:0}.ui-popup{position:relative}.ui-popup.ui-content,.ui-popup .ui-content{overflow:visible}.ui-popup > p,.ui-popup > h1,.ui-popup > h2,.ui-popup > h3,.ui-popup > h4,.ui-popup > h5,.ui-popup > h6{margin:.5em 7px}.ui-popup > span{display:block;margin:.5em 7px}.ui-popup .ui-title{font-size:16px;font-weight:bold;margin-top:.5em;margin-bottom:.5em}.ui-popup-container .ui-content > p,.ui-popup-container .ui-content > h1,.ui-popup-container .ui-content > h2,.ui-popup-container .ui-content > h3,.ui-popup-container .ui-content > h4,.ui-popup-container .ui-content > h5,.ui-popup-container .ui-content > h6{margin:.5em 0}.ui-popup-container .ui-content > span{margin:0}.ui-popup-container .ui-content > p:first-child,.ui-popup-container .ui-content > h1:first-child,.ui-popup-container .ui-content > h2:first-child,.ui-popup-container .ui-content > h3:first-child,.ui-popup-container .ui-content > h4:first-child,.ui-popup-container .ui-content > h5:first-child,.ui-popup-container .ui-content > h6:first-child{margin-top:0}.ui-popup-container .ui-content > p:last-child,.ui-popup-container .ui-content > h1:last-child,.ui-popup-container .ui-content > h2:last-child,.ui-popup-container .ui-content > h3:last-child,.ui-popup-container .ui-content > h4:last-child,.ui-popup-container .ui-content > h5:last-child,.ui-popup-container .ui-content > h6:last-child{margin-bottom:0}.ui-popup > img{width:auto;height:auto;max-width:100%;max-height:100%;vertical-align:middle}.ui-popup iframe{vertical-align:middle}@media all and (min-width:450px){.ui-popup .ui-field-contain label.ui-submit,.ui-popup .ui-field-contain .ui-controlgroup-label,.ui-popup .ui-field-contain label.ui-select,.ui-popup .ui-field-contain label.ui-input-text{font-size:16px;line-height:1.4;display:block;font-weight:normal;margin:0 0 .3em}.ui-popup .ui-field-contain .ui-btn.ui-submit,.ui-popup .ui-field-contain .ui-controlgroup-controls,.ui-popup .ui-field-contain .ui-select,.ui-popup .ui-field-contain input.ui-input-text,.ui-popup .ui-field-contain textarea.ui-input-text,.ui-popup .ui-field-contain .ui-input-search{width:100%;display:block}}.ui-popup > .ui-btn-left,.ui-popup > .ui-btn-right{position:absolute;top:-9px;margin:0;z-index:1101}.ui-popup > .ui-btn-left{left:-9px}.ui-popup > .ui-btn-right{right:-9px}.ui-popup.ui-corner-all > .ui-header,.ui-popup.ui-corner-all ~ .ui-content,.ui-popup.ui-corner-all > .ui-content:first-child{-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit;-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit}.ui-popup.ui-corner-all > .ui-content,.ui-popup.ui-corner-all > .ui-footer,.ui-popup.ui-corner-all > .ui-header:nth-child(n):last-child{-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit;-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit}.ui-popup.ui-corner-all > .ui-content:nth-child(2),.ui-popup.ui-corner-all > .ui-header:nth-child(2){-webkit-border-top-left-radius:0;border-top-left-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.ui-popup.ui-corner-all > .ui-content:nth-last-child(1n+2),.ui-popup.ui-corner-all > .ui-footer:nth-last-child(1n+2){-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.ui-popup.ui-corner-all > .ui-header:only-child,.ui-popup.ui-corner-all > .ui-footer:only-child{-webkit-border-radius:inherit;border-radius:inherit}.ui-checkbox,.ui-radio{position:relative;clear:both;margin:0;z-index:1}.ui-checkbox .ui-btn,.ui-radio .ui-btn{margin-top:.5em;margin-bottom:.5em;text-align:left;z-index:2}.ui-checkbox .ui-btn.ui-mini,.ui-radio .ui-btn.ui-mini{margin:.25em 0}.ui-controlgroup .ui-checkbox .ui-btn,.ui-controlgroup .ui-radio .ui-btn{margin:0}.ui-checkbox .ui-btn-inner,.ui-radio .ui-btn-inner{white-space:normal}.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner{padding-left:45px}.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner{padding-left:36px}.ui-checkbox .ui-btn-icon-right .ui-btn-inner,.ui-radio .ui-btn-icon-right .ui-btn-inner{padding-right:45px}.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner{padding-right:36px}.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner{padding-right:0;padding-left:0;text-align:center}.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner,.ui-radio .ui-btn-icon-bottom .ui-btn-inner{padding-right:0;padding-left:0;text-align:center}.ui-checkbox .ui-icon,.ui-radio .ui-icon{top:1.1em}.ui-checkbox .ui-btn-icon-left .ui-icon,.ui-radio .ui-btn-icon-left .ui-icon{left:15px}.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon,.ui-radio .ui-mini.ui-btn-icon-left .ui-icon{left:9px}.ui-checkbox .ui-btn-icon-right .ui-icon,.ui-radio .ui-btn-icon-right .ui-icon{right:15px}.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon,.ui-radio .ui-mini.ui-btn-icon-right .ui-icon{right:9px}.ui-checkbox .ui-btn-icon-top .ui-icon,.ui-radio .ui-btn-icon-top .ui-icon{top:10px}.ui-checkbox .ui-btn-icon-bottom .ui-icon,.ui-radio .ui-btn-icon-bottom .ui-icon{top:auto;bottom:10px}.ui-checkbox .ui-btn-icon-right .ui-icon,.ui-radio .ui-btn-icon-right .ui-icon{right:15px}.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon,.ui-radio .ui-mini.ui-btn-icon-right .ui-icon{right:9px}.ui-checkbox input,.ui-radio input{position:absolute;left:20px;top:50%;width:10px;height:10px;margin:-5px 0 0 0;outline:0!important;z-index:1}.ui-field-contain,fieldset.ui-field-contain{padding:.8em 0;margin:0;border-width:0 0 1px 0;overflow:visible}.ui-field-contain:last-child{border-bottom-width:0}.ui-field-contain{max-width:100%}@media all and (min-width:450px){.ui-field-contain,.ui-mobile fieldset.ui-field-contain{border-width:0;padding:0;margin:1em 0}}.ui-select{display:block;position:relative}.ui-select select{position:absolute;left:-9999px;top:-9999px}.ui-select .ui-btn{overflow:hidden;opacity:1}.ui-field-contain .ui-select .ui-btn{margin:0}.ui-select .ui-btn select{cursor:pointer;-webkit-appearance:none;left:0;top:0;width:100%;min-height:1.5em;min-height:100%;height:3em;max-height:100%;filter:Alpha(Opacity=0);opacity:0;z-index:2}.ui-select .ui-disabled{opacity:.3}.ui-select .ui-disabled select{display:none}@-moz-document url-prefix(){.ui-select .ui-btn select{opacity:0.0001}}.ui-select .ui-btn.ui-select-nativeonly{border-radius:0;border:0}.ui-select .ui-btn.ui-select-nativeonly select{opacity:1;text-indent:0;display:block}.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner{opacity:0}.ui-select .ui-btn-icon-right .ui-btn-inner,.ui-select .ui-li-has-count .ui-btn-inner{padding-right:45px}.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner{padding-right:32px}.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner{padding-right:80px}.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner{padding-right:67px}.ui-select .ui-btn-icon-right .ui-icon{right:15px}.ui-select .ui-mini.ui-btn-icon-right .ui-icon{right:7px}.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count{right:45px}.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count{right:32px}label.ui-select{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}.ui-select .ui-btn-text,.ui-selectmenu .ui-btn-text{display:block;min-height:1em;overflow:hidden!important}.ui-select .ui-btn-text{text-overflow:ellipsis}.ui-selectmenu{padding:6px;min-width:160px}.ui-selectmenu .ui-listview{margin:0}.ui-selectmenu .ui-btn.ui-li-divider{cursor:default}.ui-selectmenu-hidden{top:-99999px;left:-9999px}.ui-screen-hidden,.ui-selectmenu-list .ui-li .ui-icon{display:none}.ui-selectmenu-list .ui-li .ui-icon{display:block}.ui-li.ui-selectmenu-placeholder{display:none}.ui-selectmenu .ui-header{margin:0;padding:0}.ui-selectmenu .ui-header .ui-title{margin:0.6em 46px 0.8em}@media all and (min-width:450px){.ui-field-contain label.ui-select{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-select{width:78%;display:inline-block}.ui-hide-label .ui-select{width:100%}}.ui-selectmenu .ui-header h1:after{content:'.';visibility:hidden}label.ui-input-text{font-size:16px;line-height:1.4;display:block;font-weight:normal;margin:0 0 .3em}input.ui-input-text,textarea.ui-input-text{background-image:none;padding:.4em;margin:.5em 0;line-height:1.4;font-size:16px;display:block;width:100%;outline:0}input.ui-input-text.ui-mini,textarea.ui-input-text.ui-mini{margin:.25em 0}.ui-field-contain input.ui-input-text,.ui-field-contain textarea.ui-input-text{margin:0}input.ui-input-text,textarea.ui-input-text,.ui-input-search{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}input.ui-input-text{-webkit-appearance:none}textarea.ui-input-text{height:50px;-webkit-transition:height 200ms linear;-moz-transition:height 200ms linear;-o-transition:height 200ms linear;transition:height 200ms linear}.ui-input-search{padding:0 30px;margin:.5em 0;background-image:none;position:relative}.ui-input-search.ui-mini{margin:.25em 0}.ui-field-contain .ui-input-search{margin:0}.ui-icon-searchfield:after{position:absolute;left:7px;top:50%;margin-top:-9px;content:"";width:18px;height:18px;opacity:.5}.ui-input-search input.ui-input-text{border:none;width:98%;padding:.4em 0;margin:0;display:block;background:transparent none;outline:0!important}.ui-input-search .ui-input-clear{position:absolute;right:0;top:50%;margin-top:-13px}.ui-mini .ui-input-clear{right:-3px}.ui-input-search .ui-input-clear-hidden{display:none}input.ui-mini,.ui-mini input,textarea.ui-mini{font-size:14px}textarea.ui-mini{height:45px}@media all and (min-width:450px){.ui-field-contain label.ui-input-text{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain input.ui-input-text,.ui-field-contain textarea.ui-input-text,.ui-field-contain .ui-input-search{width:78%;display:inline-block}.ui-hide-label input.ui-input-text,.ui-hide-label textarea.ui-input-text,.ui-hide-label .ui-input-search{width:100%}.ui-input-search input.ui-input-text{width:98%}}.ui-listview{margin:0}ol.ui-listview,ol.ui-listview .ui-li-divider{counter-reset:listnumbering}.ui-content .ui-listview{margin:-15px}.ui-collapsible-content > .ui-listview{margin:-10px -15px}.ui-content .ui-listview-inset{margin:1em 0}.ui-collapsible-content .ui-listview-inset{margin:.5em 0}.ui-listview,.ui-li{list-style:none;padding:0}.ui-li,.ui-li.ui-field-contain{display:block;margin:0;position:relative;overflow:visible;text-align:left;border-width:0;border-top-width:1px}.ui-li.ui-btn{margin:0}.ui-li .ui-btn-text a.ui-link-inherit{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-static{background-image:none}.ui-li-divider{padding:.5em 15px;font-size:14px;font-weight:bold}ol.ui-listview .ui-link-inherit:before,ol.ui-listview .ui-li-static:before,.ui-li-dec{font-size:.8em;display:inline-block;padding-right:.3em;font-weight:normal;counter-increment:listnumbering;content:counter(listnumbering) ". "}ol.ui-listview .ui-li-jsnumbering:before{content:""!important}.ui-listview-inset .ui-li{border-right-width:1px;border-left-width:1px}.ui-li-last,.ui-li.ui-field-contain.ui-li-last{border-bottom-width:1px}.ui-collapsible [class*="ui-body"] > .ui-listview:not(.ui-listview-inset) .ui-li-last{border-bottom-width:0}.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li:first-child{border-top-width:0}.ui-collapsible-content > .ui-listview:not(.ui-listview-inset),.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last{-webkit-border-bottom-left-radius:inherit;-webkit-border-bottom-right-radius:inherit;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last .ui-li-link-alt{-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit}.ui-li>.ui-btn-inner{display:block;position:relative;padding:0}.ui-li .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li{padding:.7em 15px;display:block}.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-thumb{min-height:60px;padding-left:100px}.ui-li-has-icon .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-icon{min-height:20px;padding-left:40px}.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-count,.ui-li-divider.ui-li-has-count{padding-right:45px}.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow{padding-right:40px}.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow.ui-li-has-count{padding-right:75px}.ui-li-heading{font-size:16px;font-weight:bold;display:block;margin:.6em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-desc{font-size:12px;font-weight:normal;display:block;margin:-.5em 0 .6em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-thumb,.ui-listview .ui-li-icon{position:absolute;left:1px;top:0;max-height:80px;max-width:80px}.ui-listview .ui-li-icon{max-height:16px;max-width:16px;left:10px;top:.9em}.ui-li-thumb,.ui-listview .ui-li-icon,.ui-li-content{float:left;margin-right:10px}.ui-li-aside{float:right;width:50%;text-align:right;margin:.3em 0}@media all and (min-width:480px){.ui-li-aside{width:45%}}.ui-li-divider{cursor:default}.ui-li-has-alt .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-alt{padding-right:53px}.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-alt.ui-li-has-count{padding-right:88px}.ui-li-has-count .ui-li-count{position:absolute;font-size:11px;font-weight:bold;padding:.2em .5em;top:50%;margin-top:-.9em;right:10px}.ui-li-has-count.ui-li-divider .ui-li-count,.ui-li-has-count .ui-link-inherit .ui-li-count{margin-top:-.95em}.ui-li-has-arrow.ui-li-has-count .ui-li-count{right:40px}.ui-li-has-alt.ui-li-has-count .ui-li-count{right:53px}.ui-li-link-alt{position:absolute;width:40px;height:100%;border-width:0;border-left-width:1px;top:0;right:0;margin:0;padding:0;z-index:2}.ui-li-link-alt .ui-btn{overflow:hidden;position:absolute;right:8px;top:50%;margin:-13px 0 0 0;border-bottom-width:1px;z-index:-1}.ui-li-link-alt .ui-btn-inner{padding:0;height:100%;position:absolute;width:100%;top:0;left:0}.ui-li-link-alt .ui-btn .ui-icon{right:50%;margin-right:-9px}.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon{position:absolute;top:50%;margin-top:-9px}.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner{border-top:0}.ui-listview-filter{border-width:0;overflow:hidden;margin:-15px -15px 15px -15px}.ui-collapsible-content .ui-listview-filter{margin:-10px -15px 10px -15px;border-bottom:inherit}.ui-listview-filter-inset{margin:-15px -5px;background:transparent}.ui-collapsible-content .ui-listview-filter-inset{margin:-5px;border-bottom-width:0}.ui-listview-filter .ui-input-search{margin:5px;width:auto;display:block}.ui-li.ui-screen-hidden{display:none}@media only screen and (min-device-width:768px) and (max-device-width:1024px){.ui-li .ui-btn-text{overflow:visible}}label.ui-slider{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}input.ui-slider-input,.ui-field-contain input.ui-slider-input{display:inline-block;width:50px;background-image:none;padding:.4em;margin:.5em 0;line-height:1.4;font-size:16px;outline:0}input.ui-slider-input.ui-mini,.ui-field-contain input.ui-slider-input.ui-mini{width:45px;margin:.25em 0;font-size:14px}.ui-field-contain input.ui-slider-input{margin:0}input.ui-slider-input,.ui-field-contain input.ui-slider-input{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;box-sizing:content-box}.ui-slider-input::-webkit-outer-spin-button{margin:0}select.ui-slider-switch{display:none}div.ui-slider{position:relative;display:inline-block;overflow:visible;height:15px;padding:0;margin:0 2% 0 20px;top:4px;width:65%}div.ui-slider-mini{height:12px;margin-left:10px;top:2px}div.ui-slider-bg{border:none;height:100%;padding-right:8px}.ui-controlgroup a.ui-slider-handle,a.ui-btn.ui-slider-handle{position:absolute;z-index:1;top:50%;width:28px;height:28px;margin:-15px 0 0 -15px;outline:0}a.ui-btn.ui-slider-handle .ui-btn-inner{padding:0;height:100%}div.ui-slider-mini a.ui-slider-handle{height:14px;width:14px;margin:-8px 0 0 -7px}div.ui-slider-mini a.ui-slider-handle .ui-btn-inner{height:30px;width:30px;padding:0;margin:-9px 0 0 -9px;border-top:none}@media all and (min-width:450px){.ui-field-contain label.ui-slider{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain div.ui-slider{width:43%}.ui-field-contain div.ui-slider-switch{width:5.5em}}div.ui-slider-switch{height:32px;margin-left:0;width:5.8em}a.ui-slider-handle-snapping{-webkit-transition:left 70ms linear;-moz-transition:left 70ms linear}div.ui-slider-switch .ui-slider-handle{margin:1px 0 0 -15px}.ui-slider-inneroffset{margin:0 16px;position:relative;z-index:1}div.ui-slider-switch.ui-slider-mini{width:5em;height:29px}div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset{margin:0 15px 0 14px}div.ui-slider-switch.ui-slider-mini .ui-slider-handle{width:25px;height:25px;margin:1px 0 0 -13px}div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner{height:30px;width:30px;padding:0;margin:0}span.ui-slider-label{position:absolute;text-align:center;width:100%;overflow:hidden;font-size:16px;top:0;line-height:2;min-height:100%;border-width:0;white-space:nowrap}.ui-slider-mini span.ui-slider-label{font-size:14px}span.ui-slider-label-a{z-index:1;left:0;text-indent:-1.5em}span.ui-slider-label-b{z-index:0;right:0;text-indent:1.5em}.ui-slider-inline{width:120px;display:inline-block} \ No newline at end of file diff --git a/src/css/styles.css b/src/css/styles.css new file mode 100644 index 0000000..7bbff5a --- /dev/null +++ b/src/css/styles.css @@ -0,0 +1,37 @@ +.inset { + display: block; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + line-height: 1; + font-family: Georgia, serif; + font-weight: bold; + font-style: italic; + color:#505050; + text-shadow: 1px 1px 0px #101010, -1px -1px 0px #808080; +} + +a.inset:hover { + text-decoration: none; + color:#505050; +} + +textarea.ui-input-text { + height : 400px; +} + +.ui-btn-inline { + margin-left: 0px; +} + +#loginImg { + margin-top: 40px; + margin-bottom: 10px; + width: 128px; + height: 128px; + margin-left: auto; + margin-right: auto; + background-image: url('images/key-128.png'); + background-repeat: no-repeat; +} \ No newline at end of file diff --git a/src/index.html b/src/index.html new file mode 100755 index 0000000..883a510 --- /dev/null +++ b/src/index.html @@ -0,0 +1,69 @@ + + + + + + Mail + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/js/app-config.js b/src/js/app-config.js new file mode 100644 index 0000000..0f01fcf --- /dev/null +++ b/src/js/app-config.js @@ -0,0 +1,23 @@ +'use strict'; + +/** + * Create the application namespace + */ +var app = { + model: {}, + view: {}, + dao: {}, + crypto:{}, + util: {} +}; + +/** + * Global app configurations + */ +app.config = { + cloudUrl: 'https://whiteout-io.appspot.com', + symKeySize: 128, + symIvSize: 104, + asymKeySize: 2048, + workerPath: 'js' +}; \ No newline at end of file diff --git a/src/js/app-router.js b/src/js/app-router.js new file mode 100644 index 0000000..03fabc6 --- /dev/null +++ b/src/js/app-router.js @@ -0,0 +1,86 @@ +'use strict'; + +var AppRouter = Backbone.Router.extend({ + + routes:{ + '': 'login', + 'compose': 'compose', + 'accounts/:userId/folders': 'folders', + 'accounts/:userId/folders/:folder': 'messagelist', + 'accounts/:userId/folders/:folder/read/:messageId': 'read' + }, + + initialize: function () { + // handle back click + var self = this; + $(document).on('vmousedown', '#backBtn', function(e) { + e.preventDefault(); + self.back = true; + window.history.back(); + }); + this.firstPage = true; + }, + + login: function() { + // init email dao and dependencies + var util = new app.crypto.Util(window, null); + var jsonDao = new app.dao.LawnchairDAO(window); + var crypto = new app.crypto.Crypto(window, util); + var cloudstorage = new app.dao.CloudStorage(window, $); + var devicestorage = new app.dao.DeviceStorage(crypto, jsonDao, null); + this.emailDao = new app.dao.EmailDAO(_, crypto, devicestorage, cloudstorage); + + var loginView = new app.view.LoginView({dao: this.emailDao}); + this.changePage(loginView); + }, + + compose: function() { + // $.mobile.defaultPageTransition = 'slideup'; + var composeView = new app.view.ComposeView(); + this.changePage(composeView); + // $.mobile.defaultPageTransition = 'slideup'; + }, + + folders: function(userId) { + var folderListView = new app.view.FolderListView({account: userId}); + this.changePage(folderListView); + }, + + messagelist: function(userId, folder) { + var self = this; + var messageListView = new app.view.MessageListView({account: userId, folder: folder, dao: this.emailDao}); + self.changePage(messageListView); + messageListView.loadItems(); + }, + + read: function(userId, folder, messageId) { + var readView = new app.view.ReadView({ + folder: folder, + messageId: decodeURIComponent(messageId), + dao: this.emailDao + }); + this.changePage(readView); + readView.renderBody(); + }, + + changePage: function (page) { + // render the page and append it to the DOM + $(page.el).attr('data-role', 'page'); + page.render(); + $('body').append($(page.el)); + + // change to the page using jQM transitions + var transition = $.mobile.defaultPageTransition; + // We don't want to slide the first page + if (this.firstPage) { + transition = 'none'; + this.firstPage = false; + } + $.mobile.changePage($(page.el), {changeHash:false, transition:transition, reverse:this.back}); + + // change transition direction back after back button was pushed + this.back = false; + // $.mobile.defaultPageTransition = 'fade'; + } + +}); \ No newline at end of file diff --git a/src/js/crypto/aes-batch-worker.js b/src/js/crypto/aes-batch-worker.js new file mode 100644 index 0000000..b08b075 --- /dev/null +++ b/src/js/crypto/aes-batch-worker.js @@ -0,0 +1,43 @@ +'use strict'; + +// import web worker dependencies +importScripts('../../lib/sjcl/sjcl.js'); +importScripts('../../lib/sjcl/bitArray.js'); +importScripts('../../lib/sjcl/codecBase64.js'); +importScripts('../../lib/sjcl/codecString.js'); +importScripts('../../lib/sjcl/aes.js'); +importScripts('../../lib/sjcl/ccm.js'); +importScripts('../app-config.js'); +importScripts('./aes-ccm.js'); +importScripts('./util.js'); + +var AESBATCHWORKER = (function () { + + /** + * In the web worker thread context, 'this' and 'self' can be used as a global + * variable namespace similar to the 'window' object in the main thread + */ + self.addEventListener('message', function(e) { + + var args = e.data, + output = null, + aes = new app.crypto.AesCCM(), + util = new app.crypto.Util(null, null); + + if (args.type === 'encrypt' && args.list) { + // start encryption + output = util.encryptList(aes, args.list); + + } else if (args.type === 'decrypt' && args.list) { + // start decryption + output = util.decryptList(aes, args.list); + + } else { + throw 'Not all arguments for web worker crypto are defined!'; + } + + // pass output back to main thread + self.postMessage(output); + }, false); + +}()); \ No newline at end of file diff --git a/src/js/crypto/aes-cbc.js b/src/js/crypto/aes-cbc.js new file mode 100644 index 0000000..1e3033b --- /dev/null +++ b/src/js/crypto/aes-cbc.js @@ -0,0 +1,48 @@ +'use strict'; + +/** + * A Wrapper for Crypto.js's AES-CBC encryption + */ +app.crypto.AesCBC = function() { + + var mode = CryptoJS.mode.CBC; // use CBC mode for Crypto.js + var padding = CryptoJS.pad.Pkcs7; // use Pkcs7/Pkcs5 padding for Crypto.js + + /** + * Encrypt a String using AES-CBC-Pkcs7 using the provided keysize (e.g. 128, 256) + * @param plaintext [String] The input string in UTF8 + * @param key [String] The base64 encoded key + * @param iv [String] The base64 encoded IV + * @return [String] The base64 encoded ciphertext + */ + this.encrypt = function(plaintext, key, iv) { + // parse base64 input to crypto.js WordArrays + var keyWords = CryptoJS.enc.Base64.parse(key); + var ivWords = CryptoJS.enc.Base64.parse(iv); + var plaintextWords = CryptoJS.enc.Utf8.parse(plaintext); + + var encrypted = CryptoJS.AES.encrypt(plaintextWords, keyWords, { iv: ivWords, mode: mode, padding: padding }); + var ctBase64 = CryptoJS.enc.Base64.stringify(encrypted.ciphertext); + + return ctBase64; + }; + + /** + * Decrypt a String using AES-CBC-Pkcs7 using the provided keysize (e.g. 128, 256) + * @param ciphertext [String] The base64 encoded ciphertext + * @param key [String] The base64 encoded key + * @param iv [String] The base64 encoded IV + * @return [String] The decrypted plaintext in UTF8 + */ + this.decrypt = function(ciphertext, key, iv) { + // parse base64 input to crypto.js WordArrays + var keyWords = CryptoJS.enc.Base64.parse(key); + var ivWords = CryptoJS.enc.Base64.parse(iv); + + var decrypted = CryptoJS.AES.decrypt(ciphertext, keyWords, { iv: ivWords, mode: mode, padding: padding }); + var pt = decrypted.toString(CryptoJS.enc.Utf8); + + return pt; + }; + +}; \ No newline at end of file diff --git a/src/js/crypto/aes-ccm.js b/src/js/crypto/aes-ccm.js new file mode 100644 index 0000000..bddf08c --- /dev/null +++ b/src/js/crypto/aes-ccm.js @@ -0,0 +1,51 @@ +'use strict'; + +/** + * A Wrapper for SJCL's authenticated AES-CCM encryption + */ +app.crypto.AesCCM = function() { + + var adata = []; // authenticated data (empty by default) + var tlen = 64; // The tag length in bits + + /** + * Encrypt a String using AES-CCM using the provided keysize (e.g. 128, 256) + * @param plaintext [String] The input string in UTF8 + * @param key [String] The base64 encoded key + * @param iv [String] The base64 encoded IV + * @return [String] The base64 encoded ciphertext + */ + this.encrypt = function(plaintext, key, iv) { + // convert parameters to WordArrays + var keyWords = sjcl.codec.base64.toBits(key); + var ivWords = sjcl.codec.base64.toBits(iv); + var plaintextWords = sjcl.codec.utf8String.toBits(plaintext); + + var blockCipher = new sjcl.cipher.aes(keyWords); + var ciphertext = sjcl.mode.ccm.encrypt(blockCipher, plaintextWords, ivWords, adata, tlen); + var ctBase64 = sjcl.codec.base64.fromBits(ciphertext); + + return ctBase64; + }; + + /** + * Decrypt a String using AES-CCM using the provided keysize (e.g. 128, 256) + * @param ciphertext [String] The base64 encoded ciphertext + * @param key [String] The base64 encoded key + * @param iv [String] The base64 encoded IV + * @return [String] The decrypted plaintext in UTF8 + */ + this.decrypt = function(ciphertext, key, iv) { + // convert parameters to WordArrays + var keyWords = sjcl.codec.base64.toBits(key); + var ivWords = sjcl.codec.base64.toBits(iv); + var ciphertextWords = sjcl.codec.base64.toBits(ciphertext); + + var blockCipher = new sjcl.cipher.aes(keyWords); + var decrypted = sjcl.mode.ccm.decrypt(blockCipher, ciphertextWords, ivWords, adata, tlen); + var pt = sjcl.codec.utf8String.fromBits(decrypted); + + return pt; + }; + +}; \ No newline at end of file diff --git a/src/js/crypto/aes-gcm.js b/src/js/crypto/aes-gcm.js new file mode 100644 index 0000000..15b4e9e --- /dev/null +++ b/src/js/crypto/aes-gcm.js @@ -0,0 +1,51 @@ +'use strict'; + +/** + * A Wrapper for SJCL's authenticated AES-GCM encryption + */ +app.crypto.AesGCM = function() { + + var adata = []; // authenticated data (empty by default) + var tlen = 128; // The tag length in bits + + /** + * Encrypt a String using AES-GCM using the provided keysize (e.g. 128, 256) + * @param plaintext [String] The input string in UTF8 + * @param key [String] The base64 encoded key + * @param iv [String] The base64 encoded IV + * @return [String] The base64 encoded ciphertext + */ + this.encrypt = function(plaintext, key, iv) { + // convert parameters to WordArrays + var keyWords = sjcl.codec.base64.toBits(key); + var ivWords = sjcl.codec.base64.toBits(iv); + var plaintextWords = sjcl.codec.utf8String.toBits(plaintext); + + var blockCipher = new sjcl.cipher.aes(keyWords); + var ciphertext = sjcl.mode.gcm.encrypt(blockCipher, plaintextWords, ivWords, adata, tlen); + var ctBase64 = sjcl.codec.base64.fromBits(ciphertext); + + return ctBase64; + }; + + /** + * Decrypt a String using AES-GCM using the provided keysize (e.g. 128, 256) + * @param ciphertext [String] The base64 encoded ciphertext + * @param key [String] The base64 encoded key + * @param iv [String] The base64 encoded IV + * @return [String] The decrypted plaintext in UTF8 + */ + this.decrypt = function(ciphertext, key, iv) { + // convert parameters to WordArrays + var keyWords = sjcl.codec.base64.toBits(key); + var ivWords = sjcl.codec.base64.toBits(iv); + var ciphertextWords = sjcl.codec.base64.toBits(ciphertext); + + var blockCipher = new sjcl.cipher.aes(keyWords); + var decrypted = sjcl.mode.gcm.decrypt(blockCipher, ciphertextWords, ivWords, adata, tlen); + var pt = sjcl.codec.utf8String.fromBits(decrypted); + + return pt; + }; + +}; \ No newline at end of file diff --git a/src/js/crypto/aes-worker.js b/src/js/crypto/aes-worker.js new file mode 100644 index 0000000..697da27 --- /dev/null +++ b/src/js/crypto/aes-worker.js @@ -0,0 +1,41 @@ +'use strict'; + +// import web worker dependencies +importScripts('../../lib/sjcl/sjcl.js'); +importScripts('../../lib/sjcl/bitArray.js'); +importScripts('../../lib/sjcl/codecBase64.js'); +importScripts('../../lib/sjcl/codecString.js'); +importScripts('../../lib/sjcl/aes.js'); +importScripts('../../lib/sjcl/ccm.js'); +importScripts('../app-config.js'); +importScripts('./aes-ccm.js'); + +var AESWORKER = (function () { + + /** + * In the web worker thread context, 'this' and 'self' can be used as a global + * variable namespace similar to the 'window' object in the main thread + */ + self.addEventListener('message', function(e) { + + var args = e.data, + output = null, + aes = new app.crypto.AesCCM(); + + if (args.type === 'encrypt' && args.plaintext && args.key && args.iv) { + // start encryption + output = aes.encrypt(args.plaintext, args.key, args.iv); + + } else if (args.type === 'decrypt' && args.ciphertext && args.key && args.iv) { + // start decryption + output = aes.decrypt(args.ciphertext, args.key, args.iv); + + } else { + throw 'Not all arguments for web worker crypto are defined!'; + } + + // pass output back to main thread + self.postMessage(output); + }, false); + +}()); \ No newline at end of file diff --git a/src/js/crypto/crypto.js b/src/js/crypto/crypto.js new file mode 100644 index 0000000..03f9644 --- /dev/null +++ b/src/js/crypto/crypto.js @@ -0,0 +1,223 @@ +'use strict'; + +/** + * High level crypto api that invokes native crypto (if available) and + * gracefully degrades to JS crypto (if unavailable) + */ +app.crypto.Crypto = function(window, util) { + + var symmetricUserKey, // the user's secret key used to encrypt item-keys + aes = new app.crypto.AesCCM(); // use authenticated AES-CCM mode by default + + /** + * Initializes the crypto modules by fetching the user's + * encrypted secret key from storage and storing it in memory. + */ + this.init = function(emailAddress, password, keySize, ivSize, callback) { + this.emailAddress = emailAddress; + this.keySize = keySize; + this.ivSize = ivSize; + + // derive PBKDF2 from password in web worker thread + this.deriveKey(password, keySize, function(pbkdf2) { + + // fetch user's encrypted secret key from keychain/storage + var keyStore = new app.dao.LocalStorageDAO(window); + var storageId = emailAddress + '_encryptedSymmetricKey'; + var encryptedKey = keyStore.read(storageId); + + // check if key exists + if(!encryptedKey) { + // generate key, encrypt and persist if none exists + symmetricUserKey = util.random(keySize); + var iv = util.random(ivSize); + var key = aes.encrypt(symmetricUserKey, pbkdf2, iv); + keyStore.persist(storageId, { key: key, iv: iv }); + } else { + // decrypt key + symmetricUserKey = aes.decrypt(encryptedKey.key, pbkdf2, encryptedKey.iv); + } + + callback(); + }); + }; + + /** + * Do PBKDF2 key derivation in a WebWorker thread + */ + this.deriveKey = function(password, keySize, callback) { + // check for WebWorker support + if (window.Worker) { + + // init webworker thread + var worker = new Worker(app.config.workerPath + '/crypto/pbkdf2-worker.js'); + + worker.addEventListener('message', function(e) { + // return derived key from the worker + callback(e.data); + }, false); + + // send plaintext data to the worker + worker.postMessage({ password:password, keySize:keySize }); + + } else { + // no WebWorker support... do synchronous call + var pbkdf2 = new app.crypto.PBKDF2(); + var key = pbkdf2.getKey(password, keySize); + callback(key); + } + }; + + // + // En/Decrypts single item + // + + this.aesEncrypt = function(plaintext, key, iv, callback) { + if (window.Worker) { + + var worker = new Worker(app.config.workerPath + '/crypto/aes-worker.js'); + worker.addEventListener('message', function(e) { + callback(e.data); + }, false); + worker.postMessage({ type:'encrypt', plaintext:plaintext, key:key, iv:iv }); + + } else { + var ct = this.aesEncryptSync(plaintext, key, iv); + callback(ct); + } + }; + + this.aesDecrypt = function(ciphertext, key, iv, callback) { + if (window.Worker) { + + var worker = new Worker(app.config.workerPath + '/crypto/aes-worker.js'); + worker.addEventListener('message', function(e) { + callback(e.data); + }, false); + worker.postMessage({ type:'decrypt', ciphertext:ciphertext, key:key, iv:iv }); + + } else { + var pt = this.aesDecryptSync(ciphertext, key, iv); + callback(pt); + } + }; + + this.aesEncryptSync = function(plaintext, key, iv) { + return aes.encrypt(plaintext, key, iv); + }; + + this.aesDecryptSync = function(ciphertext, key, iv) { + return aes.decrypt(ciphertext, key, iv); + }; + + // + // En/Decrypt a list of items with AES in a WebWorker thread + // + + this.aesEncryptList = function(list, callback) { + if (window.Worker) { + + var worker = new Worker(app.config.workerPath + '/crypto/aes-batch-worker.js'); + worker.addEventListener('message', function(e) { + callback(e.data); + }, false); + worker.postMessage({ type:'encrypt', list:list }); + + } else { + var encryptedList = util.encryptList(aes, list); + callback(encryptedList); + } + }; + + this.aesDecryptList = function(list, callback) { + if (window.Worker) { + + var worker = new Worker(app.config.workerPath + '/crypto/aes-batch-worker.js'); + worker.addEventListener('message', function(e) { + callback(e.data); + }, false); + worker.postMessage({ type:'decrypt', list:list }); + + } else { + var decryptedList = util.decryptList(aes, list); + callback(decryptedList); + } + }; + + // + // En/Decrypt something speficially using the user's secret key + // + + this.aesEncryptForUser = function(plaintext, iv, callback) { + var ciphertext = aes.encrypt(plaintext, symmetricUserKey, iv); + callback(ciphertext); + }; + this.aesDecryptForUser = function(ciphertext, iv, callback) { + var decrypted = aes.decrypt(ciphertext, symmetricUserKey, iv); + callback(decrypted); + }; + this.aesEncryptForUserSync = function(plaintext, iv) { + return aes.encrypt(plaintext, symmetricUserKey, iv); + }; + this.aesDecryptForUserSync = function(ciphertext, iv) { + return aes.decrypt(ciphertext, symmetricUserKey, iv); + }; + + this.aesEncryptListForUser = function(list, callback) { + var i, envelope, envelopes = [], self = this; + + // package objects into batchable envelope format + for (i = 0; i < list.length; i++) { + envelope = { + id: list[i].id, + plaintext: list[i], + key: util.random(self.keySize), + iv: util.random(self.ivSize) + }; + envelopes.push(envelope); + } + + // encrypt list + this.aesEncryptList(envelopes, function(encryptedList) { + + // encrypt keys for user + for (i = 0; i < encryptedList.length; i++) { + // process new values + encryptedList[i].itemIV = encryptedList[i].iv; + encryptedList[i].keyIV = util.random(self.ivSize); + encryptedList[i].encryptedKey = self.aesEncryptForUserSync(encryptedList[i].key, encryptedList[i].keyIV); + // delete old ones + delete encryptedList[i].iv; + delete encryptedList[i].key; + } + + callback(encryptedList); + }); + }; + + this.aesDecryptListForUser = function(encryptedList, callback) { + var i, list = []; + + // decrypt keys for user + for (i = 0; i < encryptedList.length; i++) { + // decrypt item key + encryptedList[i].key = this.aesDecryptForUserSync(encryptedList[i].encryptedKey, encryptedList[i].keyIV); + encryptedList[i].iv = encryptedList[i].itemIV; + // delete old values + delete encryptedList[i].keyIV; + delete encryptedList[i].itemIV; + delete encryptedList[i].encryptedKey; + } + + // decrypt list + this.aesDecryptList(encryptedList, function(decryptedList) { + // add plaintext to list + for (i = 0; i < decryptedList.length; i++) { + list.push(decryptedList[i].plaintext); + } + + callback(list); + }); + }; + +}; \ No newline at end of file diff --git a/src/js/crypto/pbkdf2-worker.js b/src/js/crypto/pbkdf2-worker.js new file mode 100644 index 0000000..3351072 --- /dev/null +++ b/src/js/crypto/pbkdf2-worker.js @@ -0,0 +1,36 @@ +'use strict'; + +// import web worker dependencies +importScripts('../../lib/crypto-js/core.js'); +importScripts('../../lib/crypto-js/enc-base64.js'); +importScripts('../../lib/crypto-js/sha1.js'); +importScripts('../../lib/crypto-js/hmac.js'); +importScripts('../../lib/crypto-js/pbkdf2.js'); +importScripts('../app-config.js'); +importScripts('./pbkdf2.js'); + +var PBKDF2WORKER = (function () { + + /** + * In the web worker thread context, 'this' and 'self' can be used as a global + * variable namespace similar to the 'window' object in the main thread + */ + self.addEventListener('message', function(e) { + + var args = e.data, + key = null; + + if (e.data.password && e.data.keySize) { + // start deriving key + var pbkdf2 = new app.crypto.PBKDF2(); + key = pbkdf2.getKey(e.data.password, e.data.keySize); + + } else { + throw 'Not all arguments for web worker crypto are defined!'; + } + + // pass output back to main thread + self.postMessage(key); + }, false); + +}()); \ No newline at end of file diff --git a/src/js/crypto/pbkdf2.js b/src/js/crypto/pbkdf2.js new file mode 100644 index 0000000..3c8ceb9 --- /dev/null +++ b/src/js/crypto/pbkdf2.js @@ -0,0 +1,22 @@ +'use strict'; + +/** + * A Wrapper for Crypto.js's PBKDF2 function + */ +app.crypto.PBKDF2 = function() { + + /** + * PBKDF2-HMAC-SHA1 key derivation with a constant salt and 1000 iterations + * @param password [String] The password in UTF8 + * @param keySize [Number] The key size in bits + * @return [String] The base64 encoded key + */ + this.getKey = function(password, keySize) { + var salt = CryptoJS.enc.Base64.parse("vbhmLjC+Ub6MSbhS6/CkOwxB25wvwRkSLP2DzDtYb+4="); // from random 256 bit value + var key = CryptoJS.PBKDF2(password, salt, { keySize: keySize/32, iterations: 1000 }); + var keyBase64 = CryptoJS.enc.Base64.stringify(key); + + return keyBase64; + }; + +}; \ No newline at end of file diff --git a/src/js/crypto/pgp.js b/src/js/crypto/pgp.js new file mode 100644 index 0000000..b84884c --- /dev/null +++ b/src/js/crypto/pgp.js @@ -0,0 +1,322 @@ +'use strict'; + +/** + * A wrapper for asymmetric OpenPGP encryption logic + */ +app.crypto.PGP = function(window, openpgp, util, server) { + + var self = this, + privateKey, // user's private key + publicKey, // user's public key + passphrase; // user's passphrase used for decryption + + openpgp.init(); // initialize OpenPGP.js + + // + // Key management + // + + /** + * Check if user already has a public key on the server and if not, + * generate a new keypait for the user + */ + self.initKeyPair = function(loginInfo, callback, displayCallback, finishCallback) { + // check if user already has a keypair in local storage + if (loginInfo.publicKeyId) { + // decode base 64 key ID + var keyId = window.atob(loginInfo.publicKeyId); + // read the user's keys from local storage + callback(keyId); + + } else { + // user has no key pair yet + displayCallback(function() { + // generate new key pair with 2048 bit RSA keys + var keys = self.generateKeys(2048); + var keyId = keys.privateKey.getKeyId(); + + // display finish + finishCallback(keyId); + // read the user's keys from local storage + callback(keyId); + }); + } + }; + + /** + * Generate a key pair for the user + * @param numBits [int] number of bits for the key creation. (should be 1024+, generally) + * @email [string] user's email address + * @pass [string] a passphrase used to protect the private key + */ + self.generateKeys = function(numBits) { + // check passphrase + if (!passphrase && passphrase !== '') { throw 'No passphrase set!'; } + + var userId = 'SafeWith.me User '; + var keys = openpgp.generate_key_pair(1, numBits, userId, passphrase); // keytype 1=RSA + + self.importKeys(keys.publicKeyArmored, keys.privateKeyArmored); + + return keys; + }; + + /** + * Import the users key into the HTML5 local storage + */ + self.importKeys = function(publicKeyArmored, privateKeyArmored) { + // check passphrase + if (!passphrase && passphrase !== '') { throw 'No passphrase set!'; } + + // store keys in html5 local storage + openpgp.keyring.importPrivateKey(privateKeyArmored, passphrase); + openpgp.keyring.importPublicKey(publicKeyArmored); + openpgp.keyring.store(); + }; + + /** + * Export the keys by using the HTML5 FileWriter + */ + self.exportKeys = function(callback) { + // build blob + var buf = util.binStr2ArrBuf(publicKey.armored + privateKey.armored); + var blob = util.arrBuf2Blob(buf, 'text/plain'); + // create url + util.createUrl(undefined, blob, callback); + }; + + /** + * Read the users keys from the browser's HTML5 local storage + * @email [string] user's email address + * @keyId [string] the public key ID in unicode (not base 64) + */ + self.readKeys = function(keyId, callback, errorCallback) { + // read keys from keyring (local storage) + var privKeyQuery = openpgp.keyring.getPrivateKeyForKeyId(keyId)[0]; + if (privKeyQuery) { + privateKey = privKeyQuery.key; + } + publicKey = openpgp.keyring.getPublicKeysForKeyId(keyId)[0]; + + // check keys + if (!publicKey || !privateKey || (publicKey.keyId !== privateKey.keyId)) { + // no amtching keys found in the key store + return false; + } + + // read passphrase from local storage if no passphrase is specified + if(!passphrase && passphrase !== '') { + passphrase = window.sessionStorage.getItem(window.btoa(keyId) + 'Passphrase'); + } + + // check passphrase + if (!passphrase && passphrase !== '') { + return false; + } + // do test encrypt/decrypt to verify passphrase + try { + var testCt = self.asymmetricEncrypt('test'); + self.asymmetricDecrypt(testCt); + } catch (e) { + return false; + } + + return true; + }; + + /** + * Generate a new key pair for the user and persist the public key on the server + */ + self.syncKeysToServer = function(email, callback) { + // base64 encode key ID + var keyId = publicKey.keyId; + var encodedKeyId = window.btoa(keyId); + var pubKey = { + keyId : encodedKeyId, + ownerEmail : email, + asciiArmored : publicKey.armored + }; + var privKey = { + keyId : encodedKeyId, + ownerEmail : email, + asciiArmored : privateKey.armored + }; + + var jsonPublicKey = JSON.stringify(pubKey); + var jsonPrivateKey = JSON.stringify(privKey); + + // first upload public key + server.xhr({ + type: 'POST', + uri: '/ws/publicKeys', + contentType: 'application/json', + expected: 201, + body: jsonPublicKey, + success: function(resp) { + uploadPrivateKeys(); + }, + error: function(e) { + // if server is not available, just continue + // and read the user's keys from local storage + console.log('Server unavailable: keys were not synced to server!'); + callback(keyId); + } + }); + + // then upload private key + function uploadPrivateKeys() { + server.xhr({ + type: 'POST', + uri: '/ws/privateKeys', + contentType: 'application/json', + expected: 201, + body: jsonPrivateKey, + success: function(resp) { + // read the user's keys from local storage + callback(keyId); + } + }); + } + }; + + /** + * Get the keypair from the server and import them into localstorage + */ + self.fetchKeys = function(email, keyId, callback, errCallback) { + var base64Key = window.btoa(keyId); + var encodedKeyId = encodeURIComponent(base64Key); + + // get public key + server.xhr({ + type: 'GET', + uri: '/ws/publicKeys?keyId=' + encodedKeyId, + expected: 200, + success: function(pubKey) { + getPrivateKey(pubKey); + }, + error: function(e) { + // if server is not available, just continue + console.log('Server unavailable: keys could not be fetched from server!'); + errCallback(e); + } + }); + + // get private key + function getPrivateKey(pubKey) { + server.xhr({ + type: 'GET', + uri: '/ws/privateKeys?keyId=' + encodedKeyId, + expected: 200, + success: function(privKey) { + // import keys + self.importKeys(pubKey.asciiArmored, privKey.asciiArmored, email); + callback({ privateKey:privKey, publicKey:pubKey }); + } + }); + } + }; + + /** + * Get the current user's private key + */ + self.getPrivateKey = function() { + if (!privateKey) { return undefined; } + return privateKey.armored; + }; + + /** + * Get the current user's public key + */ + self.getPublicKey = function() { + if (!publicKey) { return undefined; } + return publicKey.armored; + }; + + /** + * Get the current user's base64 encoded public key ID + */ + self.getPublicKeyIdBase64 = function() { + return window.btoa(publicKey.keyId); + }; + + /** + * Get the user's passphrase for decrypting their private key + */ + self.setPassphrase = function(pass) { + passphrase = pass; + }; + + /** + * Store the passphrase for the current session + */ + self.rememberPassphrase = function(keyId) { + var base64KeyId = window.btoa(keyId); + window.sessionStorage.setItem(base64KeyId + 'Passphrase', passphrase); + }; + + // + // Asymmetric crypto + // + + /** + * Encrypt a string + * @param customPubKey [PublicKey] (optional) another user's public key for sharing + */ + self.asymmetricEncrypt = function(plaintext, customPubKey) { + var pub_key = null; + if (customPubKey) { + // use a custom set public for e.g. or sharing + pub_key = openpgp.read_publicKey(customPubKey); + } else { + // use the user's local public key + pub_key = openpgp.read_publicKey(publicKey.armored); + } + + var ciphertext = openpgp.write_encrypted_message(pub_key, window.btoa(plaintext)); + return ciphertext; + }; + + /** + * Decrypt a string + */ + self.asymmetricDecrypt = function(ciphertext) { + var priv_key = openpgp.read_privateKey(privateKey.armored); + + var msg = openpgp.read_message(ciphertext); + var keymat = null; + var sesskey = null; + + // Find the private (sub)key for the session key of the message + for (var i = 0; i< msg[0].sessionKeys.length; i++) { + if (priv_key[0].privateKeyPacket.publicKey.getKeyId() == msg[0].sessionKeys[i].keyId.bytes) { + keymat = { key: priv_key[0], keymaterial: priv_key[0].privateKeyPacket}; + sesskey = msg[0].sessionKeys[i]; + break; + } + for (var j = 0; j < priv_key[0].subKeys.length; j++) { + if (priv_key[0].subKeys[j].publicKey.getKeyId() == msg[0].sessionKeys[i].keyId.bytes) { + keymat = { key: priv_key[0], keymaterial: priv_key[0].subKeys[j]}; + sesskey = msg[0].sessionKeys[i]; + break; + } + } + } + if (keymat != null) { + if (!keymat.keymaterial.decryptSecretMPIs(passphrase)) { + throw "Passphrase for secrect key was incorrect!"; + } + + var decrypted = msg[0].decrypt(keymat, sesskey); + return window.atob(decrypted); + + } else { + throw "No private key found!"; + } + }; + +}; + +/** + * This function needs to be implemented, since it is used by the openpgp utils + */ +function showMessages(str) {} \ No newline at end of file diff --git a/src/js/crypto/util.js b/src/js/crypto/util.js new file mode 100644 index 0000000..a5b8660 --- /dev/null +++ b/src/js/crypto/util.js @@ -0,0 +1,145 @@ +'use strict'; + +app.crypto.Util = function(window, uuid) { + + /** + * Generates a new RFC 4122 version 4 compliant random UUID + */ + this.UUID = function() { + return uuid.v4(); + }; + + /** + * Generates a cryptographically secure random base64-encoded key or IV + * @param keySize [Number] The size of the key in bits (e.g. 128, 256) + * @return [String] The base64 encoded key/IV + */ + this.random = function(keySize) { + var keyBase64, keyBuf; + + if (window.crypto && window.crypto.getRandomValues) { + keyBuf = new Uint8Array(keySize / 8); + window.crypto.getRandomValues(keyBuf); + keyBase64 = window.btoa(this.uint8Arr2BinStr(keyBuf)); + } else { + sjcl.random.addEntropy((new Date()).valueOf(), 2, "calltime"); + keyBuf = sjcl.random.randomWords(keySize / 32, 0); + keyBase64 = sjcl.codec.base64.fromBits(keyBuf); + } + + return keyBase64; + }; + + /** + * Encrypt a list of items + * @param aes [Object] The object implementing the aes mode + * @list list [Array] The list of items to encrypt + */ + this.encryptList = function(aes, list) { + var i, json, ct, outList = []; + + for (i = 0; i < list.length; i++) { + // stringify to JSON before encryption + json = JSON.stringify(list[i].plaintext); + ct = aes.encrypt(json, list[i].key, list[i].iv); + outList.push({ id:list[i].id, ciphertext:ct, key:list[i].key, iv:list[i].iv }); + } + + return outList; + }; + + /** + * Decrypt a list of items + * @param aes [Object] The object implementing the aes mode + * @list list [Array] The list of items to decrypt + */ + this.decryptList = function(aes, list) { + var i, json, pt, outList = []; + + for (i = 0; i < list.length; i++) { + // decrypt JSON and parse to object literal + json = aes.decrypt(list[i].ciphertext, list[i].key, list[i].iv); + pt = JSON.parse(json); + outList.push({ id:list[i].id, plaintext:pt, key:list[i].key, iv:list[i].iv }); + } + + return outList; + }; + + /** + * Converts a binary String (e.g. from the FileReader Api) to an ArrayBuffer + * @param str [String] a binary string with integer values (0..255) per character + * @return [ArrayBuffer] + */ + this.binStr2ArrBuf = function(str) { + var b = new ArrayBuffer(str.length); + var buf = new Uint8Array(b); + + for(var i = 0; i < b.byteLength; i++){ + buf[i] = str.charCodeAt(i); + } + + return b; + }; + + /** + * Creates a Blob from an ArrayBuffer using the BlobBuilder Api + * @param str [String] a binary string with integer values (0..255) per character + * @return [ArrayBuffer] either a data url or a filesystem url + */ + this.arrBuf2Blob = function(buf, mimeType) { + var b = new Uint8Array(buf); + var blob = new Blob([b], {type: mimeType}); + + return blob; + }; + + /** + * Creates a binary String from a Blob using the FileReader Api + * @param blob [Blob/File] a blob containing the the binary data + * @return [String] a binary string with integer values (0..255) per character + */ + this.blob2BinStr = function(blob, callback) { + var reader = new FileReader(); + + reader.onload = function(event) { + callback(event.target.result); + }; + + reader.readAsBinaryString(blob); + }; + + /** + * Converts an ArrayBuffer to a binary String. This is a slower alternative to + * conversion with arrBuf2Blob -> blob2BinStr, since these use native apis, + * but it can be used on browsers without the BlodBuilder Api + * @param buf [ArrayBuffer] + * @return [String] a binary string with integer values (0..255) per character + */ + this.arrBuf2BinStr = function(buf) { + var b = new Uint8Array(buf); + var str = ''; + + for(var i = 0; i < b.byteLength; i++){ + str += String.fromCharCode(b[i]); + } + + return str; + }; + + /** + * Converts a UInt8Array to a binary String. + * @param buf [UInt8Array] + * @return [String] a binary string with integer values (0..255) per character + */ + this.uint8Arr2BinStr = function(buf) { + var str = ''; + + for(var i = 0; i < buf.byteLength; i++){ + str += String.fromCharCode(buf[i]); + } + + return str; + }; + +}; \ No newline at end of file diff --git a/src/js/dao/cloudstorage-dao.js b/src/js/dao/cloudstorage-dao.js new file mode 100644 index 0000000..c53bbe2 --- /dev/null +++ b/src/js/dao/cloudstorage-dao.js @@ -0,0 +1,110 @@ +'use strict'; + +/** + * High level storage api for handling syncing of data to + * and from the cloud. + */ +app.dao.CloudStorage = function(window, $) { + + /** + * Lists the encrypted items + * @param type [String] The type of item e.g. 'email' + * @param offset [Number] The offset of items to fetch (0 is the last stored item) + * @param num [Number] The number of items to fetch (null means fetch all) + */ + this.listEncryptedItems = function(type, emailAddress, folderName, callback) { + var folder, uri, self = this; + + // fetch encrypted json objects from cloud service + uri = app.config.cloudUrl + '/' + type + '/user/' + emailAddress + '/folder/' + folderName; + $.ajax({ + url: uri, + type: 'GET', + dataType: 'json', + success: function(list) { + callback(list); + }, + error: function(xhr, textStatus, err) { + callback({error: err, status: textStatus}); + } + }); + }; + + /** + * Persist encrypted user key to cloud service + */ + this.persistUserSecretKey = function(emailAddress, callback) { + // fetch user's encrypted secret key from keychain/storage + var keyStore = new app.dao.LocalStorageDAO(window); + var storageId = emailAddress + '_encryptedSymmetricKey'; + var encryptedKey = keyStore.read(storageId); + + var payload = { + userId: emailAddress, + encryptedKey: encryptedKey.key, + keyIV: encryptedKey.iv + }; + + var uri = app.config.cloudUrl + '/keys/user/' + emailAddress; + $.ajax({ + url: uri, + type: 'PUT', + data: JSON.stringify(payload), + contentType: 'application/json', + success: function() { + callback(); + }, + error: function(xhr, textStatus, err) { + callback({error: err, status: textStatus}); + } + }); + }; + + /** + * Get encrypted user key from cloud service + */ + this.getUserSecretKey = function(emailAddress, callback, replaceCallback) { + // fetch user's encrypted secret key from keychain/storage + var self = this; + var keyStore = new app.dao.LocalStorageDAO(window); + var storageId = emailAddress + '_encryptedSymmetricKey'; + var storedKey = keyStore.read(storageId); + + var uri = app.config.cloudUrl + '/keys/user/' + emailAddress; + $.ajax({ + url: uri, + type: 'GET', + dataType: 'json', + success: function(fetchedKey) { + if ((!storedKey || !storedKey.key) && fetchedKey && fetchedKey.encryptedKey && fetchedKey.keyIV) { + // no local key... persist fetched key + keyStore.persist(storageId, { key: fetchedKey.encryptedKey, iv: fetchedKey.keyIV }); + replaceCallback(); + + } else if (storedKey && fetchedKey && (storedKey.key !== fetchedKey.encryptedKey || storedKey.iv !== fetchedKey.keyIV)){ + // local and fetched keys are not equal + if (confirm('Swap local key?')) { + // replace local key with fetched key + keyStore.persist(storageId, { key: fetchedKey.encryptedKey, iv: fetchedKey.keyIV }); + replaceCallback(); + } else { + if (confirm('Swap cloud key?')) { + // upload local key to cloud + self.persistUserSecretKey(emailAddress, callback); + } else { + callback({error: 'err', status: 'Key not synced!'}); + } + } + + } else { + // local and cloud keys are equal or cloud key is null + callback(); + } + }, + error: function(xhr, textStatus, err) { + callback({error: err, status: textStatus}); + } + }); + }; + +}; \ No newline at end of file diff --git a/src/js/dao/devicestorage.js b/src/js/dao/devicestorage.js new file mode 100644 index 0000000..32d6f07 --- /dev/null +++ b/src/js/dao/devicestorage.js @@ -0,0 +1,54 @@ +'use strict'; + +/** + * High level storage api that handles all persistence on the device. If + * SQLcipher/SQLite is available, all data is securely persisted there, + * through transparent encryption. If not, the crypto API is + * used to encrypt data on the fly before persisting via a JSON store. + */ +app.dao.DeviceStorage = function(crypto, jsonDao, sqlcipherDao) { + + /** + * Stores a list of encrypted items in the object store + * @param list [Array] The list of items to be persisted + * @param type [String] The type of item to be persisted e.g. 'email' + */ + this.storeEcryptedList = function(list, type, callback) { + var i, items = []; + + // format items for batch storing in dao + for (i = 0; i < list.length; i++) { + items.push({ key:crypto.emailAddress + '_' + type + '_' + list[i].id, object:list[i] }); + } + + jsonDao.batch(items, function() { + callback(); + }); + }; + + /** + * Decrypts the stored items of a given type and returns them + * @param type [String] The type of item e.g. 'email' + * @param offset [Number] The offset of items to fetch (0 is the last stored item) + * @param num [Number] The number of items to fetch (null means fetch all) + */ + this.listItems = function(type, offset, num, callback) { + + // fetch all items of a certain type from the data-store + jsonDao.list(crypto.emailAddress + '_' + type, offset, num, function(encryptedList) { + + // decrypt list + crypto.aesDecryptListForUser(encryptedList, function(decryptedList) { + callback(decryptedList); + }); + }); + }; + + /** + * Clear the whole device data-store + */ + this.clear = function(callback) { + jsonDao.clear(callback); + }; + +}; \ No newline at end of file diff --git a/src/js/dao/email-dao.js b/src/js/dao/email-dao.js new file mode 100644 index 0000000..0e0f045 --- /dev/null +++ b/src/js/dao/email-dao.js @@ -0,0 +1,110 @@ +'use strict'; + +/** + * A high-level Data-Access Api for handling Email synchronization + * between the cloud service and the device's local storage + */ +app.dao.EmailDAO = function(_, crypto, devicestorage, cloudstorage) { + + /** + * Inits all dependencies + */ + this.init = function(account, password, callback) { + this.account = account; + + // sync user's cloud key with local storage + cloudstorage.getUserSecretKey(account.get('emailAddress'), function(err) { + if (err) { + alert(err.status); + return; + } + // init crypto + initCrypto(); + + }, function() { + // replaced local key with cloud key... whipe local storage + devicestorage.clear(function() { + initCrypto(); + }); + }); + + function initCrypto() { + crypto.init(account.get('emailAddress'), password, account.get('symKeySize'), account.get('symIvSize'), function() { + callback(); + }); + } + }; + + /** + * Fetch an email with the following id + */ + this.getItem = function(folderName, itemId) { + var folder = this.account.get('folders').where({name: folderName})[0]; + var mail = _.find(folder.get('items').models, function(email) { + return email.id+'' === itemId+''; + }); + return mail; + }; + + /** + * Fetch a list of emails from the device's local storage + * @param offset [Number] The offset of items to fetch (0 is the last stored item) + * @param num [Number] The number of items to fetch (null means fetch all) + */ + this.listItems = function(folderName, offset, num, callback) { + var model, collection, folder, self = this; + + // check if items are in memory already (account.folders model) + folder = this.account.get('folders').where({name: folderName})[0]; + + if (!folder) { + // get items from storage + devicestorage.listItems('email_' + folderName ,offset ,num, function(decryptedList) { + // parse to backbone model collection + collection = new app.model.EmailCollection(decryptedList); + + // cache collection in folder memory + if (decryptedList.length > 0) { + folder = new app.model.Folder({name: folderName}); + folder.set('items', collection); + self.account.get('folders').add(folder); + } + + callback(collection); + }); + + } else { + // read items from memory + collection = folder.get('items'); + callback(collection); + } + }; + + /** + * Synchronize a folder's items from the cloud to the device-storage + * @param folderName [String] The name of the folder e.g. 'inbox' + */ + this.syncFromCloud = function(folderName, callback) { + var folder, self = this; + + cloudstorage.listEncryptedItems('email', this.account.get('emailAddress'), folderName, function(res) { + if (res.status) { + callback(res); // error + return; + } + + // TODO: remove old folder items from devicestorage + + // persist encrypted list in device storage + devicestorage.storeEcryptedList(res, 'email_' + folderName, function() { + // remove cached folder in account model + folder = self.account.get('folders').where({name: folderName})[0]; + if (folder) { + self.account.get('folders').remove(folder); + } + callback(); + }); + }); + }; + +}; \ No newline at end of file diff --git a/src/js/dao/lawnchair-dao.js b/src/js/dao/lawnchair-dao.js new file mode 100644 index 0000000..17d2778 --- /dev/null +++ b/src/js/dao/lawnchair-dao.js @@ -0,0 +1,105 @@ +'use strict'; + +/** + * Handles generic caching of JSON objects in a lawnchair adapter + */ +app.dao.LawnchairDAO = function(window) { + + /** + * Create or update an object + */ + this.persist = function(key, object, callback) { + Lawnchair(function() { + this.save({ key:key, object:object }, callback); + }); + }; + + /** + * Persist a bunch of items at once + */ + this.batch = function(list, callback) { + Lawnchair(function() { + this.batch(list, callback); + }); + }; + + /** + * Read a single item by its key + */ + this.read = function(key, callback) { + Lawnchair(function() { + this.get(key, function(o) { + if (o) { + callback(o.object); + } else { + callback(null); + } + }); + }); + }; + + /** + * List all the items of a certain type + * @param type [String] The type of item e.g. 'email' + * @param offset [Number] The offset of items to fetch (0 is the last stored item) + * @param num [Number] The number of items to fetch (null means fetch all) + */ + this.list = function(type, offset, num, callback) { + var i, list = [], matchingKeys =[]; + + Lawnchair(function() { + var self = this; + + // get all keys + this.keys(function(keys) { + + // check if key begins with type + for (i = 0; i < keys.length; i++) { + if (keys[i].indexOf(type) === 0) { + matchingKeys.push(keys[i]); + } + } + + // if num is null, list all items + num = (num !== null) ? num : matchingKeys.length; + + // set window of items to fetch + if (offset + num < matchingKeys.length) { + matchingKeys = matchingKeys.splice(matchingKeys.length - offset - num, num); + } else if (offset + num >= matchingKeys.length && offset < matchingKeys.length) { + matchingKeys = matchingKeys.splice(0, matchingKeys.length - offset); + } else { + matchingKeys = []; + } + + // get matching objects from data-store + self.get(matchingKeys, function(matchingList) { + for (i = 0; i < matchingList.length; i++) { + list.push(matchingList[i].object); + } + + callback(list); + }); + }); + }); + }; + + /** + * Removes an object liter from local storage by its key (delete) + */ + this.remove = function(key, callback) { + Lawnchair(function() { + this.remove(key, callback); + }); + }; + + /** + * Clears the whole local storage cache + */ + this.clear = function(callback) { + Lawnchair(function() { + this.nuke(callback); + }); + }; + +}; \ No newline at end of file diff --git a/src/js/dao/localstorage-dao.js b/src/js/dao/localstorage-dao.js new file mode 100644 index 0000000..52ffe8b --- /dev/null +++ b/src/js/dao/localstorage-dao.js @@ -0,0 +1,56 @@ +'use strict'; + +/** + * Handles generic caching of JSON objects in LocalStorage + */ +app.dao.LocalStorageDAO = function(window) { + + /** + * Stringifies an object literal to JSON and perists it + */ + this.persist = function(key, object) { + var json = JSON.stringify(object); + window.localStorage.setItem(key, json); + }; + + /** + * Fetches a json string from local storage by its key and parses it to an object literal + */ + this.read = function(key) { + var json = window.localStorage.getItem(key); + return JSON.parse(json); + }; + + /** + * List all the items of a certain type in local storage + * @param type [String] The type of item e.g. 'email' + */ + this.list = function(type) { + var i, key, json, list = []; + + for (i = 0; i < window.localStorage.length; i++) { + key = window.localStorage.key(i); + if (key.indexOf(type) === 0) { + json = window.localStorage.getItem(key); + list.push(JSON.parse(json)); + } + } + + return list; + }; + + /** + * Removes an object liter from local storage by its key (delete) + */ + this.remove = function(key) { + window.localStorage.removeItem(key); + }; + + /** + * Clears the whole local storage cache + */ + this.clear = function() { + window.localStorage.clear(); + }; + +}; \ No newline at end of file diff --git a/src/js/jqm-config.js b/src/js/jqm-config.js new file mode 100644 index 0000000..0a7723c --- /dev/null +++ b/src/js/jqm-config.js @@ -0,0 +1,15 @@ +'use strict'; + +$(document).on('mobileinit', function () { + console.log('mobileinit'); + $.mobile.ajaxEnabled = false; + $.mobile.linkBindingEnabled = false; + $.mobile.hashListeningEnabled = false; + $.mobile.pushStateEnabled = false; + $.mobile.defaultPageTransition = 'none'; + + // Remove page from DOM when it's being replaced + $(document).on('pagehide', 'div[data-role="page"]', function (event, ui) { + $(event.currentTarget).remove(); + }); +}); \ No newline at end of file diff --git a/src/js/loader.js b/src/js/loader.js new file mode 100644 index 0000000..448ae7a --- /dev/null +++ b/src/js/loader.js @@ -0,0 +1,69 @@ +'use strict'; + +/** + * The Template Loader. Used to asynchronously load templates located in separate .html files + */ +app.util.tpl = { + + // Hash of preloaded templates for the app + templates:{}, + + // Recursively pre-load all the templates for the app. + loadTemplates:function (names, callback) { + var that = this; + + var loadTemplate = function (index) { + var name = names[index]; + console.log('Loading template: ' + name); + $.get('tpl/' + name + '.html', function (data) { + that.templates[name] = data; + index++; + if (index < names.length) { + loadTemplate(index); + } else { + callback(); + } + }); + }; + + loadTemplate(0); + }, + + // Get template by name from hash of preloaded templates + get:function (name) { + return this.templates[name]; + } + +}; + +/** + * Load templates and start the application + */ +$(document).ready(function() { + // are we running in native app or in browser? + var isBrowser = false; + if(document.URL.indexOf("http://") !== -1) { + isBrowser = true; + } + + if(!isBrowser) { + document.addEventListener("deviceready", onDeviceReady, false); + } else { + onDeviceReady(); + } + + function onDeviceReady() { + console.log('Starting in Browser: ' + isBrowser); + app.util.tpl.loadTemplates([ + 'login', + 'compose', + 'folderlist', + 'messagelist', + 'messagelistitem', + 'read' + ], function () { + var router = new AppRouter(); + Backbone.history.start(); + }); + }; +}); \ No newline at end of file diff --git a/src/js/model/account-model.js b/src/js/model/account-model.js new file mode 100644 index 0000000..ae55404 --- /dev/null +++ b/src/js/model/account-model.js @@ -0,0 +1,25 @@ +'use strict'; + +app.model.Account = Backbone.Model.extend({ + + defaults: { + emailAddress: null, + symKeySize: null, + symIvSize: null, + folders: null + }, + + initialize: function () { + this.set('folders', new app.model.FolderCollection()); + } + +}); + +app.model.AccountCollection = Backbone.Collection.extend({ + + model: app.model.Account, + + findByName: function (key) { + } + +}); \ No newline at end of file diff --git a/src/js/model/email-model.js b/src/js/model/email-model.js new file mode 100644 index 0000000..c884535 --- /dev/null +++ b/src/js/model/email-model.js @@ -0,0 +1,28 @@ +'use strict'; + +app.model.Email = Backbone.Model.extend({ + + defaults: { + id: null, + from: null, + to: [], + cc: [], + bcc: [], + subject: null, + body: null, + sentDate: null + }, + + initialize: function () { + } + +}); + +app.model.EmailCollection = Backbone.Collection.extend({ + + model: app.model.Email, + + findByName: function (key) { + } + +}); \ No newline at end of file diff --git a/src/js/model/folder-model.js b/src/js/model/folder-model.js new file mode 100644 index 0000000..097adaf --- /dev/null +++ b/src/js/model/folder-model.js @@ -0,0 +1,22 @@ +'use strict'; + +app.model.Folder = Backbone.Model.extend({ + + defaults: { + name: null, + items: null + }, + + initialize: function () { + } + +}); + +app.model.FolderCollection = Backbone.Collection.extend({ + + model: app.model.Folder, + + findByName: function (key) { + } + +}); \ No newline at end of file diff --git a/src/js/view/accounts-view.js b/src/js/view/accounts-view.js new file mode 100644 index 0000000..abb1b17 --- /dev/null +++ b/src/js/view/accounts-view.js @@ -0,0 +1,13 @@ +'use strict'; + +app.view.AccountsView = Backbone.View.extend({ + + initialize:function () { + this.template = _.template(app.util.tpl.get('accounts')); + }, + + render:function (eventName) { + $(this.el).html(this.template()); + return this; + } +}); \ No newline at end of file diff --git a/src/js/view/compose-view.js b/src/js/view/compose-view.js new file mode 100644 index 0000000..b22359d --- /dev/null +++ b/src/js/view/compose-view.js @@ -0,0 +1,13 @@ +'use strict'; + +app.view.ComposeView = Backbone.View.extend({ + + initialize:function () { + this.template = _.template(app.util.tpl.get('compose')); + }, + + render:function (eventName) { + $(this.el).html(this.template()); + return this; + } +}); \ No newline at end of file diff --git a/src/js/view/folderlist-view.js b/src/js/view/folderlist-view.js new file mode 100644 index 0000000..fa05e9b --- /dev/null +++ b/src/js/view/folderlist-view.js @@ -0,0 +1,13 @@ +'use strict'; + +app.view.FolderListView = Backbone.View.extend({ + + initialize:function () { + this.template = _.template(app.util.tpl.get('folderlist')); + }, + + render:function (eventName) { + $(this.el).html(this.template(this.options)); + return this; + } +}); \ No newline at end of file diff --git a/src/js/view/login-view.js b/src/js/view/login-view.js new file mode 100644 index 0000000..551ce4d --- /dev/null +++ b/src/js/view/login-view.js @@ -0,0 +1,41 @@ +'use strict'; + +app.view.LoginView = Backbone.View.extend({ + + initialize: function(args) { + this.template = _.template(app.util.tpl.get('login')); + this.dao = args.dao; + }, + + render: function(eventName) { + var self = this, page = $(this.el); + + page.html(this.template()); + page.attr('data-theme', 'a'); + + page.find('#loginBtn').on('vmousedown', function() { + self.login(); + }); + + return this; + }, + + login: function() { + var page = $(this.el), + userId = page.find('#userId').val(), + password = page.find('#password').val(); + + var account = new app.model.Account({ + emailAddress: userId, + symKeySize: app.config.symKeySize, + symIvSize: app.config.symIvSize + }); + + // show loading msg during init + $.mobile.loading('show', { text: 'Unlocking...', textVisible: true, theme: 'c' }); + this.dao.init(account, password, function() { + $.mobile.loading('hide'); + window.location = '#accounts/' + account.get('emailAddress') + '/folders'; + }); + } +}); \ No newline at end of file diff --git a/src/js/view/messagelist-view.js b/src/js/view/messagelist-view.js new file mode 100644 index 0000000..56f7ad0 --- /dev/null +++ b/src/js/view/messagelist-view.js @@ -0,0 +1,64 @@ +'use strict'; + +app.view.MessageListView = Backbone.View.extend({ + + initialize: function(args) { + this.template = _.template(app.util.tpl.get('messagelist')); + this.folder = args.folder; + this.dao = args.dao; + }, + + render: function(eventName) { + var self = this, + page = $(this.el); + + page.html(this.template(this.options)); + + page.find('#refreshBtn').on('vmousedown', function() { + self.syncFolder(); + }); + + return this; + }, + + /** + * Synchronize emails from the cloud + */ + syncFolder: function() { + var self = this; + + $.mobile.loading('show', { text: 'Syncing...', textVisible: true }); + // sync from cloud + this.dao.syncFromCloud(this.folder, function() { + $.mobile.loading('hide'); + // read local storage and add to list view + self.loadItems(); + }); + }, + + /** + * Load items from local storage + */ + loadItems: function() { + var self = this, + page = $(this.el), + list = page.find('#message-list'), + listItemArgs; + + $.mobile.loading('show', { text: 'decrypting...', textVisible: true }); + this.dao.listItems(this.folder, 0, 20, function(collection) { + // clear list + list.html(''); + + _.each(collection.models, function(email) { + listItemArgs = {account: self.options.account, folder: self.folder, model: email}; + list.append(new app.view.MessageListItemView(listItemArgs).render().el); + }, this); + + // refresh list view + list.listview('refresh'); + $.mobile.loading('hide'); + }); + } + +}); \ No newline at end of file diff --git a/src/js/view/messagelistitem-view.js b/src/js/view/messagelistitem-view.js new file mode 100644 index 0000000..8347d38 --- /dev/null +++ b/src/js/view/messagelistitem-view.js @@ -0,0 +1,20 @@ +'use strict'; + +app.view.MessageListItemView = Backbone.View.extend({ + + tagName:"li", + + initialize:function () { + this.template = _.template(app.util.tpl.get('messagelistitem')); + }, + + render:function (eventName) { + var params = this.model.toJSON(); + params.account = this.options.account; + params.folder = this.options.folder; + params.id = encodeURIComponent(params.id); + + $(this.el).html(this.template(params)); + return this; + } +}); \ No newline at end of file diff --git a/src/js/view/read-view.js b/src/js/view/read-view.js new file mode 100644 index 0000000..25f6b70 --- /dev/null +++ b/src/js/view/read-view.js @@ -0,0 +1,31 @@ +'use strict'; + +app.view.ReadView = Backbone.View.extend({ + + initialize: function(args) { + this.template = _.template(app.util.tpl.get('read')); + this.model = args.dao.getItem(args.folder, args.messageId); + }, + + render: function(eventName) { + $(this.el).html(this.template(this.model.toJSON())); + return this; + }, + + renderBody: function() { + var emailBody = this.model.get('body'), + iframe = $('#idMailContent'), + iframeDoc = iframe[0].contentDocument || iframe[0].contentWindow.document; + + iframe.load(function() { + // resize + var newheight = iframeDoc.body.scrollHeight; + var newwidth = iframeDoc.body.scrollWidth; + iframe[0].height = (newheight) + 'px'; + }); + + iframeDoc.write(emailBody); + iframeDoc.close(); + } + +}); \ No newline at end of file diff --git a/src/lib/SQLitePlugin.js b/src/lib/SQLitePlugin.js new file mode 100644 index 0000000..cc1bb98 --- /dev/null +++ b/src/lib/SQLitePlugin.js @@ -0,0 +1,309 @@ +// SQLitePlugin.js: originally written in CoffeeScript, +// Copyright (C) 2011 Joe Noon +// +// To regenerate from CoffeeScript: +// coffee -p SQLitePlugin-orig.coffee > SQLitePlugin.js +// (and try to keep the comments by hand) +// +// NOTE: this Javascript version is now leading, however +// SQLitePlugin-orig.coffee is still available for review. +// +// To convert back to CoffeeScript: +// js2coffee SQLitePlugin.js > SQLitePlugin-new.coffee +// (will lose the comments) + +if (!window.Cordova) window.Cordova = window.cordova; + +(function() { + var SQLitePlugin, SQLitePluginTransaction, callbacks, cbref, counter, getOptions, root, exec; + root = this; + callbacks = {}; + counter = 0; + cbref = function(hash) { + var f; + f = "cb" + (counter += 1); + callbacks[f] = hash; + return f; + }; + + exec = function(s, o){ + if (root.sqlitePlugin.DEBUG){ + console.log(s + ": " + JSON.stringify(o)); + } + Cordova.exec(s, o); + }; + + getOptions = function(opts, success, error) { + var cb, has_cbs; + cb = {}; + has_cbs = false; + if (typeof success === "function") { + has_cbs = true; + cb.success = success; + } + if (typeof error === "function") { + has_cbs = true; + cb.error = error; + } + if (has_cbs) opts.callback = cbref(cb); + return opts; + }; + + SQLitePlugin = function(dbargs, openSuccess, openError) { + if (!dbargs || !dbargs['name']) { + throw new Error("Cannot create a SQLitePlugin instance without a db name"); + } + + this.dbargs = dbargs; + this.dbname = dbargs.name; + + this.openSuccess = openSuccess; + this.openError = openError; + this.openSuccess || (this.openSuccess = function() { + console.log("DB opened: " + this.dbname); + }); + this.openError || (this.openError = function(e) { + console.log(e.message); + }); + + this.open(this.openSuccess, this.openError); + }; + SQLitePlugin.prototype.openDBs = {}; + SQLitePlugin.prototype.txQueue = []; + SQLitePlugin.prototype.features = { isSQLitePlugin: true }; + SQLitePlugin.handleCallback = function(ref, type, obj) { + if (root.sqlitePlugin.DEBUG){ + console.log("handle callback: " + ref + ", " + type + ", " + JSON.stringify(obj)); + } + var _ref; + if ((_ref = callbacks[ref]) != null) { + if (typeof _ref[type] === "function") _ref[type](obj); + } + callbacks[ref] = null; + delete callbacks[ref]; + }; + SQLitePlugin.prototype.executePragmaStatement = function(sql, success, error) { + var opts; + if (!sql) throw new Error("Cannot executeSql without a query"); + var cbsave = success; + var mysuccesscb = function(res) { + cbsave(res.rows); + }; + opts = getOptions({ + query: [sql], + path: this.dbname + }, mysuccesscb, error); + exec("SQLitePlugin.backgroundExecuteSql", opts); + }; + SQLitePlugin.prototype.executeSql = function(sql, values, success, error) { + var opts; + if (!sql) throw new Error("Cannot executeSql without a query"); + opts = getOptions({ + query: [sql].concat(values || []), + path: this.dbname + }, success, error); + exec("SQLitePlugin.backgroundExecuteSql", opts); + }; + SQLitePlugin.prototype.transaction = function(fn, error, success) { + var t = new SQLitePluginTransaction(this, fn, error, success); + this.txQueue.push(t); + if (this.txQueue.length == 1){ + t.start(); + } + }; + SQLitePlugin.prototype.startNextTransaction = function(){ + this.txQueue.shift(); + if (this.txQueue[0]){ + this.txQueue[0].start(); + } + }; + SQLitePlugin.prototype.open = function(success, error) { + var opts; + if (!(this.dbname in this.openDBs)) { + this.openDBs[this.dbname] = true; + opts = getOptions(this.dbargs, success, error); + exec("SQLitePlugin.open", opts); + } + }; + SQLitePlugin.prototype.close = function(success, error) { + var opts; + if (this.dbname in this.openDBs) { + delete this.openDBs[this.dbname]; + opts = getOptions({ + path: this.dbname + }, success, error); + exec("SQLitePlugin.close", opts); + } + }; + SQLitePluginTransaction = function(db, fn, error, success) { + if (typeof(fn) != 'function'){ + // This is consistent with the implementation in Chrome -- it + // throws if you pass anything other than a function. This also + // prevents us from stalling our txQueue if somebody passes a + // false value for fn. + throw new Error("transaction expected a function") + } + this.db = db; + this.fn = fn; + this.error = error; + this.success = success; + this.executes = []; + this.executeSql('BEGIN', [], null, function(tx, err){ throw new Error("unable to begin transaction: " + err.message) }); + }; + SQLitePluginTransaction.prototype.start = function(){ + try { + if (!this.fn) { return } + this.fn(this); + this.fn = null; + this.run(); + } + catch(err){ + // If "fn" throws, we must report the whole transaction as failed. + this.db.startNextTransaction(); + if (this.error){ + this.error(err); + } + } + }; + SQLitePluginTransaction.prototype.executeSql = function(sql, values, success, error) { + this.executes.push({ + query: [sql].concat(values || []), + success: success, + error: error + }); + }; + SQLitePluginTransaction.prototype.handleStatementSuccess = function(handler, response) { + if (!handler) + return; + var payload = { + rows: {item: function(i){ return response.rows[i] }, length: response.rows.length}, + rowsAffected: response.rowsAffected, + insertId: response.insertId || null + }; + handler(this, payload); + }; + SQLitePluginTransaction.prototype.handleStatementFailure = function(handler, response) { + if (!handler){ + throw new Error("a statement with no error handler failed: " + response.message) + } + if (handler(this, response)){ + throw new Error("a statement error callback did not return false"); + } + }; + SQLitePluginTransaction.prototype.run = function() { + var batchExecutes, waiting, txFailure, tx, opts=[]; + batchExecutes = this.executes; + waiting = batchExecutes.length; + this.executes = []; + tx = this; + function handlerFor(index, didSucceed){ + return function (response){ + try { + if (didSucceed){ + tx.handleStatementSuccess(batchExecutes[index].success, response); + } else { + tx.handleStatementFailure(batchExecutes[index].error, response); + } + } + catch (err) { + if (!txFailure) + txFailure = err; + } + if (--waiting == 0){ + if (txFailure){ + tx.rollBack(txFailure); + } else if (tx.executes.length > 0){ + // new requests have been issued by the callback + // handlers, so run another batch. + tx.run(); + } else { + tx.commit(); + } + } + } + } + + for (var i=0; i= 5) { + okcb = arguments[4]; + if (arguments.length > 5) errorcb = arguments[5]; + } + } else { + openargs = first; + if (arguments.length >= 2) { + okcb = arguments[1]; + if (arguments.length > 2) errorcb = arguments[2]; + } + } + return new SQLitePlugin(openargs, okcb, errorcb); + } + }; + + root.sqlitePlugin = { + openDatabase: SQLiteFactory.opendb, + + handleCallback: SQLitePlugin.handleCallback + }; +})(); diff --git a/src/lib/backbone-0.9.10.min.js b/src/lib/backbone-0.9.10.min.js new file mode 100644 index 0000000..d4b0314 --- /dev/null +++ b/src/lib/backbone-0.9.10.min.js @@ -0,0 +1,42 @@ +// Backbone.js 0.9.10 + +// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. +// Backbone may be freely distributed under the MIT license. +// For all details and documentation: +// http://backbonejs.org +(function(){var n=this,B=n.Backbone,h=[],C=h.push,u=h.slice,D=h.splice,g;g="undefined"!==typeof exports?exports:n.Backbone={};g.VERSION="0.9.10";var f=n._;!f&&"undefined"!==typeof require&&(f=require("underscore"));g.$=n.jQuery||n.Zepto||n.ender;g.noConflict=function(){n.Backbone=B;return this};g.emulateHTTP=!1;g.emulateJSON=!1;var v=/\s+/,q=function(a,b,c,d){if(!c)return!0;if("object"===typeof c)for(var e in c)a[b].apply(a,[e,c[e]].concat(d));else if(v.test(c)){c=c.split(v);e=0;for(var f=c.length;e< +f;e++)a[b].apply(a,[c[e]].concat(d))}else return!0},w=function(a,b){var c,d=-1,e=a.length;switch(b.length){case 0:for(;++d=b);this.root=("/"+this.root+"/").replace(I,"/");b&&this._wantsHashChange&&(this.iframe=g.$(' + + + + \ No newline at end of file diff --git a/test/ecc-test.js b/test/ecc-test.js new file mode 100644 index 0000000..dc32b55 --- /dev/null +++ b/test/ecc-test.js @@ -0,0 +1,21 @@ +module("ECC Crypto"); + +var keys, + ciphertext, + plaintext = 'Hello, World!'; + +test("Generate Keys", function() { + // generate keypair + keys = sjcl.ecc.elGamal.generateKeys(384, 1); + ok(keys); +}); + +test("Encrypt", function() { + ciphertext = sjcl.encrypt(keys.pub, plaintext); + ok(ciphertext); +}); + +test("Decrypt", function() { + var decrypted = sjcl.decrypt(keys.sec, ciphertext); + equal(plaintext, decrypted); +}); \ No newline at end of file diff --git a/test/integration/cloudstorage-dao-test.js b/test/integration/cloudstorage-dao-test.js new file mode 100644 index 0000000..8e8a59f --- /dev/null +++ b/test/integration/cloudstorage-dao-test.js @@ -0,0 +1,71 @@ +module("CloudStorage DAO"); + +var cloudstoragedao_test = { + user: 'test@atlasdev.onmicrosoft.com', + password: 'Xoza76645', + keySize: 128, + ivSize: 104 +}; + +asyncTest("Init", 1, function() { + // init dependencies + var util = new app.crypto.Util(window, uuid); + var jsonDao = new app.dao.LawnchairDAO(window); + cloudstoragedao_test.crypto = new app.crypto.Crypto(window, util); + cloudstoragedao_test.storage = new app.dao.DeviceStorage(cloudstoragedao_test.crypto, jsonDao, null); + cloudstoragedao_test.cloudstorage = new app.dao.CloudStorage(window, $); + cloudstoragedao_test.emailDao = new app.dao.EmailDAO(_, cloudstoragedao_test.crypto, cloudstoragedao_test.storage, cloudstoragedao_test.cloudstorage); + + // clear db before tests + jsonDao.clear(function(err) { + ok(!err, 'DB cleared. Error status: ' + err); + + start(); + }); +}); + + +asyncTest("Get user secret key from cloud", 1, function() { + cloudstoragedao_test.cloudstorage.getUserSecretKey(cloudstoragedao_test.user, function(err) { + ok(!err, 'Get/Sync key from cloud'); + + start(); + }, function() { + cloudstoragedao_test.storage.clear(function(err) { + ok(!err, 'DB cleared. Error status: ' + err); + + start(); + }); + }); +}); + +asyncTest("Persist user secret key to cloud", 1, function() { + cloudstoragedao_test.cloudstorage.persistUserSecretKey(cloudstoragedao_test.user, function(err) { + ok(!err, 'Persist key to cloud'); + + start(); + }); +}); + +asyncTest("Sync emails from cloud", 3, function() { + + var account = new app.model.Account({ + emailAddress: cloudstoragedao_test.user, + symKeySize: cloudstoragedao_test.keySize, + symIvSize: cloudstoragedao_test.ivSize + }); + + cloudstoragedao_test.emailDao.init(account, cloudstoragedao_test.password, function() { + ok(true, 'Init complete'); + + cloudstoragedao_test.emailDao.syncFromCloud('inbox', function(res) { + ok(!res, 'Synced items'); + + cloudstoragedao_test.emailDao.listItems('inbox', 0, null, function(collection) { + ok(collection.length > 0, 'Read synced items'); + + start(); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/integration/index.html b/test/integration/index.html new file mode 100644 index 0000000..e0f4085 --- /dev/null +++ b/test/integration/index.html @@ -0,0 +1,74 @@ + + + + + JavaScript Integration Tests + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/pgp-test.js b/test/pgp-test.js new file mode 100644 index 0000000..500313e --- /dev/null +++ b/test/pgp-test.js @@ -0,0 +1,70 @@ +module("PGP Crypto"); + +var pgp_test = { + keyID: null, + keySize: 512 +}; + +asyncTest("Init", 1, function() { + // init dependencies + pgp_test.util = new app.crypto.Util(window); + pgp_test.crypto = new app.crypto.PGP(window, openpgp, util, null); + pgp_test.crypto.setPassphrase('asdf'); + ok(pgp_test.crypto, 'PGP crypto'); + + pgp_test.helperEncrDecr = function(crypto, keyId, plaintext) { + if (!crypto.getPublicKey()) { + crypto.readKeys(keyId); + } + + console.log('plaintext size [bytes]: ' + plaintext.length); + + var startTime = (new Date).getTime(); + var ct = crypto.asymmetricEncrypt(plaintext); + var diff = (new Date).getTime() - startTime; + + console.log('Time taken for encryption [ms]: ' + diff); + ok(ct, "ciphertext: see console output for benchmark"); + console.log('ciphertext size [bytes]: ' + ct.length); + + var decrStart = (new Date).getTime(); + var pt = crypto.asymmetricDecrypt(ct); + var decrDiff = (new Date).getTime() - decrStart; + + console.log('Time taken for decryption [ms]: ' + decrDiff); + ok(pt, "decrypted: see console output for benchmark"); + equal(pt, plaintext, "Decrypted should be the same as the plaintext"); + }; + + start(); +}); + +asyncTest("Generate keypair, De/Encrypt", 7, function() { + var startTime = (new Date).getTime(); + var keys = pgp_test.crypto.generateKeys(pgp_test.keySize); + var diff = (new Date).getTime() - startTime; + + pgp_test.keyID = keys.privateKey.getKeyId(); + pgp_test.crypto.readKeys(pgp_test.keyID); + + console.log('Time taken for key generation [ms]: ' + diff + ' (' + pgp_test.keySize + ' bit RSA keypair)'); + ok(pgp_test.crypto.getPrivateKey()); + ok(pgp_test.crypto.getPrivateKey().indexOf('-----BEGIN PGP PRIVATE KEY BLOCK-----') === 0); + ok(pgp_test.crypto.getPublicKey()); + ok(pgp_test.crypto.getPublicKey().indexOf('-----BEGIN PGP PUBLIC KEY BLOCK-----') === 0); + + pgp_test.helperEncrDecr(pgp_test.crypto, pgp_test.keyID, "Hello, World!"); + + start(); + + // pgp_test.crypto.exportKeys(function(url) { + // ok(url, 'export url'); + // + // $.get(url, function(data) { + // ok(data.indexOf('-----BEGIN PGP PUBLIC KEY BLOCK-----') !== -1, 'exportd public key'); + // ok(data.indexOf('-----END PGP PRIVATE KEY BLOCK-----') !== -1, 'export private key'); + // + // start(); + // }); + // }); +}); \ No newline at end of file diff --git a/test/qunit-1.11.0.css b/test/qunit-1.11.0.css new file mode 100644 index 0000000..d7fc0c8 --- /dev/null +++ b/test/qunit-1.11.0.css @@ -0,0 +1,244 @@ +/** + * QUnit v1.11.0 - A JavaScript Unit Testing Framework + * + * http://qunitjs.com + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/** Font Family and Sizes */ + +#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; +} + +#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } +#qunit-tests { font-size: smaller; } + + +/** Resets */ + +#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter { + margin: 0; + padding: 0; +} + + +/** Header */ + +#qunit-header { + padding: 0.5em 0 0.5em 1em; + + color: #8699a4; + background-color: #0d3349; + + font-size: 1.5em; + line-height: 1em; + font-weight: normal; + + border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + -webkit-border-top-right-radius: 5px; + -webkit-border-top-left-radius: 5px; +} + +#qunit-header a { + text-decoration: none; + color: #c2ccd1; +} + +#qunit-header a:hover, +#qunit-header a:focus { + color: #fff; +} + +#qunit-testrunner-toolbar label { + display: inline-block; + padding: 0 .5em 0 .1em; +} + +#qunit-banner { + height: 5px; +} + +#qunit-testrunner-toolbar { + padding: 0.5em 0 0.5em 2em; + color: #5E740B; + background-color: #eee; + overflow: hidden; +} + +#qunit-userAgent { + padding: 0.5em 0 0.5em 2.5em; + background-color: #2b81af; + color: #fff; + text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; +} + +#qunit-modulefilter-container { + float: right; +} + +/** Tests: Pass/Fail */ + +#qunit-tests { + list-style-position: inside; +} + +#qunit-tests li { + padding: 0.4em 0.5em 0.4em 2.5em; + border-bottom: 1px solid #fff; + list-style-position: inside; +} + +#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { + display: none; +} + +#qunit-tests li strong { + cursor: pointer; +} + +#qunit-tests li a { + padding: 0.5em; + color: #c2ccd1; + text-decoration: none; +} +#qunit-tests li a:hover, +#qunit-tests li a:focus { + color: #000; +} + +#qunit-tests li .runtime { + float: right; + font-size: smaller; +} + +.qunit-assert-list { + margin-top: 0.5em; + padding: 0.5em; + + background-color: #fff; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.qunit-collapsed { + display: none; +} + +#qunit-tests table { + border-collapse: collapse; + margin-top: .2em; +} + +#qunit-tests th { + text-align: right; + vertical-align: top; + padding: 0 .5em 0 0; +} + +#qunit-tests td { + vertical-align: top; +} + +#qunit-tests pre { + margin: 0; + white-space: pre-wrap; + word-wrap: break-word; +} + +#qunit-tests del { + background-color: #e0f2be; + color: #374e0c; + text-decoration: none; +} + +#qunit-tests ins { + background-color: #ffcaca; + color: #500; + text-decoration: none; +} + +/*** Test Counts */ + +#qunit-tests b.counts { color: black; } +#qunit-tests b.passed { color: #5E740B; } +#qunit-tests b.failed { color: #710909; } + +#qunit-tests li li { + padding: 5px; + background-color: #fff; + border-bottom: none; + list-style-position: inside; +} + +/*** Passing Styles */ + +#qunit-tests li li.pass { + color: #3c510c; + background-color: #fff; + border-left: 10px solid #C6E746; +} + +#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } +#qunit-tests .pass .test-name { color: #366097; } + +#qunit-tests .pass .test-actual, +#qunit-tests .pass .test-expected { color: #999999; } + +#qunit-banner.qunit-pass { background-color: #C6E746; } + +/*** Failing Styles */ + +#qunit-tests li li.fail { + color: #710909; + background-color: #fff; + border-left: 10px solid #EE5757; + white-space: pre; +} + +#qunit-tests > li:last-child { + border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + -webkit-border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; +} + +#qunit-tests .fail { color: #000000; background-color: #EE5757; } +#qunit-tests .fail .test-name, +#qunit-tests .fail .module-name { color: #000000; } + +#qunit-tests .fail .test-actual { color: #EE5757; } +#qunit-tests .fail .test-expected { color: green; } + +#qunit-banner.qunit-fail { background-color: #EE5757; } + + +/** Result */ + +#qunit-testresult { + padding: 0.5em 0.5em 0.5em 2.5em; + + color: #2b81af; + background-color: #D2E0E6; + + border-bottom: 1px solid white; +} +#qunit-testresult .module-name { + font-weight: bold; +} + +/** Fixture */ + +#qunit-fixture { + position: absolute; + top: -10000px; + left: -10000px; + width: 1000px; + height: 1000px; +} diff --git a/test/qunit-1.11.0.js b/test/qunit-1.11.0.js new file mode 100644 index 0000000..302545f --- /dev/null +++ b/test/qunit-1.11.0.js @@ -0,0 +1,2152 @@ +/** + * QUnit v1.11.0 - A JavaScript Unit Testing Framework + * + * http://qunitjs.com + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +(function( window ) { + +var QUnit, + assert, + config, + onErrorFnPrev, + testId = 0, + fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""), + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + // Keep a local reference to Date (GH-283) + Date = window.Date, + defined = { + setTimeout: typeof window.setTimeout !== "undefined", + sessionStorage: (function() { + var x = "qunit-test-string"; + try { + sessionStorage.setItem( x, x ); + sessionStorage.removeItem( x ); + return true; + } catch( e ) { + return false; + } + }()) + }, + /** + * Provides a normalized error string, correcting an issue + * with IE 7 (and prior) where Error.prototype.toString is + * not properly implemented + * + * Based on http://es5.github.com/#x15.11.4.4 + * + * @param {String|Error} error + * @return {String} error message + */ + errorString = function( error ) { + var name, message, + errorString = error.toString(); + if ( errorString.substring( 0, 7 ) === "[object" ) { + name = error.name ? error.name.toString() : "Error"; + message = error.message ? error.message.toString() : ""; + if ( name && message ) { + return name + ": " + message; + } else if ( name ) { + return name; + } else if ( message ) { + return message; + } else { + return "Error"; + } + } else { + return errorString; + } + }, + /** + * Makes a clone of an object using only Array or Object as base, + * and copies over the own enumerable properties. + * + * @param {Object} obj + * @return {Object} New object with only the own properties (recursively). + */ + objectValues = function( obj ) { + // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392. + /*jshint newcap: false */ + var key, val, + vals = QUnit.is( "array", obj ) ? [] : {}; + for ( key in obj ) { + if ( hasOwn.call( obj, key ) ) { + val = obj[key]; + vals[key] = val === Object(val) ? objectValues(val) : val; + } + } + return vals; + }; + +function Test( settings ) { + extend( this, settings ); + this.assertions = []; + this.testNumber = ++Test.count; +} + +Test.count = 0; + +Test.prototype = { + init: function() { + var a, b, li, + tests = id( "qunit-tests" ); + + if ( tests ) { + b = document.createElement( "strong" ); + b.innerHTML = this.nameHtml; + + // `a` initialized at top of scope + a = document.createElement( "a" ); + a.innerHTML = "Rerun"; + a.href = QUnit.url({ testNumber: this.testNumber }); + + li = document.createElement( "li" ); + li.appendChild( b ); + li.appendChild( a ); + li.className = "running"; + li.id = this.id = "qunit-test-output" + testId++; + + tests.appendChild( li ); + } + }, + setup: function() { + if ( this.module !== config.previousModule ) { + if ( config.previousModule ) { + runLoggingCallbacks( "moduleDone", QUnit, { + name: config.previousModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + }); + } + config.previousModule = this.module; + config.moduleStats = { all: 0, bad: 0 }; + runLoggingCallbacks( "moduleStart", QUnit, { + name: this.module + }); + } else if ( config.autorun ) { + runLoggingCallbacks( "moduleStart", QUnit, { + name: this.module + }); + } + + config.current = this; + + this.testEnvironment = extend({ + setup: function() {}, + teardown: function() {} + }, this.moduleTestEnvironment ); + + this.started = +new Date(); + runLoggingCallbacks( "testStart", QUnit, { + name: this.testName, + module: this.module + }); + + // allow utility functions to access the current test environment + // TODO why?? + QUnit.current_testEnvironment = this.testEnvironment; + + if ( !config.pollution ) { + saveGlobal(); + } + if ( config.notrycatch ) { + this.testEnvironment.setup.call( this.testEnvironment ); + return; + } + try { + this.testEnvironment.setup.call( this.testEnvironment ); + } catch( e ) { + QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) ); + } + }, + run: function() { + config.current = this; + + var running = id( "qunit-testresult" ); + + if ( running ) { + running.innerHTML = "Running:
" + this.nameHtml; + } + + if ( this.async ) { + QUnit.stop(); + } + + this.callbackStarted = +new Date(); + + if ( config.notrycatch ) { + this.callback.call( this.testEnvironment, QUnit.assert ); + this.callbackRuntime = +new Date() - this.callbackStarted; + return; + } + + try { + this.callback.call( this.testEnvironment, QUnit.assert ); + this.callbackRuntime = +new Date() - this.callbackStarted; + } catch( e ) { + this.callbackRuntime = +new Date() - this.callbackStarted; + + QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) ); + // else next test will carry the responsibility + saveGlobal(); + + // Restart the tests if they're blocking + if ( config.blocking ) { + QUnit.start(); + } + } + }, + teardown: function() { + config.current = this; + if ( config.notrycatch ) { + if ( typeof this.callbackRuntime === "undefined" ) { + this.callbackRuntime = +new Date() - this.callbackStarted; + } + this.testEnvironment.teardown.call( this.testEnvironment ); + return; + } else { + try { + this.testEnvironment.teardown.call( this.testEnvironment ); + } catch( e ) { + QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) ); + } + } + checkPollution(); + }, + finish: function() { + config.current = this; + if ( config.requireExpects && this.expected === null ) { + QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack ); + } else if ( this.expected !== null && this.expected !== this.assertions.length ) { + QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack ); + } else if ( this.expected === null && !this.assertions.length ) { + QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack ); + } + + var i, assertion, a, b, time, li, ol, + test = this, + good = 0, + bad = 0, + tests = id( "qunit-tests" ); + + this.runtime = +new Date() - this.started; + config.stats.all += this.assertions.length; + config.moduleStats.all += this.assertions.length; + + if ( tests ) { + ol = document.createElement( "ol" ); + ol.className = "qunit-assert-list"; + + for ( i = 0; i < this.assertions.length; i++ ) { + assertion = this.assertions[i]; + + li = document.createElement( "li" ); + li.className = assertion.result ? "pass" : "fail"; + li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" ); + ol.appendChild( li ); + + if ( assertion.result ) { + good++; + } else { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + + // store result when possible + if ( QUnit.config.reorder && defined.sessionStorage ) { + if ( bad ) { + sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad ); + } else { + sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName ); + } + } + + if ( bad === 0 ) { + addClass( ol, "qunit-collapsed" ); + } + + // `b` initialized at top of scope + b = document.createElement( "strong" ); + b.innerHTML = this.nameHtml + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; + + addEvent(b, "click", function() { + var next = b.parentNode.lastChild, + collapsed = hasClass( next, "qunit-collapsed" ); + ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" ); + }); + + addEvent(b, "dblclick", function( e ) { + var target = e && e.target ? e.target : window.event.srcElement; + if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) { + target = target.parentNode; + } + if ( window.location && target.nodeName.toLowerCase() === "strong" ) { + window.location = QUnit.url({ testNumber: test.testNumber }); + } + }); + + // `time` initialized at top of scope + time = document.createElement( "span" ); + time.className = "runtime"; + time.innerHTML = this.runtime + " ms"; + + // `li` initialized at top of scope + li = id( this.id ); + li.className = bad ? "fail" : "pass"; + li.removeChild( li.firstChild ); + a = li.firstChild; + li.appendChild( b ); + li.appendChild( a ); + li.appendChild( time ); + li.appendChild( ol ); + + } else { + for ( i = 0; i < this.assertions.length; i++ ) { + if ( !this.assertions[i].result ) { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + } + + runLoggingCallbacks( "testDone", QUnit, { + name: this.testName, + module: this.module, + failed: bad, + passed: this.assertions.length - bad, + total: this.assertions.length, + duration: this.runtime + }); + + QUnit.reset(); + + config.current = undefined; + }, + + queue: function() { + var bad, + test = this; + + synchronize(function() { + test.init(); + }); + function run() { + // each of these can by async + synchronize(function() { + test.setup(); + }); + synchronize(function() { + test.run(); + }); + synchronize(function() { + test.teardown(); + }); + synchronize(function() { + test.finish(); + }); + } + + // `bad` initialized at top of scope + // defer when previous test run passed, if storage is available + bad = QUnit.config.reorder && defined.sessionStorage && + +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName ); + + if ( bad ) { + run(); + } else { + synchronize( run, true ); + } + } +}; + +// Root QUnit object. +// `QUnit` initialized at top of scope +QUnit = { + + // call on start of module test to prepend name to all tests + module: function( name, testEnvironment ) { + config.currentModule = name; + config.currentModuleTestEnvironment = testEnvironment; + config.modules[name] = true; + }, + + asyncTest: function( testName, expected, callback ) { + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + + QUnit.test( testName, expected, callback, true ); + }, + + test: function( testName, expected, callback, async ) { + var test, + nameHtml = "" + escapeText( testName ) + ""; + + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + + if ( config.currentModule ) { + nameHtml = "" + escapeText( config.currentModule ) + ": " + nameHtml; + } + + test = new Test({ + nameHtml: nameHtml, + testName: testName, + expected: expected, + async: async, + callback: callback, + module: config.currentModule, + moduleTestEnvironment: config.currentModuleTestEnvironment, + stack: sourceFromStacktrace( 2 ) + }); + + if ( !validTest( test ) ) { + return; + } + + test.queue(); + }, + + // Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + expect: function( asserts ) { + if (arguments.length === 1) { + config.current.expected = asserts; + } else { + return config.current.expected; + } + }, + + start: function( count ) { + // QUnit hasn't been initialized yet. + // Note: RequireJS (et al) may delay onLoad + if ( config.semaphore === undefined ) { + QUnit.begin(function() { + // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first + setTimeout(function() { + QUnit.start( count ); + }); + }); + return; + } + + config.semaphore -= count || 1; + // don't start until equal number of stop-calls + if ( config.semaphore > 0 ) { + return; + } + // ignore if start is called more often then stop + if ( config.semaphore < 0 ) { + config.semaphore = 0; + QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) ); + return; + } + // A slight delay, to avoid any current callbacks + if ( defined.setTimeout ) { + window.setTimeout(function() { + if ( config.semaphore > 0 ) { + return; + } + if ( config.timeout ) { + clearTimeout( config.timeout ); + } + + config.blocking = false; + process( true ); + }, 13); + } else { + config.blocking = false; + process( true ); + } + }, + + stop: function( count ) { + config.semaphore += count || 1; + config.blocking = true; + + if ( config.testTimeout && defined.setTimeout ) { + clearTimeout( config.timeout ); + config.timeout = window.setTimeout(function() { + QUnit.ok( false, "Test timed out" ); + config.semaphore = 1; + QUnit.start(); + }, config.testTimeout ); + } + } +}; + +// `assert` initialized at top of scope +// Asssert helpers +// All of these must either call QUnit.push() or manually do: +// - runLoggingCallbacks( "log", .. ); +// - config.current.assertions.push({ .. }); +// We attach it to the QUnit object *after* we expose the public API, +// otherwise `assert` will become a global variable in browsers (#341). +assert = { + /** + * Asserts rough true-ish result. + * @name ok + * @function + * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); + */ + ok: function( result, msg ) { + if ( !config.current ) { + throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) ); + } + result = !!result; + + var source, + details = { + module: config.current.module, + name: config.current.testName, + result: result, + message: msg + }; + + msg = escapeText( msg || (result ? "okay" : "failed" ) ); + msg = "" + msg + ""; + + if ( !result ) { + source = sourceFromStacktrace( 2 ); + if ( source ) { + details.source = source; + msg += "
Source:
" + escapeText( source ) + "
"; + } + } + runLoggingCallbacks( "log", QUnit, details ); + config.current.assertions.push({ + result: result, + message: msg + }); + }, + + /** + * Assert that the first two arguments are equal, with an optional message. + * Prints out both actual and expected values. + * @name equal + * @function + * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" ); + */ + equal: function( actual, expected, message ) { + /*jshint eqeqeq:false */ + QUnit.push( expected == actual, actual, expected, message ); + }, + + /** + * @name notEqual + * @function + */ + notEqual: function( actual, expected, message ) { + /*jshint eqeqeq:false */ + QUnit.push( expected != actual, actual, expected, message ); + }, + + /** + * @name propEqual + * @function + */ + propEqual: function( actual, expected, message ) { + actual = objectValues(actual); + expected = objectValues(expected); + QUnit.push( QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name notPropEqual + * @function + */ + notPropEqual: function( actual, expected, message ) { + actual = objectValues(actual); + expected = objectValues(expected); + QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name deepEqual + * @function + */ + deepEqual: function( actual, expected, message ) { + QUnit.push( QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name notDeepEqual + * @function + */ + notDeepEqual: function( actual, expected, message ) { + QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name strictEqual + * @function + */ + strictEqual: function( actual, expected, message ) { + QUnit.push( expected === actual, actual, expected, message ); + }, + + /** + * @name notStrictEqual + * @function + */ + notStrictEqual: function( actual, expected, message ) { + QUnit.push( expected !== actual, actual, expected, message ); + }, + + "throws": function( block, expected, message ) { + var actual, + expectedOutput = expected, + ok = false; + + // 'expected' is optional + if ( typeof expected === "string" ) { + message = expected; + expected = null; + } + + config.current.ignoreGlobalErrors = true; + try { + block.call( config.current.testEnvironment ); + } catch (e) { + actual = e; + } + config.current.ignoreGlobalErrors = false; + + if ( actual ) { + // we don't want to validate thrown error + if ( !expected ) { + ok = true; + expectedOutput = null; + // expected is a regexp + } else if ( QUnit.objectType( expected ) === "regexp" ) { + ok = expected.test( errorString( actual ) ); + // expected is a constructor + } else if ( actual instanceof expected ) { + ok = true; + // expected is a validation function which returns true is validation passed + } else if ( expected.call( {}, actual ) === true ) { + expectedOutput = null; + ok = true; + } + + QUnit.push( ok, actual, expectedOutput, message ); + } else { + QUnit.pushFailure( message, null, 'No exception was thrown.' ); + } + } +}; + +/** + * @deprecate since 1.8.0 + * Kept assertion helpers in root for backwards compatibility. + */ +extend( QUnit, assert ); + +/** + * @deprecated since 1.9.0 + * Kept root "raises()" for backwards compatibility. + * (Note that we don't introduce assert.raises). + */ +QUnit.raises = assert[ "throws" ]; + +/** + * @deprecated since 1.0.0, replaced with error pushes since 1.3.0 + * Kept to avoid TypeErrors for undefined methods. + */ +QUnit.equals = function() { + QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" ); +}; +QUnit.same = function() { + QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" ); +}; + +// We want access to the constructor's prototype +(function() { + function F() {} + F.prototype = QUnit; + QUnit = new F(); + // Make F QUnit's constructor so that we can add to the prototype later + QUnit.constructor = F; +}()); + +/** + * Config object: Maintain internal state + * Later exposed as QUnit.config + * `config` initialized at top of scope + */ +config = { + // The queue of tests to run + queue: [], + + // block until document ready + blocking: true, + + // when enabled, show only failing tests + // gets persisted through sessionStorage and can be changed in UI via checkbox + hidepassed: false, + + // by default, run previously failed tests first + // very useful in combination with "Hide passed tests" checked + reorder: true, + + // by default, modify document.title when suite is done + altertitle: true, + + // when enabled, all tests must call expect() + requireExpects: false, + + // add checkboxes that are persisted in the query-string + // when enabled, the id is set to `true` as a `QUnit.config` property + urlConfig: [ + { + id: "noglobals", + label: "Check for Globals", + tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings." + }, + { + id: "notrycatch", + label: "No try-catch", + tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings." + } + ], + + // Set of all modules. + modules: {}, + + // logging callback queues + begin: [], + done: [], + log: [], + testStart: [], + testDone: [], + moduleStart: [], + moduleDone: [] +}; + +// Export global variables, unless an 'exports' object exists, +// in that case we assume we're in CommonJS (dealt with on the bottom of the script) +if ( typeof exports === "undefined" ) { + extend( window, QUnit ); + + // Expose QUnit object + window.QUnit = QUnit; +} + +// Initialize more QUnit.config and QUnit.urlParams +(function() { + var i, + location = window.location || { search: "", protocol: "file:" }, + params = location.search.slice( 1 ).split( "&" ), + length = params.length, + urlParams = {}, + current; + + if ( params[ 0 ] ) { + for ( i = 0; i < length; i++ ) { + current = params[ i ].split( "=" ); + current[ 0 ] = decodeURIComponent( current[ 0 ] ); + // allow just a key to turn on a flag, e.g., test.html?noglobals + current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; + urlParams[ current[ 0 ] ] = current[ 1 ]; + } + } + + QUnit.urlParams = urlParams; + + // String search anywhere in moduleName+testName + config.filter = urlParams.filter; + + // Exact match of the module name + config.module = urlParams.module; + + config.testNumber = parseInt( urlParams.testNumber, 10 ) || null; + + // Figure out if we're running the tests from a server or not + QUnit.isLocal = location.protocol === "file:"; +}()); + +// Extend QUnit object, +// these after set here because they should not be exposed as global functions +extend( QUnit, { + assert: assert, + + config: config, + + // Initialize the configuration options + init: function() { + extend( config, { + stats: { all: 0, bad: 0 }, + moduleStats: { all: 0, bad: 0 }, + started: +new Date(), + updateRate: 1000, + blocking: false, + autostart: true, + autorun: false, + filter: "", + queue: [], + semaphore: 1 + }); + + var tests, banner, result, + qunit = id( "qunit" ); + + if ( qunit ) { + qunit.innerHTML = + "

" + escapeText( document.title ) + "

" + + "

" + + "
" + + "

" + + "
    "; + } + + tests = id( "qunit-tests" ); + banner = id( "qunit-banner" ); + result = id( "qunit-testresult" ); + + if ( tests ) { + tests.innerHTML = ""; + } + + if ( banner ) { + banner.className = ""; + } + + if ( result ) { + result.parentNode.removeChild( result ); + } + + if ( tests ) { + result = document.createElement( "p" ); + result.id = "qunit-testresult"; + result.className = "result"; + tests.parentNode.insertBefore( result, tests ); + result.innerHTML = "Running...
     "; + } + }, + + // Resets the test setup. Useful for tests that modify the DOM. + reset: function() { + var fixture = id( "qunit-fixture" ); + if ( fixture ) { + fixture.innerHTML = config.fixture; + } + }, + + // Trigger an event on an element. + // @example triggerEvent( document.body, "click" ); + triggerEvent: function( elem, type, event ) { + if ( document.createEvent ) { + event = document.createEvent( "MouseEvents" ); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + + elem.dispatchEvent( event ); + } else if ( elem.fireEvent ) { + elem.fireEvent( "on" + type ); + } + }, + + // Safe object type checking + is: function( type, obj ) { + return QUnit.objectType( obj ) === type; + }, + + objectType: function( obj ) { + if ( typeof obj === "undefined" ) { + return "undefined"; + // consider: typeof null === object + } + if ( obj === null ) { + return "null"; + } + + var match = toString.call( obj ).match(/^\[object\s(.*)\]$/), + type = match && match[1] || ""; + + switch ( type ) { + case "Number": + if ( isNaN(obj) ) { + return "nan"; + } + return "number"; + case "String": + case "Boolean": + case "Array": + case "Date": + case "RegExp": + case "Function": + return type.toLowerCase(); + } + if ( typeof obj === "object" ) { + return "object"; + } + return undefined; + }, + + push: function( result, actual, expected, message ) { + if ( !config.current ) { + throw new Error( "assertion outside test context, was " + sourceFromStacktrace() ); + } + + var output, source, + details = { + module: config.current.module, + name: config.current.testName, + result: result, + message: message, + actual: actual, + expected: expected + }; + + message = escapeText( message ) || ( result ? "okay" : "failed" ); + message = "" + message + ""; + output = message; + + if ( !result ) { + expected = escapeText( QUnit.jsDump.parse(expected) ); + actual = escapeText( QUnit.jsDump.parse(actual) ); + output += ""; + + if ( actual !== expected ) { + output += ""; + output += ""; + } + + source = sourceFromStacktrace(); + + if ( source ) { + details.source = source; + output += ""; + } + + output += "
    Expected:
    " + expected + "
    Result:
    " + actual + "
    Diff:
    " + QUnit.diff( expected, actual ) + "
    Source:
    " + escapeText( source ) + "
    "; + } + + runLoggingCallbacks( "log", QUnit, details ); + + config.current.assertions.push({ + result: !!result, + message: output + }); + }, + + pushFailure: function( message, source, actual ) { + if ( !config.current ) { + throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) ); + } + + var output, + details = { + module: config.current.module, + name: config.current.testName, + result: false, + message: message + }; + + message = escapeText( message ) || "error"; + message = "" + message + ""; + output = message; + + output += ""; + + if ( actual ) { + output += ""; + } + + if ( source ) { + details.source = source; + output += ""; + } + + output += "
    Result:
    " + escapeText( actual ) + "
    Source:
    " + escapeText( source ) + "
    "; + + runLoggingCallbacks( "log", QUnit, details ); + + config.current.assertions.push({ + result: false, + message: output + }); + }, + + url: function( params ) { + params = extend( extend( {}, QUnit.urlParams ), params ); + var key, + querystring = "?"; + + for ( key in params ) { + if ( !hasOwn.call( params, key ) ) { + continue; + } + querystring += encodeURIComponent( key ) + "=" + + encodeURIComponent( params[ key ] ) + "&"; + } + return window.location.protocol + "//" + window.location.host + + window.location.pathname + querystring.slice( 0, -1 ); + }, + + extend: extend, + id: id, + addEvent: addEvent + // load, equiv, jsDump, diff: Attached later +}); + +/** + * @deprecated: Created for backwards compatibility with test runner that set the hook function + * into QUnit.{hook}, instead of invoking it and passing the hook function. + * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here. + * Doing this allows us to tell if the following methods have been overwritten on the actual + * QUnit object. + */ +extend( QUnit.constructor.prototype, { + + // Logging callbacks; all receive a single argument with the listed properties + // run test/logs.html for any related changes + begin: registerLoggingCallback( "begin" ), + + // done: { failed, passed, total, runtime } + done: registerLoggingCallback( "done" ), + + // log: { result, actual, expected, message } + log: registerLoggingCallback( "log" ), + + // testStart: { name } + testStart: registerLoggingCallback( "testStart" ), + + // testDone: { name, failed, passed, total, duration } + testDone: registerLoggingCallback( "testDone" ), + + // moduleStart: { name } + moduleStart: registerLoggingCallback( "moduleStart" ), + + // moduleDone: { name, failed, passed, total } + moduleDone: registerLoggingCallback( "moduleDone" ) +}); + +if ( typeof document === "undefined" || document.readyState === "complete" ) { + config.autorun = true; +} + +QUnit.load = function() { + runLoggingCallbacks( "begin", QUnit, {} ); + + // Initialize the config, saving the execution queue + var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, + urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter, + numModules = 0, + moduleFilterHtml = "", + urlConfigHtml = "", + oldconfig = extend( {}, config ); + + QUnit.init(); + extend(config, oldconfig); + + config.blocking = false; + + len = config.urlConfig.length; + + for ( i = 0; i < len; i++ ) { + val = config.urlConfig[i]; + if ( typeof val === "string" ) { + val = { + id: val, + label: val, + tooltip: "[no tooltip available]" + }; + } + config[ val.id ] = QUnit.urlParams[ val.id ]; + urlConfigHtml += ""; + } + + moduleFilterHtml += ""; + + // `userAgent` initialized at top of scope + userAgent = id( "qunit-userAgent" ); + if ( userAgent ) { + userAgent.innerHTML = navigator.userAgent; + } + + // `banner` initialized at top of scope + banner = id( "qunit-header" ); + if ( banner ) { + banner.innerHTML = "
    " + banner.innerHTML + " "; + } + + // `toolbar` initialized at top of scope + toolbar = id( "qunit-testrunner-toolbar" ); + if ( toolbar ) { + // `filter` initialized at top of scope + filter = document.createElement( "input" ); + filter.type = "checkbox"; + filter.id = "qunit-filter-pass"; + + addEvent( filter, "click", function() { + var tmp, + ol = document.getElementById( "qunit-tests" ); + + if ( filter.checked ) { + ol.className = ol.className + " hidepass"; + } else { + tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " "; + ol.className = tmp.replace( / hidepass /, " " ); + } + if ( defined.sessionStorage ) { + if (filter.checked) { + sessionStorage.setItem( "qunit-filter-passed-tests", "true" ); + } else { + sessionStorage.removeItem( "qunit-filter-passed-tests" ); + } + } + }); + + if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) { + filter.checked = true; + // `ol` initialized at top of scope + ol = document.getElementById( "qunit-tests" ); + ol.className = ol.className + " hidepass"; + } + toolbar.appendChild( filter ); + + // `label` initialized at top of scope + label = document.createElement( "label" ); + label.setAttribute( "for", "qunit-filter-pass" ); + label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." ); + label.innerHTML = "Hide passed tests"; + toolbar.appendChild( label ); + + urlConfigCheckboxesContainer = document.createElement("span"); + urlConfigCheckboxesContainer.innerHTML = urlConfigHtml; + urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input"); + // For oldIE support: + // * Add handlers to the individual elements instead of the container + // * Use "click" instead of "change" + // * Fallback from event.target to event.srcElement + addEvents( urlConfigCheckboxes, "click", function( event ) { + var params = {}, + target = event.target || event.srcElement; + params[ target.name ] = target.checked ? true : undefined; + window.location = QUnit.url( params ); + }); + toolbar.appendChild( urlConfigCheckboxesContainer ); + + if (numModules > 1) { + moduleFilter = document.createElement( 'span' ); + moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' ); + moduleFilter.innerHTML = moduleFilterHtml; + addEvent( moduleFilter.lastChild, "change", function() { + var selectBox = moduleFilter.getElementsByTagName("select")[0], + selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value); + + window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } ); + }); + toolbar.appendChild(moduleFilter); + } + } + + // `main` initialized at top of scope + main = id( "qunit-fixture" ); + if ( main ) { + config.fixture = main.innerHTML; + } + + if ( config.autostart ) { + QUnit.start(); + } +}; + +addEvent( window, "load", QUnit.load ); + +// `onErrorFnPrev` initialized at top of scope +// Preserve other handlers +onErrorFnPrev = window.onerror; + +// Cover uncaught exceptions +// Returning true will surpress the default browser handler, +// returning false will let it run. +window.onerror = function ( error, filePath, linerNr ) { + var ret = false; + if ( onErrorFnPrev ) { + ret = onErrorFnPrev( error, filePath, linerNr ); + } + + // Treat return value as window.onerror itself does, + // Only do our handling if not surpressed. + if ( ret !== true ) { + if ( QUnit.config.current ) { + if ( QUnit.config.current.ignoreGlobalErrors ) { + return true; + } + QUnit.pushFailure( error, filePath + ":" + linerNr ); + } else { + QUnit.test( "global failure", extend( function() { + QUnit.pushFailure( error, filePath + ":" + linerNr ); + }, { validTest: validTest } ) ); + } + return false; + } + + return ret; +}; + +function done() { + config.autorun = true; + + // Log the last module results + if ( config.currentModule ) { + runLoggingCallbacks( "moduleDone", QUnit, { + name: config.currentModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + }); + } + + var i, key, + banner = id( "qunit-banner" ), + tests = id( "qunit-tests" ), + runtime = +new Date() - config.started, + passed = config.stats.all - config.stats.bad, + html = [ + "Tests completed in ", + runtime, + " milliseconds.
    ", + "", + passed, + " assertions of ", + config.stats.all, + " passed, ", + config.stats.bad, + " failed." + ].join( "" ); + + if ( banner ) { + banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" ); + } + + if ( tests ) { + id( "qunit-testresult" ).innerHTML = html; + } + + if ( config.altertitle && typeof document !== "undefined" && document.title ) { + // show ✖ for good, ✔ for bad suite result in title + // use escape sequences in case file gets loaded with non-utf-8-charset + document.title = [ + ( config.stats.bad ? "\u2716" : "\u2714" ), + document.title.replace( /^[\u2714\u2716] /i, "" ) + ].join( " " ); + } + + // clear own sessionStorage items if all tests passed + if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) { + // `key` & `i` initialized at top of scope + for ( i = 0; i < sessionStorage.length; i++ ) { + key = sessionStorage.key( i++ ); + if ( key.indexOf( "qunit-test-" ) === 0 ) { + sessionStorage.removeItem( key ); + } + } + } + + // scroll back to top to show results + if ( window.scrollTo ) { + window.scrollTo(0, 0); + } + + runLoggingCallbacks( "done", QUnit, { + failed: config.stats.bad, + passed: passed, + total: config.stats.all, + runtime: runtime + }); +} + +/** @return Boolean: true if this test should be ran */ +function validTest( test ) { + var include, + filter = config.filter && config.filter.toLowerCase(), + module = config.module && config.module.toLowerCase(), + fullName = (test.module + ": " + test.testName).toLowerCase(); + + // Internally-generated tests are always valid + if ( test.callback && test.callback.validTest === validTest ) { + delete test.callback.validTest; + return true; + } + + if ( config.testNumber ) { + return test.testNumber === config.testNumber; + } + + if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) { + return false; + } + + if ( !filter ) { + return true; + } + + include = filter.charAt( 0 ) !== "!"; + if ( !include ) { + filter = filter.slice( 1 ); + } + + // If the filter matches, we need to honour include + if ( fullName.indexOf( filter ) !== -1 ) { + return include; + } + + // Otherwise, do the opposite + return !include; +} + +// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions) +// Later Safari and IE10 are supposed to support error.stack as well +// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack +function extractStacktrace( e, offset ) { + offset = offset === undefined ? 3 : offset; + + var stack, include, i; + + if ( e.stacktrace ) { + // Opera + return e.stacktrace.split( "\n" )[ offset + 3 ]; + } else if ( e.stack ) { + // Firefox, Chrome + stack = e.stack.split( "\n" ); + if (/^error$/i.test( stack[0] ) ) { + stack.shift(); + } + if ( fileName ) { + include = []; + for ( i = offset; i < stack.length; i++ ) { + if ( stack[ i ].indexOf( fileName ) !== -1 ) { + break; + } + include.push( stack[ i ] ); + } + if ( include.length ) { + return include.join( "\n" ); + } + } + return stack[ offset ]; + } else if ( e.sourceURL ) { + // Safari, PhantomJS + // hopefully one day Safari provides actual stacktraces + // exclude useless self-reference for generated Error objects + if ( /qunit.js$/.test( e.sourceURL ) ) { + return; + } + // for actual exceptions, this is useful + return e.sourceURL + ":" + e.line; + } +} +function sourceFromStacktrace( offset ) { + try { + throw new Error(); + } catch ( e ) { + return extractStacktrace( e, offset ); + } +} + +/** + * Escape text for attribute or text content. + */ +function escapeText( s ) { + if ( !s ) { + return ""; + } + s = s + ""; + // Both single quotes and double quotes (for attributes) + return s.replace( /['"<>&]/g, function( s ) { + switch( s ) { + case '\'': + return '''; + case '"': + return '"'; + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + } + }); +} + +function synchronize( callback, last ) { + config.queue.push( callback ); + + if ( config.autorun && !config.blocking ) { + process( last ); + } +} + +function process( last ) { + function next() { + process( last ); + } + var start = new Date().getTime(); + config.depth = config.depth ? config.depth + 1 : 1; + + while ( config.queue.length && !config.blocking ) { + if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) { + config.queue.shift()(); + } else { + window.setTimeout( next, 13 ); + break; + } + } + config.depth--; + if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) { + done(); + } +} + +function saveGlobal() { + config.pollution = []; + + if ( config.noglobals ) { + for ( var key in window ) { + // in Opera sometimes DOM element ids show up here, ignore them + if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) { + continue; + } + config.pollution.push( key ); + } + } +} + +function checkPollution() { + var newGlobals, + deletedGlobals, + old = config.pollution; + + saveGlobal(); + + newGlobals = diff( config.pollution, old ); + if ( newGlobals.length > 0 ) { + QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") ); + } + + deletedGlobals = diff( old, config.pollution ); + if ( deletedGlobals.length > 0 ) { + QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") ); + } +} + +// returns a new Array with the elements that are in a but not in b +function diff( a, b ) { + var i, j, + result = a.slice(); + + for ( i = 0; i < result.length; i++ ) { + for ( j = 0; j < b.length; j++ ) { + if ( result[i] === b[j] ) { + result.splice( i, 1 ); + i--; + break; + } + } + } + return result; +} + +function extend( a, b ) { + for ( var prop in b ) { + if ( b[ prop ] === undefined ) { + delete a[ prop ]; + + // Avoid "Member not found" error in IE8 caused by setting window.constructor + } else if ( prop !== "constructor" || a !== window ) { + a[ prop ] = b[ prop ]; + } + } + + return a; +} + +/** + * @param {HTMLElement} elem + * @param {string} type + * @param {Function} fn + */ +function addEvent( elem, type, fn ) { + // Standards-based browsers + if ( elem.addEventListener ) { + elem.addEventListener( type, fn, false ); + // IE + } else { + elem.attachEvent( "on" + type, fn ); + } +} + +/** + * @param {Array|NodeList} elems + * @param {string} type + * @param {Function} fn + */ +function addEvents( elems, type, fn ) { + var i = elems.length; + while ( i-- ) { + addEvent( elems[i], type, fn ); + } +} + +function hasClass( elem, name ) { + return (" " + elem.className + " ").indexOf(" " + name + " ") > -1; +} + +function addClass( elem, name ) { + if ( !hasClass( elem, name ) ) { + elem.className += (elem.className ? " " : "") + name; + } +} + +function removeClass( elem, name ) { + var set = " " + elem.className + " "; + // Class name may appear multiple times + while ( set.indexOf(" " + name + " ") > -1 ) { + set = set.replace(" " + name + " " , " "); + } + // If possible, trim it for prettiness, but not neccecarily + elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set ); +} + +function id( name ) { + return !!( typeof document !== "undefined" && document && document.getElementById ) && + document.getElementById( name ); +} + +function registerLoggingCallback( key ) { + return function( callback ) { + config[key].push( callback ); + }; +} + +// Supports deprecated method of completely overwriting logging callbacks +function runLoggingCallbacks( key, scope, args ) { + var i, callbacks; + if ( QUnit.hasOwnProperty( key ) ) { + QUnit[ key ].call(scope, args ); + } else { + callbacks = config[ key ]; + for ( i = 0; i < callbacks.length; i++ ) { + callbacks[ i ].call( scope, args ); + } + } +} + +// Test for equality any JavaScript type. +// Author: Philippe Rathé +QUnit.equiv = (function() { + + // Call the o related callback with the given arguments. + function bindCallbacks( o, callbacks, args ) { + var prop = QUnit.objectType( o ); + if ( prop ) { + if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) { + return callbacks[ prop ].apply( callbacks, args ); + } else { + return callbacks[ prop ]; // or undefined + } + } + } + + // the real equiv function + var innerEquiv, + // stack to decide between skip/abort functions + callers = [], + // stack to avoiding loops from circular referencing + parents = [], + + getProto = Object.getPrototypeOf || function ( obj ) { + return obj.__proto__; + }, + callbacks = (function () { + + // for string, boolean, number and null + function useStrictEquality( b, a ) { + /*jshint eqeqeq:false */ + if ( b instanceof a.constructor || a instanceof b.constructor ) { + // to catch short annotaion VS 'new' annotation of a + // declaration + // e.g. var i = 1; + // var j = new Number(1); + return a == b; + } else { + return a === b; + } + } + + return { + "string": useStrictEquality, + "boolean": useStrictEquality, + "number": useStrictEquality, + "null": useStrictEquality, + "undefined": useStrictEquality, + + "nan": function( b ) { + return isNaN( b ); + }, + + "date": function( b, a ) { + return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf(); + }, + + "regexp": function( b, a ) { + return QUnit.objectType( b ) === "regexp" && + // the regex itself + a.source === b.source && + // and its modifers + a.global === b.global && + // (gmi) ... + a.ignoreCase === b.ignoreCase && + a.multiline === b.multiline && + a.sticky === b.sticky; + }, + + // - skip when the property is a method of an instance (OOP) + // - abort otherwise, + // initial === would have catch identical references anyway + "function": function() { + var caller = callers[callers.length - 1]; + return caller !== Object && typeof caller !== "undefined"; + }, + + "array": function( b, a ) { + var i, j, len, loop; + + // b could be an object literal here + if ( QUnit.objectType( b ) !== "array" ) { + return false; + } + + len = a.length; + if ( len !== b.length ) { + // safe and faster + return false; + } + + // track reference to avoid circular references + parents.push( a ); + for ( i = 0; i < len; i++ ) { + loop = false; + for ( j = 0; j < parents.length; j++ ) { + if ( parents[j] === a[i] ) { + loop = true;// dont rewalk array + } + } + if ( !loop && !innerEquiv(a[i], b[i]) ) { + parents.pop(); + return false; + } + } + parents.pop(); + return true; + }, + + "object": function( b, a ) { + var i, j, loop, + // Default to true + eq = true, + aProperties = [], + bProperties = []; + + // comparing constructors is more strict than using + // instanceof + if ( a.constructor !== b.constructor ) { + // Allow objects with no prototype to be equivalent to + // objects with Object as their constructor. + if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) || + ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) { + return false; + } + } + + // stack constructor before traversing properties + callers.push( a.constructor ); + // track reference to avoid circular references + parents.push( a ); + + for ( i in a ) { // be strict: don't ensures hasOwnProperty + // and go deep + loop = false; + for ( j = 0; j < parents.length; j++ ) { + if ( parents[j] === a[i] ) { + // don't go down the same path twice + loop = true; + } + } + aProperties.push(i); // collect a's properties + + if (!loop && !innerEquiv( a[i], b[i] ) ) { + eq = false; + break; + } + } + + callers.pop(); // unstack, we are done + parents.pop(); + + for ( i in b ) { + bProperties.push( i ); // collect b's properties + } + + // Ensures identical properties name + return eq && innerEquiv( aProperties.sort(), bProperties.sort() ); + } + }; + }()); + + innerEquiv = function() { // can take multiple arguments + var args = [].slice.apply( arguments ); + if ( args.length < 2 ) { + return true; // end transition + } + + return (function( a, b ) { + if ( a === b ) { + return true; // catch the most you can + } else if ( a === null || b === null || typeof a === "undefined" || + typeof b === "undefined" || + QUnit.objectType(a) !== QUnit.objectType(b) ) { + return false; // don't lose time with error prone cases + } else { + return bindCallbacks(a, callbacks, [ b, a ]); + } + + // apply transition with (1..n) arguments + }( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) ); + }; + + return innerEquiv; +}()); + +/** + * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | + * http://flesler.blogspot.com Licensed under BSD + * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008 + * + * @projectDescription Advanced and extensible data dumping for Javascript. + * @version 1.0.0 + * @author Ariel Flesler + * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} + */ +QUnit.jsDump = (function() { + function quote( str ) { + return '"' + str.toString().replace( /"/g, '\\"' ) + '"'; + } + function literal( o ) { + return o + ""; + } + function join( pre, arr, post ) { + var s = jsDump.separator(), + base = jsDump.indent(), + inner = jsDump.indent(1); + if ( arr.join ) { + arr = arr.join( "," + s + inner ); + } + if ( !arr ) { + return pre + post; + } + return [ pre, inner + arr, base + post ].join(s); + } + function array( arr, stack ) { + var i = arr.length, ret = new Array(i); + this.up(); + while ( i-- ) { + ret[i] = this.parse( arr[i] , undefined , stack); + } + this.down(); + return join( "[", ret, "]" ); + } + + var reName = /^function (\w+)/, + jsDump = { + // type is used mostly internally, you can fix a (custom)type in advance + parse: function( obj, type, stack ) { + stack = stack || [ ]; + var inStack, res, + parser = this.parsers[ type || this.typeOf(obj) ]; + + type = typeof parser; + inStack = inArray( obj, stack ); + + if ( inStack !== -1 ) { + return "recursion(" + (inStack - stack.length) + ")"; + } + if ( type === "function" ) { + stack.push( obj ); + res = parser.call( this, obj, stack ); + stack.pop(); + return res; + } + return ( type === "string" ) ? parser : this.parsers.error; + }, + typeOf: function( obj ) { + var type; + if ( obj === null ) { + type = "null"; + } else if ( typeof obj === "undefined" ) { + type = "undefined"; + } else if ( QUnit.is( "regexp", obj) ) { + type = "regexp"; + } else if ( QUnit.is( "date", obj) ) { + type = "date"; + } else if ( QUnit.is( "function", obj) ) { + type = "function"; + } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) { + type = "window"; + } else if ( obj.nodeType === 9 ) { + type = "document"; + } else if ( obj.nodeType ) { + type = "node"; + } else if ( + // native arrays + toString.call( obj ) === "[object Array]" || + // NodeList objects + ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) ) + ) { + type = "array"; + } else if ( obj.constructor === Error.prototype.constructor ) { + type = "error"; + } else { + type = typeof obj; + } + return type; + }, + separator: function() { + return this.multiline ? this.HTML ? "
    " : "\n" : this.HTML ? " " : " "; + }, + // extra can be a number, shortcut for increasing-calling-decreasing + indent: function( extra ) { + if ( !this.multiline ) { + return ""; + } + var chr = this.indentChar; + if ( this.HTML ) { + chr = chr.replace( /\t/g, " " ).replace( / /g, " " ); + } + return new Array( this._depth_ + (extra||0) ).join(chr); + }, + up: function( a ) { + this._depth_ += a || 1; + }, + down: function( a ) { + this._depth_ -= a || 1; + }, + setParser: function( name, parser ) { + this.parsers[name] = parser; + }, + // The next 3 are exposed so you can use them + quote: quote, + literal: literal, + join: join, + // + _depth_: 1, + // This is the list of parsers, to modify them, use jsDump.setParser + parsers: { + window: "[Window]", + document: "[Document]", + error: function(error) { + return "Error(\"" + error.message + "\")"; + }, + unknown: "[Unknown]", + "null": "null", + "undefined": "undefined", + "function": function( fn ) { + var ret = "function", + // functions never have name in IE + name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1]; + + if ( name ) { + ret += " " + name; + } + ret += "( "; + + ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" ); + return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" ); + }, + array: array, + nodelist: array, + "arguments": array, + object: function( map, stack ) { + var ret = [ ], keys, key, val, i; + QUnit.jsDump.up(); + keys = []; + for ( key in map ) { + keys.push( key ); + } + keys.sort(); + for ( i = 0; i < keys.length; i++ ) { + key = keys[ i ]; + val = map[ key ]; + ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) ); + } + QUnit.jsDump.down(); + return join( "{", ret, "}" ); + }, + node: function( node ) { + var len, i, val, + open = QUnit.jsDump.HTML ? "<" : "<", + close = QUnit.jsDump.HTML ? ">" : ">", + tag = node.nodeName.toLowerCase(), + ret = open + tag, + attrs = node.attributes; + + if ( attrs ) { + for ( i = 0, len = attrs.length; i < len; i++ ) { + val = attrs[i].nodeValue; + // IE6 includes all attributes in .attributes, even ones not explicitly set. + // Those have values like undefined, null, 0, false, "" or "inherit". + if ( val && val !== "inherit" ) { + ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" ); + } + } + } + ret += close; + + // Show content of TextNode or CDATASection + if ( node.nodeType === 3 || node.nodeType === 4 ) { + ret += node.nodeValue; + } + + return ret + open + "/" + tag + close; + }, + // function calls it internally, it's the arguments part of the function + functionArgs: function( fn ) { + var args, + l = fn.length; + + if ( !l ) { + return ""; + } + + args = new Array(l); + while ( l-- ) { + // 97 is 'a' + args[l] = String.fromCharCode(97+l); + } + return " " + args.join( ", " ) + " "; + }, + // object calls it internally, the key part of an item in a map + key: quote, + // function calls it internally, it's the content of the function + functionCode: "[code]", + // node calls it internally, it's an html attribute value + attribute: quote, + string: quote, + date: quote, + regexp: literal, + number: literal, + "boolean": literal + }, + // if true, entities are escaped ( <, >, \t, space and \n ) + HTML: false, + // indentation unit + indentChar: " ", + // if true, items in a collection, are separated by a \n, else just a space. + multiline: true + }; + + return jsDump; +}()); + +// from jquery.js +function inArray( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; +} + +/* + * Javascript Diff Algorithm + * By John Resig (http://ejohn.org/) + * Modified by Chu Alan "sprite" + * + * Released under the MIT license. + * + * More Info: + * http://ejohn.org/projects/javascript-diff-algorithm/ + * + * Usage: QUnit.diff(expected, actual) + * + * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick brown fox jumped jumps over" + */ +QUnit.diff = (function() { + /*jshint eqeqeq:false, eqnull:true */ + function diff( o, n ) { + var i, + ns = {}, + os = {}; + + for ( i = 0; i < n.length; i++ ) { + if ( !hasOwn.call( ns, n[i] ) ) { + ns[ n[i] ] = { + rows: [], + o: null + }; + } + ns[ n[i] ].rows.push( i ); + } + + for ( i = 0; i < o.length; i++ ) { + if ( !hasOwn.call( os, o[i] ) ) { + os[ o[i] ] = { + rows: [], + n: null + }; + } + os[ o[i] ].rows.push( i ); + } + + for ( i in ns ) { + if ( !hasOwn.call( ns, i ) ) { + continue; + } + if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) { + n[ ns[i].rows[0] ] = { + text: n[ ns[i].rows[0] ], + row: os[i].rows[0] + }; + o[ os[i].rows[0] ] = { + text: o[ os[i].rows[0] ], + row: ns[i].rows[0] + }; + } + } + + for ( i = 0; i < n.length - 1; i++ ) { + if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null && + n[ i + 1 ] == o[ n[i].row + 1 ] ) { + + n[ i + 1 ] = { + text: n[ i + 1 ], + row: n[i].row + 1 + }; + o[ n[i].row + 1 ] = { + text: o[ n[i].row + 1 ], + row: i + 1 + }; + } + } + + for ( i = n.length - 1; i > 0; i-- ) { + if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null && + n[ i - 1 ] == o[ n[i].row - 1 ]) { + + n[ i - 1 ] = { + text: n[ i - 1 ], + row: n[i].row - 1 + }; + o[ n[i].row - 1 ] = { + text: o[ n[i].row - 1 ], + row: i - 1 + }; + } + } + + return { + o: o, + n: n + }; + } + + return function( o, n ) { + o = o.replace( /\s+$/, "" ); + n = n.replace( /\s+$/, "" ); + + var i, pre, + str = "", + out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ), + oSpace = o.match(/\s+/g), + nSpace = n.match(/\s+/g); + + if ( oSpace == null ) { + oSpace = [ " " ]; + } + else { + oSpace.push( " " ); + } + + if ( nSpace == null ) { + nSpace = [ " " ]; + } + else { + nSpace.push( " " ); + } + + if ( out.n.length === 0 ) { + for ( i = 0; i < out.o.length; i++ ) { + str += "" + out.o[i] + oSpace[i] + ""; + } + } + else { + if ( out.n[0].text == null ) { + for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) { + str += "" + out.o[n] + oSpace[n] + ""; + } + } + + for ( i = 0; i < out.n.length; i++ ) { + if (out.n[i].text == null) { + str += "" + out.n[i] + nSpace[i] + ""; + } + else { + // `pre` initialized at top of scope + pre = ""; + + for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) { + pre += "" + out.o[n] + oSpace[n] + ""; + } + str += " " + out.n[i].text + nSpace[i] + pre; + } + } + } + + return str; + }; +}()); + +// for CommonJS enviroments, export everything +if ( typeof exports !== "undefined" ) { + extend( exports, QUnit ); +} + +// get at whatever the global object is, like window in browsers +}( (function() {return this;}.call()) )); diff --git a/test/test-data.js b/test/test-data.js new file mode 100644 index 0000000..909cb69 --- /dev/null +++ b/test/test-data.js @@ -0,0 +1,53 @@ +var TestData = function() { + + var util = new app.crypto.Util(window, uuid); + + this.getEmailCollection = function(size) { + // create test data + var i, mail, envelope, collection = new app.model.EmailCollection(); + + for (i = 0; i < size; i++) { + mail = new app.model.Email({ + id: i, + from:'john@from.com', + to:['jack@to.com'], + subject: 'Important stuff ' + i, + sentDate: '15:00', + body: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,' + }); + + collection.add(mail); + } + + return collection; + }; + + this.packageCollectionForEncryption= function(collection, keySize, ivSize) { + // package json objects for batch encrytion + var envelope, envelopes = []; + + collection.forEach(function(model) { + envelope = { + id: model.id, + plaintext: model.toJSON(), + key: util.random(keySize), + iv: util.random(ivSize) + }; + + envelopes.push(envelope); + }); + + return envelopes; + }; + + this.generateBigString = function(iterations) { + var test_message = ''; + // generate test data + for (var i=0; i < iterations; i++) { + test_message += 'aslghaksfdhsakjzfgasjfdgsauk'; + } + + return test_message; + }; + +}; \ No newline at end of file diff --git a/test/unit/aes-test.js b/test/unit/aes-test.js new file mode 100644 index 0000000..18e87eb --- /dev/null +++ b/test/unit/aes-test.js @@ -0,0 +1,57 @@ +module("AES Crypto"); + +var aes_test = { + keySize: 128 +}; + +test("Init", 1, function() { + // init dependencies + aes_test.util = new app.crypto.Util(window, uuid); + ok(aes_test.util, 'Util'); + // generate test data + aes_test.test_message = new TestData().generateBigString(1000); +}); + +test("CBC mode", 4, function() { + var aes = new app.crypto.AesCBC(); + + var plaintext = aes_test.test_message; + var key = aes_test.util.random(aes_test.keySize); + var iv = aes_test.util.random(aes_test.keySize); + ok(key, 'Key: ' + key); + equal(CryptoJS.enc.Base64.parse(key).sigBytes * 8, aes_test.keySize, 'Keysize ' + aes_test.keySize); + + var ciphertext = aes.encrypt(plaintext, key, iv); + ok(ciphertext, 'Ciphertext lenght: ' + ciphertext.length); + + var decrypted = aes.decrypt(ciphertext, key, iv); + equal(decrypted, plaintext, 'Decryption correct' + decrypted); +}); + +test("CCM mode", 2, function() { + var aes = new app.crypto.AesCCM(); + + var plaintext = aes_test.test_message; + var key = aes_test.util.random(aes_test.keySize); + var iv = aes_test.util.random(104); + + var ciphertext = aes.encrypt(plaintext, key, iv); + ok(ciphertext, 'Ciphertext length: ' + ciphertext.length); + + var decrypted = aes.decrypt(ciphertext, key, iv); + equal(decrypted, plaintext, 'Decryption correct: ' + decrypted); +}); + +// test("GCM mode", 2, function() { +// var aes = new app.crypto.AesGCM(); +// +// var plaintext = aes_test.test_message; +// var key = aes_test.util.random(aes_test.keySize); +// var iv = aes_test.util.random(104); +// +// var ciphertext = aes.encrypt(plaintext, key, iv); +// ok(ciphertext, 'Ciphertext length: ' + ciphertext.length); +// +// var decrypted = aes.decrypt(ciphertext, key, iv); +// equal(decrypted, plaintext, 'Decryption correct: ' + decrypted); +// }); \ No newline at end of file diff --git a/test/unit/crypto-test.js b/test/unit/crypto-test.js new file mode 100644 index 0000000..2cfe475 --- /dev/null +++ b/test/unit/crypto-test.js @@ -0,0 +1,114 @@ +module("Crypto Api"); + +var crypto_test = { + user: 'crypto_test@example.com', + password: 'Password', + keySize: 128, + ivSize: 104 +}; + +asyncTest("Init", 2, function() { + // init dependencies + crypto_test.util = new app.crypto.Util(window, uuid); + crypto_test.crypto = new app.crypto.Crypto(window, crypto_test.util); + ok(crypto_test.crypto, 'Crypto'); + + crypto_test.crypto.init(crypto_test.user, crypto_test.password, crypto_test.keySize, crypto_test.ivSize, function() { + ok(true, 'Init crypto'); + + start(); + }); +}); + +asyncTest("PBKDF2 (Async/Worker)", 1, function() { + crypto_test.crypto.deriveKey(crypto_test.password, crypto_test.keySize, function(key) { + equal(CryptoJS.enc.Base64.parse(key).sigBytes * 8, crypto_test.keySize, 'Keysize ' + crypto_test.keySize); + + start(); + }); +}); + +asyncTest("En/Decrypt for User", 4, function() { + var secret = "Secret stuff"; + + var itemKey = crypto_test.util.random(crypto_test.keySize); + var itemIV = crypto_test.util.random(crypto_test.ivSize); + var keyIV = crypto_test.util.random(crypto_test.ivSize); + + crypto_test.crypto.aesEncrypt(secret, itemKey, itemIV, function(ciphertext) { + ok(ciphertext, 'Encrypt item'); + + crypto_test.crypto.aesEncryptForUser(itemKey, keyIV, function(encryptedKey) { + ok(encryptedKey, 'Encrypt item key'); + + crypto_test.crypto.aesDecryptForUser(encryptedKey, keyIV, function(decryptedKey) { + equal(decryptedKey, itemKey, 'Decrypt item key'); + + crypto_test.crypto.aesDecrypt(ciphertext, decryptedKey, itemIV, function(decrypted) { + equal(decrypted, secret, 'Decrypt item'); + + start(); + }); + }); + }); + }); +}); + +asyncTest("CCM mode (Async/Worker)", 2, function() { + var secret = 'Big secret'; + + var key = crypto_test.util.random(crypto_test.keySize); + var iv = crypto_test.util.random(crypto_test.ivSize); + + crypto_test.crypto.aesEncrypt(secret, key, iv, function(ciphertext) { + ok(ciphertext, 'Encrypt item'); + + crypto_test.crypto.aesDecrypt(ciphertext, key, iv, function(decrypted) { + equal(decrypted, secret, 'Decrypt item'); + + start(); + }); + }); +}); + +asyncTest("CCM batch mode (Async/Worker)", 5, function() { + // generate test data + var collection, list, td = new TestData(); + + collection = td.getEmailCollection(100); + list = td.packageCollectionForEncryption(collection, crypto_test.keySize, crypto_test.ivSize); + + crypto_test.crypto.aesEncryptList(list, function(encryptedList) { + ok(encryptedList, 'Encrypt list'); + equal(encryptedList.length, list.length, 'Length of list'); + + crypto_test.crypto.aesDecryptList(encryptedList, function(decryptedList) { + ok(decryptedList, 'Decrypt list'); + equal(decryptedList.length, list.length, 'Length of list'); + deepEqual(decryptedList, list, 'Decrypted list is correct'); + + start(); + }); + }); +}); + +asyncTest("CCM batch mode for User (Async/Worker)", 5, function() { + // generate test data + var collection, list, td = new TestData(); + + collection = td.getEmailCollection(100); + list = collection.toJSON(); + + crypto_test.crypto.aesEncryptListForUser(list, function(encryptedList) { + ok(encryptedList, 'Encrypt list for user'); + equal(encryptedList.length, list.length, 'Length of list'); + + crypto_test.crypto.aesDecryptListForUser(encryptedList, function(decryptedList) { + ok(decryptedList, 'Decrypt list'); + equal(decryptedList.length, list.length, 'Length of list'); + deepEqual(decryptedList, list, 'Decrypted list is correct'); + + start(); + }); + }); +}); \ No newline at end of file diff --git a/test/unit/devicestorage-test.js b/test/unit/devicestorage-test.js new file mode 100644 index 0000000..557a209 --- /dev/null +++ b/test/unit/devicestorage-test.js @@ -0,0 +1,73 @@ +module("DeviceStorage"); + +var devicestorage_test = { + user: 'devicestorage_test@example.com', + password: 'Password', + keySize: 128, + ivSize: 128 +}; + +asyncTest("Init", 3, function() { + // init dependencies + devicestorage_test.util = new app.crypto.Util(window, uuid); + devicestorage_test.jsonDao = new app.dao.LawnchairDAO(window); + devicestorage_test.crypto = new app.crypto.Crypto(window, devicestorage_test.util); + devicestorage_test.storage = new app.dao.DeviceStorage(devicestorage_test.crypto, devicestorage_test.jsonDao, null); + ok(devicestorage_test.storage, 'DeviceStorageDAO'); + + // generate test data + devicestorage_test.list = new TestData().getEmailCollection(100).toJSON(); + + // init crypto + devicestorage_test.crypto.init(devicestorage_test.user, devicestorage_test.password, devicestorage_test.keySize, devicestorage_test.ivSize, function() { + ok(true, 'Crypto initialized'); + + // clear db before tests + devicestorage_test.jsonDao.clear(function(err) { + ok(!err, 'DB cleared. Error status: ' + err); + + start(); + }); + + }); +}); + +asyncTest("Encrypt list for user", 1, function() { + devicestorage_test.crypto.aesEncryptListForUser(devicestorage_test.list, function(encryptedList) { + equal(encryptedList.length, devicestorage_test.list.length, 'Encrypt list'); + + devicestorage_test.encryptedList = encryptedList; + start(); + }); +}); + +asyncTest("Store encrypted list", 1, function() { + devicestorage_test.storage.storeEcryptedList(devicestorage_test.encryptedList, 'email_inbox', function() { + ok(true, 'Store encrypted list'); + + start(); + }); +}); + +asyncTest("List items", 2, function() { + + var offset = 2, + num = 6; + + // list items from storage (decrypted) + devicestorage_test.storage.listItems('email_inbox_5',offset ,num, function(decryptedList) { + equal(decryptedList.length, num, 'Found ' + decryptedList.length + ' items in store (and decrypted)'); + + var decrypted, orig = devicestorage_test.list[54]; + + // check ids + for (var i = 0; i < decryptedList.length; i++) { + if (decryptedList[i].id === orig.id && decryptedList[i].from === orig.from) { + deepEqual(decryptedList[i], orig, 'Messages decrypted correctly'); + break; + } + } + + start(); + }); +}); \ No newline at end of file diff --git a/test/unit/email-dao-test.js b/test/unit/email-dao-test.js new file mode 100644 index 0000000..384be39 --- /dev/null +++ b/test/unit/email-dao-test.js @@ -0,0 +1,70 @@ +module("Email DAO"); + +var emaildao_test = { + user: 'test@atlasdev.onmicrosoft.com', + password: 'Xoza76645', + keySize: 128, + ivSize: 104 +}; + +asyncTest("Init", 2, function() { + // init dependencies + var util = new app.crypto.Util(window, uuid); + var jsonDao = new app.dao.LawnchairDAO(window); + emaildao_test.crypto = new app.crypto.Crypto(window, util); + emaildao_test.storage = new app.dao.DeviceStorage(emaildao_test.crypto, jsonDao, null); + // cloud storage stub + var cloudstorageStub = { + getUserSecretKey: function(emailAdress, callback) { callback(); } + }; + emaildao_test.emailDao = new app.dao.EmailDAO(_, emaildao_test.crypto, emaildao_test.storage, cloudstorageStub); + + // generate test data + emaildao_test.list = new TestData().getEmailCollection(10); + + var account = new app.model.Account({ + emailAddress: emaildao_test.user, + symKeySize: emaildao_test.keySize, + symIvSize: emaildao_test.ivSize + }); + + emaildao_test.emailDao.init(account, emaildao_test.password, function() { + equal(emaildao_test.emailDao.account.get('emailAddress'), emaildao_test.user, 'Email DAO Account'); + + // clear db before tests + jsonDao.clear(function(err) { + ok(!err, 'DB cleared. Error status: ' + err); + + start(); + }); + }); +}); + +asyncTest("Persist test emails", 2, function() { + emaildao_test.crypto.aesEncryptListForUser(emaildao_test.list.toJSON(), function(encryptedList) { + equal(encryptedList.length, emaildao_test.list.length, 'Encrypt list'); + + emaildao_test.storage.storeEcryptedList(encryptedList, 'email_inbox', function() { + ok(true, 'Store encrypted list'); + + start(); + }); + }); +}); + +asyncTest("List Email models", 1, function() { + emaildao_test.emailDao.listItems('inbox', 0, emaildao_test.list.length, function(collection) { + var gotten = collection.toJSON(), + reference = emaildao_test.list.toJSON(); + deepEqual(gotten, reference, 'Collection length'); + + start(); + }); +}); + +asyncTest("Get item", 1, function() { + var item = emaildao_test.list.toJSON()[0]; + var mail = emaildao_test.emailDao.getItem('inbox', item.id); + deepEqual(mail.toJSON(), item, 'Item correct'); + start(); +}); diff --git a/test/unit/index.html b/test/unit/index.html new file mode 100644 index 0000000..7c44b7f --- /dev/null +++ b/test/unit/index.html @@ -0,0 +1,81 @@ + + + + + JavaScript Unit Tests + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/unit/lawnchair-dao-test.js b/test/unit/lawnchair-dao-test.js new file mode 100644 index 0000000..c9549b6 --- /dev/null +++ b/test/unit/lawnchair-dao-test.js @@ -0,0 +1,62 @@ +module("Lawnchair DAO"); + +var lawnchairdao_test = {}; + +asyncTest("Init", 2, function() { + // init dependencies + lawnchairdao_test.jsonDao = new app.dao.LawnchairDAO(window); + ok(lawnchairdao_test.jsonDao, 'LanwchairDAO'); + + // clear db before test + lawnchairdao_test.jsonDao.clear(function() { + ok(true, 'cleared db'); + + start(); + }); +}); + +asyncTest("CRUD object literal", 4, function() { + + var key = 'type_asdf'; + var data = { + name : 'testName', + type : 'testType' + }; + + // create + lawnchairdao_test.jsonDao.persist(key, data, function() { + + // read + lawnchairdao_test.jsonDao.read(key, function(read) { + equal(data.name, read.name, 'Create, Read'); + + // list all + lawnchairdao_test.jsonDao.list('type',0 ,null, function(list) { + ok(list.length === 1, 'List'); + + // update + var newName = 'updatedName'; + read.name = newName; + lawnchairdao_test.jsonDao.persist(key, read, function() { + + // read again + lawnchairdao_test.jsonDao.read(key, function(updated) { + equal(updated.name, newName, 'Update'); + + // delete + lawnchairdao_test.jsonDao.remove(key, function() { + + // should read empty + lawnchairdao_test.jsonDao.read(key, function(lastRead) { + equal(lastRead, null, 'Delete'); + + start(); + }); + }); + + }); + }); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/unit/localstorage-dao-test.js b/test/unit/localstorage-dao-test.js new file mode 100644 index 0000000..e031ef4 --- /dev/null +++ b/test/unit/localstorage-dao-test.js @@ -0,0 +1,36 @@ +module("LocalStorage DAO"); + +test("CRUD object literal", 4, function() { + var dao = new app.dao.LocalStorageDAO(window); + + // clear before test + dao.clear(); + + var key = 'type_asdf'; + var data = { + name : 'testName', + type : 'testType' + }; + + // create + dao.persist(key, data); + + // read + var read = dao.read(key); + equal(data.name, read.name, 'Create, Read'); + + // list all + var list = dao.list('type'); + ok(list.length === 1, 'List'); + + // update + var newName = 'updatedName'; + read.name = newName; + dao.persist(key, read); + var updated = dao.read(key); + equal(updated.name, newName, 'Update'); + + // delete + dao.remove(key); + equal(dao.read(key), null, 'Delete'); +}); \ No newline at end of file diff --git a/test/unit/util-test.js b/test/unit/util-test.js new file mode 100644 index 0000000..7f5654a --- /dev/null +++ b/test/unit/util-test.js @@ -0,0 +1,50 @@ +module("Util"); + +test("JQuery and basic requirements", 7, function() { + ok( Array.prototype.push, "Array.push()" ); + ok( Function.prototype.apply, "Function.apply()" ); + ok( document.getElementById, "getElementById" ); + ok( document.getElementsByTagName, "getElementsByTagName" ); + ok( RegExp, "RegExp" ); + ok( jQuery, "jQuery" ); + ok( $, "$" ); +}); + +test("UUID", 2, function() { + var util = new app.crypto.Util(window, uuid); + var id = util.UUID(); + ok(id, "UUID: " + id); + ok(id.length === 36, "UUID length"); +}); + +test("random", 3, function() { + var util = new app.crypto.Util(window, uuid); + var base64 = util.random(128); + var str = window.atob(base64); + ok(base64, "Random base64: " + base64); + ok(str, "Random binary string: " + str); + ok(str.length === 16, "Random length"); +}); + +test("String -> ArrayBuffer -> String", 3, function() { + var util = new app.crypto.Util(window); + + var input = "asdf"; + var buf = util.binStr2ArrBuf(input); + ok(buf); + + // test slow conversion in js + var binStr = util.arrBuf2BinStr(buf); + ok(binStr); + equal(binStr, input); + + // // test native conversion with BlobBuilder Api + // var blob = util.arrBuf2Blob(buf, 'application/octet-stream'); + // ok(blob); + // + // util.blob2BinStr(blob, function(output) { + // equal(output, input); + // + // start(); + // }); +});