├── README.md ├── css ├── bootstrap.min.css ├── glyphicons.css └── style.css ├── favicon.ico ├── fonts ├── glyphicons-iefix.eot ├── glyphicons-regular.eot ├── glyphicons-regular.svg ├── glyphicons-regular.ttf ├── glyphicons-regular.woff └── glyphicons-regular.woff2 ├── index.html └── js ├── BaBScriptTest.js ├── core.js ├── hmac.js └── sha256.js /README.md: -------------------------------------------------------------------------------- 1 | # Ethercrash Script Simulator 2 | -------------------------------------------------------------------------------- /css/glyphicons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Glyphicons Regular'; 3 | src: url('../fonts/glyphicons-regular.eot'); 4 | src: url('../fonts/glyphicons-iefix.eot') format('embedded-opentype'), url('../fonts/glyphicons-regular.woff2') format('woff2'), url('../fonts/glyphicons-regular.woff') format('woff'), url('../fonts/glyphicons-regular.ttf') format('truetype'), url('../fonts/glyphicons-regular.svg') format('svg') 5 | } 6 | 7 | .glyphicons { 8 | display: inline-block; 9 | font-family: 'Glyphicons Regular'; 10 | font-style: normal; 11 | font-weight: normal; 12 | line-height: 1; 13 | vertical-align: top; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale 16 | } 17 | 18 | .glyphicons.x05 { 19 | font-size: 12px 20 | } 21 | 22 | .glyphicons.x2 { 23 | font-size: 48px 24 | } 25 | 26 | .glyphicons.x2:before { 27 | padding: 8px 12px 28 | } 29 | 30 | .glyphicons.x3 { 31 | font-size: 72px 32 | } 33 | 34 | .glyphicons.x3:before { 35 | padding: 16px 20px 36 | } 37 | 38 | .glyphicons.x4 { 39 | font-size: 96px 40 | } 41 | 42 | .glyphicons.x4:before { 43 | padding: 20px 28px 44 | } 45 | 46 | .glyphicons.x5 { 47 | font-size: 120px 48 | } 49 | 50 | .glyphicons.x5:before { 51 | padding: 28px 36px 52 | } 53 | 54 | .glyphicons.light:before { 55 | color: #f2f2f2 56 | } 57 | 58 | .glyphicons.drop:before { 59 | text-shadow: -1px 1px 3px rgba(0, 0, 0, 0.3) 60 | } 61 | 62 | .glyphicons.flip { 63 | -moz-transform: scaleX(-1); 64 | -o-transform: scaleX(-1); 65 | -webkit-transform: scaleX(-1); 66 | transform: scaleX(-1); 67 | filter: FlipH; 68 | -ms-filter: "FlipH" 69 | } 70 | 71 | .glyphicons.flipv { 72 | -moz-transform: scaleY(-1); 73 | -o-transform: scaleY(-1); 74 | -webkit-transform: scaleY(-1); 75 | transform: scaleY(-1); 76 | filter: FlipV; 77 | -ms-filter: "FlipV" 78 | } 79 | 80 | .glyphicons.rotate90 { 81 | -webkit-transform: rotate(90deg); 82 | -moz-transform: rotate(90deg); 83 | -ms-transform: rotate(90deg); 84 | transform: rotate(90deg) 85 | } 86 | 87 | .glyphicons.rotate180 { 88 | -webkit-transform: rotate(180deg); 89 | -moz-transform: rotate(180deg); 90 | -ms-transform: rotate(180deg); 91 | transform: rotate(180deg) 92 | } 93 | 94 | .glyphicons.rotate270 { 95 | -webkit-transform: rotate(270deg); 96 | -moz-transform: rotate(270deg); 97 | -ms-transform: rotate(270deg); 98 | transform: rotate(270deg) 99 | } 100 | 101 | .glyphicons-glass:before { 102 | content: "\E001" 103 | } 104 | 105 | .glyphicons-leaf:before { 106 | content: "\E002" 107 | } 108 | 109 | .glyphicons-dog:before { 110 | content: "\E003" 111 | } 112 | 113 | .glyphicons-user:before { 114 | content: "\E004" 115 | } 116 | 117 | .glyphicons-girl:before { 118 | content: "\E005" 119 | } 120 | 121 | .glyphicons-car:before { 122 | content: "\E006" 123 | } 124 | 125 | .glyphicons-user-add:before { 126 | content: "\E007" 127 | } 128 | 129 | .glyphicons-user-remove:before { 130 | content: "\E008" 131 | } 132 | 133 | .glyphicons-film:before { 134 | content: "\E009" 135 | } 136 | 137 | .glyphicons-magic:before { 138 | content: "\E010" 139 | } 140 | 141 | .glyphicons-envelope:before { 142 | content: "\E011" 143 | } 144 | 145 | .glyphicons-camera:before { 146 | content: "\E012" 147 | } 148 | 149 | .glyphicons-heart:before { 150 | content: "\E013" 151 | } 152 | 153 | .glyphicons-beach-umbrella:before { 154 | content: "\E014" 155 | } 156 | 157 | .glyphicons-train:before { 158 | content: "\E015" 159 | } 160 | 161 | .glyphicons-print:before { 162 | content: "\E016" 163 | } 164 | 165 | .glyphicons-bin:before { 166 | content: "\E017" 167 | } 168 | 169 | .glyphicons-music:before { 170 | content: "\E018" 171 | } 172 | 173 | .glyphicons-music-alt:before { 174 | content: "\E019" 175 | } 176 | 177 | .glyphicons-heart-empty:before { 178 | content: "\E020" 179 | } 180 | 181 | .glyphicons-home:before { 182 | content: "\E021" 183 | } 184 | 185 | .glyphicons-snowflake:before { 186 | content: "\E022" 187 | } 188 | 189 | .glyphicons-fire:before { 190 | content: "\E023" 191 | } 192 | 193 | .glyphicons-magnet:before { 194 | content: "\E024" 195 | } 196 | 197 | .glyphicons-parents:before { 198 | content: "\E025" 199 | } 200 | 201 | .glyphicons-binoculars:before { 202 | content: "\E026" 203 | } 204 | 205 | .glyphicons-road:before { 206 | content: "\E027" 207 | } 208 | 209 | .glyphicons-search:before { 210 | content: "\E028" 211 | } 212 | 213 | .glyphicons-cars:before { 214 | content: "\E029" 215 | } 216 | 217 | .glyphicons-notes-2:before { 218 | content: "\E030" 219 | } 220 | 221 | .glyphicons-pencil:before { 222 | content: "\E031" 223 | } 224 | 225 | .glyphicons-bus:before { 226 | content: "\E032" 227 | } 228 | 229 | .glyphicons-wifi-alt:before { 230 | content: "\E033" 231 | } 232 | 233 | .glyphicons-luggage:before { 234 | content: "\E034" 235 | } 236 | 237 | .glyphicons-old-man:before { 238 | content: "\E035" 239 | } 240 | 241 | .glyphicons-woman:before { 242 | content: "\E036" 243 | } 244 | 245 | .glyphicons-file:before { 246 | content: "\E037" 247 | } 248 | 249 | .glyphicons-coins:before { 250 | content: "\E038" 251 | } 252 | 253 | .glyphicons-plane:before { 254 | content: "\E039" 255 | } 256 | 257 | .glyphicons-notes:before { 258 | content: "\E040" 259 | } 260 | 261 | .glyphicons-stats:before { 262 | content: "\E041" 263 | } 264 | 265 | .glyphicons-charts:before { 266 | content: "\E042" 267 | } 268 | 269 | .glyphicons-pie-chart:before { 270 | content: "\E043" 271 | } 272 | 273 | .glyphicons-group:before { 274 | content: "\E044" 275 | } 276 | 277 | .glyphicons-keys:before { 278 | content: "\E045" 279 | } 280 | 281 | .glyphicons-calendar:before { 282 | content: "\E046" 283 | } 284 | 285 | .glyphicons-router:before { 286 | content: "\E047" 287 | } 288 | 289 | .glyphicons-camera-small:before { 290 | content: "\E048" 291 | } 292 | 293 | .glyphicons-star-empty:before { 294 | content: "\E049" 295 | } 296 | 297 | .glyphicons-star:before { 298 | content: "\E050" 299 | } 300 | 301 | .glyphicons-link:before { 302 | content: "\E051" 303 | } 304 | 305 | .glyphicons-eye-open:before { 306 | content: "\E052" 307 | } 308 | 309 | .glyphicons-eye-close:before { 310 | content: "\E053" 311 | } 312 | 313 | .glyphicons-alarm:before { 314 | content: "\E054" 315 | } 316 | 317 | .glyphicons-clock:before { 318 | content: "\E055" 319 | } 320 | 321 | .glyphicons-stopwatch:before { 322 | content: "\E056" 323 | } 324 | 325 | .glyphicons-projector:before { 326 | content: "\E057" 327 | } 328 | 329 | .glyphicons-history:before { 330 | content: "\E058" 331 | } 332 | 333 | .glyphicons-truck:before { 334 | content: "\E059" 335 | } 336 | 337 | .glyphicons-cargo:before { 338 | content: "\E060" 339 | } 340 | 341 | .glyphicons-compass:before { 342 | content: "\E061" 343 | } 344 | 345 | .glyphicons-keynote:before { 346 | content: "\E062" 347 | } 348 | 349 | .glyphicons-paperclip:before { 350 | content: "\E063" 351 | } 352 | 353 | .glyphicons-power:before { 354 | content: "\E064" 355 | } 356 | 357 | .glyphicons-lightbulb:before { 358 | content: "\E065" 359 | } 360 | 361 | .glyphicons-tag:before { 362 | content: "\E066" 363 | } 364 | 365 | .glyphicons-tags:before { 366 | content: "\E067" 367 | } 368 | 369 | .glyphicons-cleaning:before { 370 | content: "\E068" 371 | } 372 | 373 | .glyphicons-ruler:before { 374 | content: "\E069" 375 | } 376 | 377 | .glyphicons-gift:before { 378 | content: "\E070" 379 | } 380 | 381 | .glyphicons-umbrella:before { 382 | content: "\E071" 383 | } 384 | 385 | .glyphicons-book:before { 386 | content: "\E072" 387 | } 388 | 389 | .glyphicons-bookmark:before { 390 | content: "\E073" 391 | } 392 | 393 | .glyphicons-wifi:before { 394 | content: "\E074" 395 | } 396 | 397 | .glyphicons-cup:before { 398 | content: "\E075" 399 | } 400 | 401 | .glyphicons-stroller:before { 402 | content: "\E076" 403 | } 404 | 405 | .glyphicons-headphones:before { 406 | content: "\E077" 407 | } 408 | 409 | .glyphicons-headset:before { 410 | content: "\E078" 411 | } 412 | 413 | .glyphicons-warning-sign:before { 414 | content: "\E079" 415 | } 416 | 417 | .glyphicons-signal:before { 418 | content: "\E080" 419 | } 420 | 421 | .glyphicons-retweet:before { 422 | content: "\E081" 423 | } 424 | 425 | .glyphicons-refresh:before { 426 | content: "\E082" 427 | } 428 | 429 | .glyphicons-roundabout:before { 430 | content: "\E083" 431 | } 432 | 433 | .glyphicons-random:before { 434 | content: "\E084" 435 | } 436 | 437 | .glyphicons-heat:before { 438 | content: "\E085" 439 | } 440 | 441 | .glyphicons-repeat:before { 442 | content: "\E086" 443 | } 444 | 445 | .glyphicons-display:before { 446 | content: "\E087" 447 | } 448 | 449 | .glyphicons-log-book:before { 450 | content: "\E088" 451 | } 452 | 453 | .glyphicons-address-book:before { 454 | content: "\E089" 455 | } 456 | 457 | .glyphicons-building:before { 458 | content: "\E090" 459 | } 460 | 461 | .glyphicons-eyedropper:before { 462 | content: "\E091" 463 | } 464 | 465 | .glyphicons-adjust:before { 466 | content: "\E092" 467 | } 468 | 469 | .glyphicons-tint:before { 470 | content: "\E093" 471 | } 472 | 473 | .glyphicons-crop:before { 474 | content: "\E094" 475 | } 476 | 477 | .glyphicons-vector-path-square:before { 478 | content: "\E095" 479 | } 480 | 481 | .glyphicons-vector-path-circle:before { 482 | content: "\E096" 483 | } 484 | 485 | .glyphicons-vector-path-polygon:before { 486 | content: "\E097" 487 | } 488 | 489 | .glyphicons-vector-path-line:before { 490 | content: "\E098" 491 | } 492 | 493 | .glyphicons-vector-path-curve:before { 494 | content: "\E099" 495 | } 496 | 497 | .glyphicons-vector-path-all:before { 498 | content: "\E100" 499 | } 500 | 501 | .glyphicons-font:before { 502 | content: "\E101" 503 | } 504 | 505 | .glyphicons-italic:before { 506 | content: "\E102" 507 | } 508 | 509 | .glyphicons-bold:before { 510 | content: "\E103" 511 | } 512 | 513 | .glyphicons-text-underline:before { 514 | content: "\E104" 515 | } 516 | 517 | .glyphicons-text-strike:before { 518 | content: "\E105" 519 | } 520 | 521 | .glyphicons-text-height:before { 522 | content: "\E106" 523 | } 524 | 525 | .glyphicons-text-width:before { 526 | content: "\E107" 527 | } 528 | 529 | .glyphicons-text-resize:before { 530 | content: "\E108" 531 | } 532 | 533 | .glyphicons-left-indent:before { 534 | content: "\E109" 535 | } 536 | 537 | .glyphicons-right-indent:before { 538 | content: "\E110" 539 | } 540 | 541 | .glyphicons-align-left:before { 542 | content: "\E111" 543 | } 544 | 545 | .glyphicons-align-center:before { 546 | content: "\E112" 547 | } 548 | 549 | .glyphicons-align-right:before { 550 | content: "\E113" 551 | } 552 | 553 | .glyphicons-justify:before { 554 | content: "\E114" 555 | } 556 | 557 | .glyphicons-list:before { 558 | content: "\E115" 559 | } 560 | 561 | .glyphicons-text-smaller:before { 562 | content: "\E116" 563 | } 564 | 565 | .glyphicons-text-bigger:before { 566 | content: "\E117" 567 | } 568 | 569 | .glyphicons-embed:before { 570 | content: "\E118" 571 | } 572 | 573 | .glyphicons-embed-close:before { 574 | content: "\E119" 575 | } 576 | 577 | .glyphicons-table:before { 578 | content: "\E120" 579 | } 580 | 581 | .glyphicons-message-full:before { 582 | content: "\E121" 583 | } 584 | 585 | .glyphicons-message-empty:before { 586 | content: "\E122" 587 | } 588 | 589 | .glyphicons-message-in:before { 590 | content: "\E123" 591 | } 592 | 593 | .glyphicons-message-out:before { 594 | content: "\E124" 595 | } 596 | 597 | .glyphicons-message-plus:before { 598 | content: "\E125" 599 | } 600 | 601 | .glyphicons-message-minus:before { 602 | content: "\E126" 603 | } 604 | 605 | .glyphicons-message-ban:before { 606 | content: "\E127" 607 | } 608 | 609 | .glyphicons-message-flag:before { 610 | content: "\E128" 611 | } 612 | 613 | .glyphicons-message-lock:before { 614 | content: "\E129" 615 | } 616 | 617 | .glyphicons-message-new:before { 618 | content: "\E130" 619 | } 620 | 621 | .glyphicons-inbox:before { 622 | content: "\E131" 623 | } 624 | 625 | .glyphicons-inbox-plus:before { 626 | content: "\E132" 627 | } 628 | 629 | .glyphicons-inbox-minus:before { 630 | content: "\E133" 631 | } 632 | 633 | .glyphicons-inbox-lock:before { 634 | content: "\E134" 635 | } 636 | 637 | .glyphicons-inbox-in:before { 638 | content: "\E135" 639 | } 640 | 641 | .glyphicons-inbox-out:before { 642 | content: "\E136" 643 | } 644 | 645 | .glyphicons-cogwheel:before { 646 | content: "\E137" 647 | } 648 | 649 | .glyphicons-cogwheels:before { 650 | content: "\E138" 651 | } 652 | 653 | .glyphicons-picture:before { 654 | content: "\E139" 655 | } 656 | 657 | .glyphicons-adjust-alt:before { 658 | content: "\E140" 659 | } 660 | 661 | .glyphicons-database-lock:before { 662 | content: "\E141" 663 | } 664 | 665 | .glyphicons-database-plus:before { 666 | content: "\E142" 667 | } 668 | 669 | .glyphicons-database-minus:before { 670 | content: "\E143" 671 | } 672 | 673 | .glyphicons-database-ban:before { 674 | content: "\E144" 675 | } 676 | 677 | .glyphicons-folder-open:before { 678 | content: "\E145" 679 | } 680 | 681 | .glyphicons-folder-plus:before { 682 | content: "\E146" 683 | } 684 | 685 | .glyphicons-folder-minus:before { 686 | content: "\E147" 687 | } 688 | 689 | .glyphicons-folder-lock:before { 690 | content: "\E148" 691 | } 692 | 693 | .glyphicons-folder-flag:before { 694 | content: "\E149" 695 | } 696 | 697 | .glyphicons-folder-new:before { 698 | content: "\E150" 699 | } 700 | 701 | .glyphicons-edit:before { 702 | content: "\E151" 703 | } 704 | 705 | .glyphicons-new-window:before { 706 | content: "\E152" 707 | } 708 | 709 | .glyphicons-check:before { 710 | content: "\E153" 711 | } 712 | 713 | .glyphicons-unchecked:before { 714 | content: "\E154" 715 | } 716 | 717 | .glyphicons-more-windows:before { 718 | content: "\E155" 719 | } 720 | 721 | .glyphicons-show-big-thumbnails:before { 722 | content: "\E156" 723 | } 724 | 725 | .glyphicons-show-thumbnails:before { 726 | content: "\E157" 727 | } 728 | 729 | .glyphicons-show-thumbnails-with-lines:before { 730 | content: "\E158" 731 | } 732 | 733 | .glyphicons-show-lines:before { 734 | content: "\E159" 735 | } 736 | 737 | .glyphicons-playlist:before { 738 | content: "\E160" 739 | } 740 | 741 | .glyphicons-imac:before { 742 | content: "\E161" 743 | } 744 | 745 | .glyphicons-macbook:before { 746 | content: "\E162" 747 | } 748 | 749 | .glyphicons-ipad:before { 750 | content: "\E163" 751 | } 752 | 753 | .glyphicons-iphone:before { 754 | content: "\E164" 755 | } 756 | 757 | .glyphicons-iphone-transfer:before { 758 | content: "\E165" 759 | } 760 | 761 | .glyphicons-iphone-exchange:before { 762 | content: "\E166" 763 | } 764 | 765 | .glyphicons-ipod:before { 766 | content: "\E167" 767 | } 768 | 769 | .glyphicons-ipod-shuffle:before { 770 | content: "\E168" 771 | } 772 | 773 | .glyphicons-ear-plugs:before { 774 | content: "\E169" 775 | } 776 | 777 | .glyphicons-record:before { 778 | content: "\E170" 779 | } 780 | 781 | .glyphicons-step-backward:before { 782 | content: "\E171" 783 | } 784 | 785 | .glyphicons-fast-backward:before { 786 | content: "\E172" 787 | } 788 | 789 | .glyphicons-rewind:before { 790 | content: "\E173" 791 | } 792 | 793 | .glyphicons-play:before { 794 | content: "\E174" 795 | } 796 | 797 | .glyphicons-pause:before { 798 | content: "\E175" 799 | } 800 | 801 | .glyphicons-stop:before { 802 | content: "\E176" 803 | } 804 | 805 | .glyphicons-forward:before { 806 | content: "\E177" 807 | } 808 | 809 | .glyphicons-fast-forward:before { 810 | content: "\E178" 811 | } 812 | 813 | .glyphicons-step-forward:before { 814 | content: "\E179" 815 | } 816 | 817 | .glyphicons-eject:before { 818 | content: "\E180" 819 | } 820 | 821 | .glyphicons-facetime-video:before { 822 | content: "\E181" 823 | } 824 | 825 | .glyphicons-download-alt:before { 826 | content: "\E182" 827 | } 828 | 829 | .glyphicons-mute:before { 830 | content: "\E183" 831 | } 832 | 833 | .glyphicons-volume-down:before { 834 | content: "\E184" 835 | } 836 | 837 | .glyphicons-volume-up:before { 838 | content: "\E185" 839 | } 840 | 841 | .glyphicons-screenshot:before { 842 | content: "\E186" 843 | } 844 | 845 | .glyphicons-move:before { 846 | content: "\E187" 847 | } 848 | 849 | .glyphicons-more:before { 850 | content: "\E188" 851 | } 852 | 853 | .glyphicons-brightness-reduce:before { 854 | content: "\E189" 855 | } 856 | 857 | .glyphicons-brightness-increase:before { 858 | content: "\E190" 859 | } 860 | 861 | .glyphicons-plus-sign:before { 862 | content: "\E191" 863 | } 864 | 865 | .glyphicons-minus-sign:before { 866 | content: "\E192" 867 | } 868 | 869 | .glyphicons-remove-sign:before { 870 | content: "\E193" 871 | } 872 | 873 | .glyphicons-ok-sign:before { 874 | content: "\E194" 875 | } 876 | 877 | .glyphicons-question-sign:before { 878 | content: "\E195" 879 | } 880 | 881 | .glyphicons-info-sign:before { 882 | content: "\E196" 883 | } 884 | 885 | .glyphicons-exclamation-sign:before { 886 | content: "\E197" 887 | } 888 | 889 | .glyphicons-remove-circle:before { 890 | content: "\E198" 891 | } 892 | 893 | .glyphicons-ok-circle:before { 894 | content: "\E199" 895 | } 896 | 897 | .glyphicons-ban-circle:before { 898 | content: "\E200" 899 | } 900 | 901 | .glyphicons-download:before { 902 | content: "\E201" 903 | } 904 | 905 | .glyphicons-upload:before { 906 | content: "\E202" 907 | } 908 | 909 | .glyphicons-shopping-cart:before { 910 | content: "\E203" 911 | } 912 | 913 | .glyphicons-lock:before { 914 | content: "\E204" 915 | } 916 | 917 | .glyphicons-unlock:before { 918 | content: "\E205" 919 | } 920 | 921 | .glyphicons-electricity:before { 922 | content: "\E206" 923 | } 924 | 925 | .glyphicons-ok:before { 926 | content: "\E207" 927 | } 928 | 929 | .glyphicons-remove:before { 930 | content: "\E208" 931 | } 932 | 933 | .glyphicons-cart-in:before { 934 | content: "\E209" 935 | } 936 | 937 | .glyphicons-cart-out:before { 938 | content: "\E210" 939 | } 940 | 941 | .glyphicons-arrow-left:before { 942 | content: "\E211" 943 | } 944 | 945 | .glyphicons-arrow-right:before { 946 | content: "\E212" 947 | } 948 | 949 | .glyphicons-arrow-down:before { 950 | content: "\E213" 951 | } 952 | 953 | .glyphicons-arrow-up:before { 954 | content: "\E214" 955 | } 956 | 957 | .glyphicons-resize-small:before { 958 | content: "\E215" 959 | } 960 | 961 | .glyphicons-resize-full:before { 962 | content: "\E216" 963 | } 964 | 965 | .glyphicons-circle-arrow-left:before { 966 | content: "\E217" 967 | } 968 | 969 | .glyphicons-circle-arrow-right:before { 970 | content: "\E218" 971 | } 972 | 973 | .glyphicons-circle-arrow-top:before { 974 | content: "\E219" 975 | } 976 | 977 | .glyphicons-circle-arrow-down:before { 978 | content: "\E220" 979 | } 980 | 981 | .glyphicons-play-button:before { 982 | content: "\E221" 983 | } 984 | 985 | .glyphicons-unshare:before { 986 | content: "\E222" 987 | } 988 | 989 | .glyphicons-share:before { 990 | content: "\E223" 991 | } 992 | 993 | .glyphicons-chevron-right:before { 994 | content: "\E224" 995 | } 996 | 997 | .glyphicons-chevron-left:before { 998 | content: "\E225" 999 | } 1000 | 1001 | .glyphicons-bluetooth:before { 1002 | content: "\E226" 1003 | } 1004 | 1005 | .glyphicons-euro:before { 1006 | content: "\E227" 1007 | } 1008 | 1009 | .glyphicons-usd:before { 1010 | content: "\E228" 1011 | } 1012 | 1013 | .glyphicons-gbp:before { 1014 | content: "\E229" 1015 | } 1016 | 1017 | .glyphicons-retweet-2:before { 1018 | content: "\E230" 1019 | } 1020 | 1021 | .glyphicons-moon:before { 1022 | content: "\E231" 1023 | } 1024 | 1025 | .glyphicons-sun:before { 1026 | content: "\E232" 1027 | } 1028 | 1029 | .glyphicons-cloud:before { 1030 | content: "\E233" 1031 | } 1032 | 1033 | .glyphicons-direction:before { 1034 | content: "\E234" 1035 | } 1036 | 1037 | .glyphicons-brush:before { 1038 | content: "\E235" 1039 | } 1040 | 1041 | .glyphicons-pen:before { 1042 | content: "\E236" 1043 | } 1044 | 1045 | .glyphicons-zoom-in:before { 1046 | content: "\E237" 1047 | } 1048 | 1049 | .glyphicons-zoom-out:before { 1050 | content: "\E238" 1051 | } 1052 | 1053 | .glyphicons-pin:before { 1054 | content: "\E239" 1055 | } 1056 | 1057 | .glyphicons-albums:before { 1058 | content: "\E240" 1059 | } 1060 | 1061 | .glyphicons-rotation-lock:before { 1062 | content: "\E241" 1063 | } 1064 | 1065 | .glyphicons-flash:before { 1066 | content: "\E242" 1067 | } 1068 | 1069 | .glyphicons-map-marker:before { 1070 | content: "\E243" 1071 | } 1072 | 1073 | .glyphicons-anchor:before { 1074 | content: "\E244" 1075 | } 1076 | 1077 | .glyphicons-conversation:before { 1078 | content: "\E245" 1079 | } 1080 | 1081 | .glyphicons-chat:before { 1082 | content: "\E246" 1083 | } 1084 | 1085 | .glyphicons-note-empty:before { 1086 | content: "\E247" 1087 | } 1088 | 1089 | .glyphicons-note:before { 1090 | content: "\E248" 1091 | } 1092 | 1093 | .glyphicons-asterisk:before { 1094 | content: "\E249" 1095 | } 1096 | 1097 | .glyphicons-divide:before { 1098 | content: "\E250" 1099 | } 1100 | 1101 | .glyphicons-snorkel-diving:before { 1102 | content: "\E251" 1103 | } 1104 | 1105 | .glyphicons-scuba-diving:before { 1106 | content: "\E252" 1107 | } 1108 | 1109 | .glyphicons-oxygen-bottle:before { 1110 | content: "\E253" 1111 | } 1112 | 1113 | .glyphicons-fins:before { 1114 | content: "\E254" 1115 | } 1116 | 1117 | .glyphicons-fishes:before { 1118 | content: "\E255" 1119 | } 1120 | 1121 | .glyphicons-boat:before { 1122 | content: "\E256" 1123 | } 1124 | 1125 | .glyphicons-delete:before { 1126 | content: "\E257" 1127 | } 1128 | 1129 | .glyphicons-sheriffs-star:before { 1130 | content: "\E258" 1131 | } 1132 | 1133 | .glyphicons-qrcode:before { 1134 | content: "\E259" 1135 | } 1136 | 1137 | .glyphicons-barcode:before { 1138 | content: "\E260" 1139 | } 1140 | 1141 | .glyphicons-pool:before { 1142 | content: "\E261" 1143 | } 1144 | 1145 | .glyphicons-buoy:before { 1146 | content: "\E262" 1147 | } 1148 | 1149 | .glyphicons-spade:before { 1150 | content: "\E263" 1151 | } 1152 | 1153 | .glyphicons-bank:before { 1154 | content: "\E264" 1155 | } 1156 | 1157 | .glyphicons-vcard:before { 1158 | content: "\E265" 1159 | } 1160 | 1161 | .glyphicons-electrical-plug:before { 1162 | content: "\E266" 1163 | } 1164 | 1165 | .glyphicons-flag:before { 1166 | content: "\E267" 1167 | } 1168 | 1169 | .glyphicons-credit-card:before { 1170 | content: "\E268" 1171 | } 1172 | 1173 | .glyphicons-keyboard-wireless:before { 1174 | content: "\E269" 1175 | } 1176 | 1177 | .glyphicons-keyboard-wireless:before { 1178 | content: "\E270" 1179 | } 1180 | 1181 | .glyphicons-shield:before { 1182 | content: "\E271" 1183 | } 1184 | 1185 | .glyphicons-ring:before { 1186 | content: "\E272" 1187 | } 1188 | 1189 | .glyphicons-cake:before { 1190 | content: "\E273" 1191 | } 1192 | 1193 | .glyphicons-drink:before { 1194 | content: "\E274" 1195 | } 1196 | 1197 | .glyphicons-beer:before { 1198 | content: "\E275" 1199 | } 1200 | 1201 | .glyphicons-fast-food:before { 1202 | content: "\E276" 1203 | } 1204 | 1205 | .glyphicons-cutlery:before { 1206 | content: "\E277" 1207 | } 1208 | 1209 | .glyphicons-pizza:before { 1210 | content: "\E278" 1211 | } 1212 | 1213 | .glyphicons-birthday-cake:before { 1214 | content: "\E279" 1215 | } 1216 | 1217 | .glyphicons-tablet:before { 1218 | content: "\E280" 1219 | } 1220 | 1221 | .glyphicons-settings:before { 1222 | content: "\E281" 1223 | } 1224 | 1225 | .glyphicons-bullets:before { 1226 | content: "\E282" 1227 | } 1228 | 1229 | .glyphicons-cardio:before { 1230 | content: "\E283" 1231 | } 1232 | 1233 | .glyphicons-t-shirt:before { 1234 | content: "\E284" 1235 | } 1236 | 1237 | .glyphicons-pants:before { 1238 | content: "\E285" 1239 | } 1240 | 1241 | .glyphicons-sweater:before { 1242 | content: "\E286" 1243 | } 1244 | 1245 | .glyphicons-fabric:before { 1246 | content: "\E287" 1247 | } 1248 | 1249 | .glyphicons-leather:before { 1250 | content: "\E288" 1251 | } 1252 | 1253 | .glyphicons-scissors:before { 1254 | content: "\E289" 1255 | } 1256 | 1257 | .glyphicons-bomb:before { 1258 | content: "\E290" 1259 | } 1260 | 1261 | .glyphicons-skull:before { 1262 | content: "\E291" 1263 | } 1264 | 1265 | .glyphicons-celebration:before { 1266 | content: "\E292" 1267 | } 1268 | 1269 | .glyphicons-tea-kettle:before { 1270 | content: "\E293" 1271 | } 1272 | 1273 | .glyphicons-french-press:before { 1274 | content: "\E294" 1275 | } 1276 | 1277 | .glyphicons-coffee-cup:before { 1278 | content: "\E295" 1279 | } 1280 | 1281 | .glyphicons-pot:before { 1282 | content: "\E296" 1283 | } 1284 | 1285 | .glyphicons-grater:before { 1286 | content: "\E297" 1287 | } 1288 | 1289 | .glyphicons-kettle:before { 1290 | content: "\E298" 1291 | } 1292 | 1293 | .glyphicons-hospital:before { 1294 | content: "\E299" 1295 | } 1296 | 1297 | .glyphicons-hospital-h:before { 1298 | content: "\E300" 1299 | } 1300 | 1301 | .glyphicons-microphone:before { 1302 | content: "\E301" 1303 | } 1304 | 1305 | .glyphicons-webcam:before { 1306 | content: "\E302" 1307 | } 1308 | 1309 | .glyphicons-temple-christianity-church:before { 1310 | content: "\E303" 1311 | } 1312 | 1313 | .glyphicons-temple-islam:before { 1314 | content: "\E304" 1315 | } 1316 | 1317 | .glyphicons-temple-hindu:before { 1318 | content: "\E305" 1319 | } 1320 | 1321 | .glyphicons-temple-buddhist:before { 1322 | content: "\E306" 1323 | } 1324 | 1325 | .glyphicons-bicycle:before { 1326 | content: "\E307" 1327 | } 1328 | 1329 | .glyphicons-life-preserver:before { 1330 | content: "\E308" 1331 | } 1332 | 1333 | .glyphicons-share-alt:before { 1334 | content: "\E309" 1335 | } 1336 | 1337 | .glyphicons-comments:before { 1338 | content: "\E310" 1339 | } 1340 | 1341 | .glyphicons-flower:before { 1342 | content: "\E311" 1343 | } 1344 | 1345 | .glyphicons-baseball:before { 1346 | content: "\E312" 1347 | } 1348 | 1349 | .glyphicons-rugby:before { 1350 | content: "\E313" 1351 | } 1352 | 1353 | .glyphicons-ax:before { 1354 | content: "\E314" 1355 | } 1356 | 1357 | .glyphicons-table-tennis:before { 1358 | content: "\E315" 1359 | } 1360 | 1361 | .glyphicons-bowling:before { 1362 | content: "\E316" 1363 | } 1364 | 1365 | .glyphicons-tree-conifer:before { 1366 | content: "\E317" 1367 | } 1368 | 1369 | .glyphicons-tree-deciduous:before { 1370 | content: "\E318" 1371 | } 1372 | 1373 | .glyphicons-more-items:before { 1374 | content: "\E319" 1375 | } 1376 | 1377 | .glyphicons-sort:before { 1378 | content: "\E320" 1379 | } 1380 | 1381 | .glyphicons-filter:before { 1382 | content: "\E321" 1383 | } 1384 | 1385 | .glyphicons-gamepad:before { 1386 | content: "\E322" 1387 | } 1388 | 1389 | .glyphicons-playing-dices:before { 1390 | content: "\E323" 1391 | } 1392 | 1393 | .glyphicons-calculator:before { 1394 | content: "\E324" 1395 | } 1396 | 1397 | .glyphicons-tie:before { 1398 | content: "\E325" 1399 | } 1400 | 1401 | .glyphicons-wallet:before { 1402 | content: "\E326" 1403 | } 1404 | 1405 | .glyphicons-piano:before { 1406 | content: "\E327" 1407 | } 1408 | 1409 | .glyphicons-sampler:before { 1410 | content: "\E328" 1411 | } 1412 | 1413 | .glyphicons-podium:before { 1414 | content: "\E329" 1415 | } 1416 | 1417 | .glyphicons-soccer-ball:before { 1418 | content: "\E330" 1419 | } 1420 | 1421 | .glyphicons-blog:before { 1422 | content: "\E331" 1423 | } 1424 | 1425 | .glyphicons-dashboard:before { 1426 | content: "\E332" 1427 | } 1428 | 1429 | .glyphicons-certificate:before { 1430 | content: "\E333" 1431 | } 1432 | 1433 | .glyphicons-bell:before { 1434 | content: "\E334" 1435 | } 1436 | 1437 | .glyphicons-candle:before { 1438 | content: "\E335" 1439 | } 1440 | 1441 | .glyphicons-pushpin:before { 1442 | content: "\E336" 1443 | } 1444 | 1445 | .glyphicons-iphone-shake:before { 1446 | content: "\E337" 1447 | } 1448 | 1449 | .glyphicons-pin-flag:before { 1450 | content: "\E338" 1451 | } 1452 | 1453 | .glyphicons-turtle:before { 1454 | content: "\E339" 1455 | } 1456 | 1457 | .glyphicons-rabbit:before { 1458 | content: "\E340" 1459 | } 1460 | 1461 | .glyphicons-globe:before { 1462 | content: "\E341" 1463 | } 1464 | 1465 | .glyphicons-briefcase:before { 1466 | content: "\E342" 1467 | } 1468 | 1469 | .glyphicons-hdd:before { 1470 | content: "\E343" 1471 | } 1472 | 1473 | .glyphicons-thumbs-up:before { 1474 | content: "\E344" 1475 | } 1476 | 1477 | .glyphicons-thumbs-down:before { 1478 | content: "\E345" 1479 | } 1480 | 1481 | .glyphicons-hand-right:before { 1482 | content: "\E346" 1483 | } 1484 | 1485 | .glyphicons-hand-left:before { 1486 | content: "\E347" 1487 | } 1488 | 1489 | .glyphicons-hand-up:before { 1490 | content: "\E348" 1491 | } 1492 | 1493 | .glyphicons-hand-down:before { 1494 | content: "\E349" 1495 | } 1496 | 1497 | .glyphicons-fullscreen:before { 1498 | content: "\E350" 1499 | } 1500 | 1501 | .glyphicons-shopping-bag:before { 1502 | content: "\E351" 1503 | } 1504 | 1505 | .glyphicons-book-open:before { 1506 | content: "\E352" 1507 | } 1508 | 1509 | .glyphicons-nameplate:before { 1510 | content: "\E353" 1511 | } 1512 | 1513 | .glyphicons-nameplate-alt:before { 1514 | content: "\E354" 1515 | } 1516 | 1517 | .glyphicons-vases:before { 1518 | content: "\E355" 1519 | } 1520 | 1521 | .glyphicons-bullhorn:before { 1522 | content: "\E356" 1523 | } 1524 | 1525 | .glyphicons-dumbbell:before { 1526 | content: "\E357" 1527 | } 1528 | 1529 | .glyphicons-suitcase:before { 1530 | content: "\E358" 1531 | } 1532 | 1533 | .glyphicons-file-import:before { 1534 | content: "\E359" 1535 | } 1536 | 1537 | .glyphicons-file-export:before { 1538 | content: "\E360" 1539 | } 1540 | 1541 | .glyphicons-bug:before { 1542 | content: "\E361" 1543 | } 1544 | 1545 | .glyphicons-crown:before { 1546 | content: "\E362" 1547 | } 1548 | 1549 | .glyphicons-smoking:before { 1550 | content: "\E363" 1551 | } 1552 | 1553 | .glyphicons-cloud-upload:before { 1554 | content: "\E364" 1555 | } 1556 | 1557 | .glyphicons-cloud-download:before { 1558 | content: "\E365" 1559 | } 1560 | 1561 | .glyphicons-restart:before { 1562 | content: "\E366" 1563 | } 1564 | 1565 | .glyphicons-security-camera:before { 1566 | content: "\E367" 1567 | } 1568 | 1569 | .glyphicons-expand:before { 1570 | content: "\E368" 1571 | } 1572 | 1573 | .glyphicons-collapse:before { 1574 | content: "\E369" 1575 | } 1576 | 1577 | .glyphicons-collapse-top:before { 1578 | content: "\E370" 1579 | } 1580 | 1581 | .glyphicons-globe-af:before { 1582 | content: "\E371" 1583 | } 1584 | 1585 | .glyphicons-global:before { 1586 | content: "\E372" 1587 | } 1588 | 1589 | .glyphicons-spray:before { 1590 | content: "\E373" 1591 | } 1592 | 1593 | .glyphicons-nails:before { 1594 | content: "\E374" 1595 | } 1596 | 1597 | .glyphicons-claw-hammer:before { 1598 | content: "\E375" 1599 | } 1600 | 1601 | .glyphicons-classic-hammer:before { 1602 | content: "\E376" 1603 | } 1604 | 1605 | .glyphicons-hand-saw:before { 1606 | content: "\E377" 1607 | } 1608 | 1609 | .glyphicons-riflescope:before { 1610 | content: "\E378" 1611 | } 1612 | 1613 | .glyphicons-electrical-socket-eu:before { 1614 | content: "\E379" 1615 | } 1616 | 1617 | .glyphicons-electrical-socket-us:before { 1618 | content: "\E380" 1619 | } 1620 | 1621 | .glyphicons-message-forward:before { 1622 | content: "\E381" 1623 | } 1624 | 1625 | .glyphicons-coat-hanger:before { 1626 | content: "\E382" 1627 | } 1628 | 1629 | .glyphicons-dress:before { 1630 | content: "\E383" 1631 | } 1632 | 1633 | .glyphicons-bathrobe:before { 1634 | content: "\E384" 1635 | } 1636 | 1637 | .glyphicons-shirt:before { 1638 | content: "\E385" 1639 | } 1640 | 1641 | .glyphicons-underwear:before { 1642 | content: "\E386" 1643 | } 1644 | 1645 | .glyphicons-log-in:before { 1646 | content: "\E387" 1647 | } 1648 | 1649 | .glyphicons-log-out:before { 1650 | content: "\E388" 1651 | } 1652 | 1653 | .glyphicons-exit:before { 1654 | content: "\E389" 1655 | } 1656 | 1657 | .glyphicons-new-window-alt:before { 1658 | content: "\E390" 1659 | } 1660 | 1661 | .glyphicons-video-sd:before { 1662 | content: "\E391" 1663 | } 1664 | 1665 | .glyphicons-video-hd:before { 1666 | content: "\E392" 1667 | } 1668 | 1669 | .glyphicons-subtitles:before { 1670 | content: "\E393" 1671 | } 1672 | 1673 | .glyphicons-sound-stereo:before { 1674 | content: "\E394" 1675 | } 1676 | 1677 | .glyphicons-sound-dolby:before { 1678 | content: "\E395" 1679 | } 1680 | 1681 | .glyphicons-sound-5-1:before { 1682 | content: "\E396" 1683 | } 1684 | 1685 | .glyphicons-sound-6-1:before { 1686 | content: "\E397" 1687 | } 1688 | 1689 | .glyphicons-sound-7-1:before { 1690 | content: "\E398" 1691 | } 1692 | 1693 | .glyphicons-copyright-mark:before { 1694 | content: "\E399" 1695 | } 1696 | 1697 | .glyphicons-registration-mark:before { 1698 | content: "\E400" 1699 | } 1700 | 1701 | .glyphicons-radar:before { 1702 | content: "\E401" 1703 | } 1704 | 1705 | .glyphicons-skateboard:before { 1706 | content: "\E402" 1707 | } 1708 | 1709 | .glyphicons-golf-course:before { 1710 | content: "\E403" 1711 | } 1712 | 1713 | .glyphicons-sorting:before { 1714 | content: "\E404" 1715 | } 1716 | 1717 | .glyphicons-sort-by-alphabet:before { 1718 | content: "\E405" 1719 | } 1720 | 1721 | .glyphicons-sort-by-alphabet-alt:before { 1722 | content: "\E406" 1723 | } 1724 | 1725 | .glyphicons-sort-by-order:before { 1726 | content: "\E407" 1727 | } 1728 | 1729 | .glyphicons-sort-by-order-alt:before { 1730 | content: "\E408" 1731 | } 1732 | 1733 | .glyphicons-sort-by-attributes:before { 1734 | content: "\E409" 1735 | } 1736 | 1737 | .glyphicons-sort-by-attributes-alt:before { 1738 | content: "\E410" 1739 | } 1740 | 1741 | .glyphicons-compressed:before { 1742 | content: "\E411" 1743 | } 1744 | 1745 | .glyphicons-package:before { 1746 | content: "\E412" 1747 | } 1748 | 1749 | .glyphicons-cloud-plus:before { 1750 | content: "\E413" 1751 | } 1752 | 1753 | .glyphicons-cloud-minus:before { 1754 | content: "\E414" 1755 | } 1756 | 1757 | .glyphicons-disk-save:before { 1758 | content: "\E415" 1759 | } 1760 | 1761 | .glyphicons-disk-open:before { 1762 | content: "\E416" 1763 | } 1764 | 1765 | .glyphicons-disk-saved:before { 1766 | content: "\E417" 1767 | } 1768 | 1769 | .glyphicons-disk-remove:before { 1770 | content: "\E418" 1771 | } 1772 | 1773 | .glyphicons-disk-import:before { 1774 | content: "\E419" 1775 | } 1776 | 1777 | .glyphicons-disk-export:before { 1778 | content: "\E420" 1779 | } 1780 | 1781 | .glyphicons-tower:before { 1782 | content: "\E421" 1783 | } 1784 | 1785 | .glyphicons-send:before { 1786 | content: "\E422" 1787 | } 1788 | 1789 | .glyphicons-git-branch:before { 1790 | content: "\E423" 1791 | } 1792 | 1793 | .glyphicons-git-create:before { 1794 | content: "\E424" 1795 | } 1796 | 1797 | .glyphicons-git-private:before { 1798 | content: "\E425" 1799 | } 1800 | 1801 | .glyphicons-git-delete:before { 1802 | content: "\E426" 1803 | } 1804 | 1805 | .glyphicons-git-merge:before { 1806 | content: "\E427" 1807 | } 1808 | 1809 | .glyphicons-git-pull-request:before { 1810 | content: "\E428" 1811 | } 1812 | 1813 | .glyphicons-git-compare:before { 1814 | content: "\E429" 1815 | } 1816 | 1817 | .glyphicons-git-commit:before { 1818 | content: "\E430" 1819 | } 1820 | 1821 | .glyphicons-construction-cone:before { 1822 | content: "\E431" 1823 | } 1824 | 1825 | .glyphicons-shoe-steps:before { 1826 | content: "\E432" 1827 | } 1828 | 1829 | .glyphicons-plus:before { 1830 | content: "\E433" 1831 | } 1832 | 1833 | .glyphicons-minus:before { 1834 | content: "\E434" 1835 | } 1836 | 1837 | .glyphicons-redo:before { 1838 | content: "\E435" 1839 | } 1840 | 1841 | .glyphicons-undo:before { 1842 | content: "\E436" 1843 | } 1844 | 1845 | .glyphicons-golf:before { 1846 | content: "\E437" 1847 | } 1848 | 1849 | .glyphicons-hockey:before { 1850 | content: "\E438" 1851 | } 1852 | 1853 | .glyphicons-pipe:before { 1854 | content: "\E439" 1855 | } 1856 | 1857 | .glyphicons-wrench:before { 1858 | content: "\E440" 1859 | } 1860 | 1861 | .glyphicons-folder-closed:before { 1862 | content: "\E441" 1863 | } 1864 | 1865 | .glyphicons-phone-alt:before { 1866 | content: "\E442" 1867 | } 1868 | 1869 | .glyphicons-earphone:before { 1870 | content: "\E443" 1871 | } 1872 | 1873 | .glyphicons-floppy-disk:before { 1874 | content: "\E444" 1875 | } 1876 | 1877 | .glyphicons-floppy-saved:before { 1878 | content: "\E445" 1879 | } 1880 | 1881 | .glyphicons-floppy-remove:before { 1882 | content: "\E446" 1883 | } 1884 | 1885 | .glyphicons-floppy-save:before { 1886 | content: "\E447" 1887 | } 1888 | 1889 | .glyphicons-floppy-open:before { 1890 | content: "\E448" 1891 | } 1892 | 1893 | .glyphicons-translate:before { 1894 | content: "\E449" 1895 | } 1896 | 1897 | .glyphicons-fax:before { 1898 | content: "\E450" 1899 | } 1900 | 1901 | .glyphicons-factory:before { 1902 | content: "\E451" 1903 | } 1904 | 1905 | .glyphicons-shop-window:before { 1906 | content: "\E452" 1907 | } 1908 | 1909 | .glyphicons-shop:before { 1910 | content: "\E453" 1911 | } 1912 | 1913 | .glyphicons-kiosk:before { 1914 | content: "\E454" 1915 | } 1916 | 1917 | .glyphicons-kiosk-wheels:before { 1918 | content: "\E455" 1919 | } 1920 | 1921 | .glyphicons-kiosk-light:before { 1922 | content: "\E456" 1923 | } 1924 | 1925 | .glyphicons-kiosk-food:before { 1926 | content: "\E457" 1927 | } 1928 | 1929 | .glyphicons-transfer:before { 1930 | content: "\E458" 1931 | } 1932 | 1933 | .glyphicons-money:before { 1934 | content: "\E459" 1935 | } 1936 | 1937 | .glyphicons-header:before { 1938 | content: "\E460" 1939 | } 1940 | 1941 | .glyphicons-blacksmith:before { 1942 | content: "\E461" 1943 | } 1944 | 1945 | .glyphicons-saw-blade:before { 1946 | content: "\E462" 1947 | } 1948 | 1949 | .glyphicons-basketball:before { 1950 | content: "\E463" 1951 | } 1952 | 1953 | .glyphicons-server:before { 1954 | content: "\E464" 1955 | } 1956 | 1957 | .glyphicons-server-plus:before { 1958 | content: "\E465" 1959 | } 1960 | 1961 | .glyphicons-server-minus:before { 1962 | content: "\E466" 1963 | } 1964 | 1965 | .glyphicons-server-ban:before { 1966 | content: "\E467" 1967 | } 1968 | 1969 | .glyphicons-server-flag:before { 1970 | content: "\E468" 1971 | } 1972 | 1973 | .glyphicons-server-lock:before { 1974 | content: "\E469" 1975 | } 1976 | 1977 | .glyphicons-server-new:before { 1978 | content: "\E470" 1979 | } 1980 | 1981 | .glyphicons-charging-station:before { 1982 | content: "\E471" 1983 | } 1984 | 1985 | .glyphicons-gas-station:before { 1986 | content: "\E472" 1987 | } 1988 | 1989 | .glyphicons-target:before { 1990 | content: "\E473" 1991 | } 1992 | 1993 | .glyphicons-bed:before { 1994 | content: "\E474" 1995 | } 1996 | 1997 | .glyphicons-mosquito:before { 1998 | content: "\E475" 1999 | } 2000 | 2001 | .glyphicons-dining-set:before { 2002 | content: "\E476" 2003 | } 2004 | 2005 | .glyphicons-plate-of-food:before { 2006 | content: "\E477" 2007 | } 2008 | 2009 | .glyphicons-hygiene-kit:before { 2010 | content: "\E478" 2011 | } 2012 | 2013 | .glyphicons-blackboard:before { 2014 | content: "\E479" 2015 | } 2016 | 2017 | .glyphicons-marriage:before { 2018 | content: "\E480" 2019 | } 2020 | 2021 | .glyphicons-bucket:before { 2022 | content: "\E481" 2023 | } 2024 | 2025 | .glyphicons-none-color-swatch:before { 2026 | content: "\E482" 2027 | } 2028 | 2029 | .glyphicons-bring-forward:before { 2030 | content: "\E483" 2031 | } 2032 | 2033 | .glyphicons-bring-to-front:before { 2034 | content: "\E484" 2035 | } 2036 | 2037 | .glyphicons-send-backward:before { 2038 | content: "\E485" 2039 | } 2040 | 2041 | .glyphicons-send-to-back:before { 2042 | content: "\E486" 2043 | } 2044 | 2045 | .glyphicons-fit-frame-to-image:before { 2046 | content: "\E487" 2047 | } 2048 | 2049 | .glyphicons-fit-image-to-frame:before { 2050 | content: "\E488" 2051 | } 2052 | 2053 | .glyphicons-multiple-displays:before { 2054 | content: "\E489" 2055 | } 2056 | 2057 | .glyphicons-handshake:before { 2058 | content: "\E490" 2059 | } 2060 | 2061 | .glyphicons-child:before { 2062 | content: "\E491" 2063 | } 2064 | 2065 | .glyphicons-baby-formula:before { 2066 | content: "\E492" 2067 | } 2068 | 2069 | .glyphicons-medicine:before { 2070 | content: "\E493" 2071 | } 2072 | 2073 | .glyphicons-atv-vehicle:before { 2074 | content: "\E494" 2075 | } 2076 | 2077 | .glyphicons-motorcycle:before { 2078 | content: "\E495" 2079 | } 2080 | 2081 | .glyphicons-bed-alt:before { 2082 | content: "\E496" 2083 | } 2084 | 2085 | .glyphicons-tent:before { 2086 | content: "\E497" 2087 | } 2088 | 2089 | .glyphicons-glasses:before { 2090 | content: "\E498" 2091 | } 2092 | 2093 | .glyphicons-sunglasses:before { 2094 | content: "\E499" 2095 | } 2096 | 2097 | .glyphicons-family:before { 2098 | content: "\E500" 2099 | } 2100 | 2101 | .glyphicons-education:before { 2102 | content: "\E501" 2103 | } 2104 | 2105 | .glyphicons-shoes:before { 2106 | content: "\E502" 2107 | } 2108 | 2109 | .glyphicons-map:before { 2110 | content: "\E503" 2111 | } 2112 | 2113 | .glyphicons-cd:before { 2114 | content: "\E504" 2115 | } 2116 | 2117 | .glyphicons-alert:before { 2118 | content: "\E505" 2119 | } 2120 | 2121 | .glyphicons-piggy-bank:before { 2122 | content: "\E506" 2123 | } 2124 | 2125 | .glyphicons-star-half:before { 2126 | content: "\E507" 2127 | } 2128 | 2129 | .glyphicons-cluster:before { 2130 | content: "\E508" 2131 | } 2132 | 2133 | .glyphicons-flowchart:before { 2134 | content: "\E509" 2135 | } 2136 | 2137 | .glyphicons-commodities:before { 2138 | content: "\E510" 2139 | } 2140 | 2141 | .glyphicons-duplicate:before { 2142 | content: "\E511" 2143 | } 2144 | 2145 | .glyphicons-copy:before { 2146 | content: "\E512" 2147 | } 2148 | 2149 | .glyphicons-paste:before { 2150 | content: "\E513" 2151 | } 2152 | 2153 | .glyphicons-bath-bathtub:before { 2154 | content: "\E514" 2155 | } 2156 | 2157 | .glyphicons-bath-shower:before { 2158 | content: "\E515" 2159 | } 2160 | 2161 | .glyphicons-shower:before { 2162 | content: "\E516" 2163 | } 2164 | 2165 | .glyphicons-menu-hamburger:before { 2166 | content: "\E517" 2167 | } 2168 | 2169 | .glyphicons-option-vertical:before { 2170 | content: "\E518" 2171 | } 2172 | 2173 | .glyphicons-option-horizontal:before { 2174 | content: "\E519" 2175 | } 2176 | 2177 | .glyphicons-currency-conversion:before { 2178 | content: "\E520" 2179 | } 2180 | 2181 | .glyphicons-user-ban:before { 2182 | content: "\E521" 2183 | } 2184 | 2185 | .glyphicons-user-lock:before { 2186 | content: "\E522" 2187 | } 2188 | 2189 | .glyphicons-user-flag:before { 2190 | content: "\E523" 2191 | } 2192 | 2193 | .glyphicons-user-asterisk:before { 2194 | content: "\E524" 2195 | } 2196 | 2197 | .glyphicons-user-alert:before { 2198 | content: "\E525" 2199 | } 2200 | 2201 | .glyphicons-user-key:before { 2202 | content: "\E526" 2203 | } 2204 | 2205 | .glyphicons-user-conversation:before { 2206 | content: "\E527" 2207 | } 2208 | 2209 | .glyphicons-database:before { 2210 | content: "\E528" 2211 | } 2212 | 2213 | .glyphicons-database-search:before { 2214 | content: "\E529" 2215 | } 2216 | 2217 | .glyphicons-list-alt:before { 2218 | content: "\E530" 2219 | } 2220 | 2221 | .glyphicons-hazard-sign:before { 2222 | content: "\E531" 2223 | } 2224 | 2225 | .glyphicons-hazard:before { 2226 | content: "\E532" 2227 | } 2228 | 2229 | .glyphicons-stop-sign:before { 2230 | content: "\E533" 2231 | } 2232 | 2233 | .glyphicons-lab:before { 2234 | content: "\E534" 2235 | } 2236 | 2237 | .glyphicons-lab-alt:before { 2238 | content: "\E535" 2239 | } 2240 | 2241 | .glyphicons-ice-cream:before { 2242 | content: "\E536" 2243 | } 2244 | 2245 | .glyphicons-ice-lolly:before { 2246 | content: "\E537" 2247 | } 2248 | 2249 | .glyphicons-ice-lolly-tasted:before { 2250 | content: "\E538" 2251 | } 2252 | 2253 | .glyphicons-invoice:before { 2254 | content: "\E539" 2255 | } 2256 | 2257 | .glyphicons-cart-tick:before { 2258 | content: "\E540" 2259 | } 2260 | 2261 | .glyphicons-hourglass:before { 2262 | content: "\E541" 2263 | } 2264 | 2265 | .glyphicons-cat:before { 2266 | content: "\E542" 2267 | } 2268 | 2269 | .glyphicons-lamp:before { 2270 | content: "\E543" 2271 | } 2272 | 2273 | .glyphicons-scale-classic:before { 2274 | content: "\E544" 2275 | } 2276 | 2277 | .glyphicons-eye-plus:before { 2278 | content: "\E545" 2279 | } 2280 | 2281 | .glyphicons-eye-minus:before { 2282 | content: "\E546" 2283 | } 2284 | 2285 | .glyphicons-quote:before { 2286 | content: "\E547" 2287 | } 2288 | 2289 | .glyphicons-bitcoin:before { 2290 | content: "\E548" 2291 | } 2292 | 2293 | .glyphicons-yen:before { 2294 | content: "\E549" 2295 | } 2296 | 2297 | .glyphicons-ruble:before { 2298 | content: "\E550" 2299 | } 2300 | 2301 | .glyphicons-erase:before { 2302 | content: "\E551" 2303 | } 2304 | 2305 | .glyphicons-podcast:before { 2306 | content: "\E552" 2307 | } 2308 | 2309 | .glyphicons-firework:before { 2310 | content: "\E553" 2311 | } 2312 | 2313 | .glyphicons-scale:before { 2314 | content: "\E554" 2315 | } 2316 | 2317 | .glyphicons-king:before { 2318 | content: "\E555" 2319 | } 2320 | 2321 | .glyphicons-queen:before { 2322 | content: "\E556" 2323 | } 2324 | 2325 | .glyphicons-pawn:before { 2326 | content: "\E557" 2327 | } 2328 | 2329 | .glyphicons-bishop:before { 2330 | content: "\E558" 2331 | } 2332 | 2333 | .glyphicons-knight:before { 2334 | content: "\E559" 2335 | } 2336 | 2337 | .glyphicons-mic-mute:before { 2338 | content: "\E560" 2339 | } 2340 | 2341 | .glyphicons-voicemail:before { 2342 | content: "\E561" 2343 | } 2344 | 2345 | .glyphicons-paragraph-alt:before { 2346 | content: "\E562" 2347 | } 2348 | 2349 | .glyphicons-person-walking:before { 2350 | content: "\E563" 2351 | } 2352 | 2353 | .glyphicons-person-wheelchair:before { 2354 | content: "\E564" 2355 | } 2356 | 2357 | .glyphicons-underground:before { 2358 | content: "\E565" 2359 | } 2360 | 2361 | .glyphicons-car-hov:before { 2362 | content: "\E566" 2363 | } 2364 | 2365 | .glyphicons-car-rental:before { 2366 | content: "\E567" 2367 | } 2368 | 2369 | .glyphicons-transport:before { 2370 | content: "\E568" 2371 | } 2372 | 2373 | .glyphicons-taxi:before { 2374 | content: "\E569" 2375 | } 2376 | 2377 | .glyphicons-ice-cream-no:before { 2378 | content: "\E570" 2379 | } 2380 | 2381 | .glyphicons-uk-rat-u:before { 2382 | content: "\E571" 2383 | } 2384 | 2385 | .glyphicons-uk-rat-pg:before { 2386 | content: "\E572" 2387 | } 2388 | 2389 | .glyphicons-uk-rat-12a:before { 2390 | content: "\E573" 2391 | } 2392 | 2393 | .glyphicons-uk-rat-12:before { 2394 | content: "\E574" 2395 | } 2396 | 2397 | .glyphicons-uk-rat-15:before { 2398 | content: "\E575" 2399 | } 2400 | 2401 | .glyphicons-uk-rat-18:before { 2402 | content: "\E576" 2403 | } 2404 | 2405 | .glyphicons-uk-rat-r18:before { 2406 | content: "\E577" 2407 | } 2408 | 2409 | .glyphicons-tv:before { 2410 | content: "\E578" 2411 | } 2412 | 2413 | .glyphicons-sms:before { 2414 | content: "\E579" 2415 | } 2416 | 2417 | .glyphicons-mms:before { 2418 | content: "\E580" 2419 | } 2420 | 2421 | .glyphicons-us-rat-g:before { 2422 | content: "\E581" 2423 | } 2424 | 2425 | .glyphicons-us-rat-pg:before { 2426 | content: "\E582" 2427 | } 2428 | 2429 | .glyphicons-us-rat-pg-13:before { 2430 | content: "\E583" 2431 | } 2432 | 2433 | .glyphicons-us-rat-restricted:before { 2434 | content: "\E584" 2435 | } 2436 | 2437 | .glyphicons-us-rat-no-one-17:before { 2438 | content: "\E585" 2439 | } 2440 | 2441 | .glyphicons-equalizer:before { 2442 | content: "\E586" 2443 | } 2444 | 2445 | .glyphicons-speakers:before { 2446 | content: "\E587" 2447 | } 2448 | 2449 | .glyphicons-remote-control:before { 2450 | content: "\E588" 2451 | } 2452 | 2453 | .glyphicons-remote-control-tv:before { 2454 | content: "\E589" 2455 | } 2456 | 2457 | .glyphicons-shredder:before { 2458 | content: "\E590" 2459 | } 2460 | 2461 | .glyphicons-folder-heart:before { 2462 | content: "\E591" 2463 | } 2464 | 2465 | .glyphicons-person-running:before { 2466 | content: "\E592" 2467 | } 2468 | 2469 | .glyphicons-person:before { 2470 | content: "\E593" 2471 | } 2472 | 2473 | .glyphicons-voice:before { 2474 | content: "\E594" 2475 | } 2476 | 2477 | .glyphicons-stethoscope:before { 2478 | content: "\E595" 2479 | } 2480 | 2481 | .glyphicons-paired:before { 2482 | content: "\E596" 2483 | } 2484 | 2485 | .glyphicons-activity:before { 2486 | content: "\E597" 2487 | } 2488 | 2489 | .glyphicons-watch:before { 2490 | content: "\E598" 2491 | } 2492 | 2493 | .glyphicons-scissors-alt:before { 2494 | content: "\E599" 2495 | } 2496 | 2497 | .glyphicons-car-wheel:before { 2498 | content: "\E600" 2499 | } 2500 | 2501 | .glyphicons-chevron-up:before { 2502 | content: "\E601" 2503 | } 2504 | 2505 | .glyphicons-chevron-down:before { 2506 | content: "\E602" 2507 | } 2508 | 2509 | .glyphicons-superscript:before { 2510 | content: "\E603" 2511 | } 2512 | 2513 | .glyphicons-subscript:before { 2514 | content: "\E604" 2515 | } 2516 | 2517 | .glyphicons-text-size:before { 2518 | content: "\E605" 2519 | } 2520 | 2521 | .glyphicons-text-color:before { 2522 | content: "\E606" 2523 | } 2524 | 2525 | .glyphicons-text-background:before { 2526 | content: "\E607" 2527 | } 2528 | 2529 | .glyphicons-modal-window:before { 2530 | content: "\E608" 2531 | } 2532 | 2533 | .glyphicons-newspaper:before { 2534 | content: "\E609" 2535 | } 2536 | 2537 | .glyphicons-tractor:before { 2538 | content: "\E610" 2539 | } 2540 | 2541 | .glyphicons-camping:before { 2542 | content: "\E611" 2543 | } 2544 | 2545 | .glyphicons-camping-benches:before { 2546 | content: "\E612" 2547 | } 2548 | 2549 | .glyphicons-forest:before { 2550 | content: "\E613" 2551 | } 2552 | 2553 | .glyphicons-park:before { 2554 | content: "\E614" 2555 | } 2556 | 2557 | .glyphicons-field:before { 2558 | content: "\E615" 2559 | } 2560 | 2561 | .glyphicons-mountains:before { 2562 | content: "\E616" 2563 | } 2564 | 2565 | .glyphicons-fees-payments:before { 2566 | content: "\E617" 2567 | } 2568 | 2569 | .glyphicons-small-payments:before { 2570 | content: "\E618" 2571 | } 2572 | 2573 | .glyphicons-mixed-buildings:before { 2574 | content: "\E619" 2575 | } 2576 | 2577 | .glyphicons-industrial-zone:before { 2578 | content: "\E620" 2579 | } 2580 | 2581 | .glyphicons-visitor-tag:before { 2582 | content: "\E621" 2583 | } 2584 | 2585 | .glyphicons-businessman:before { 2586 | content: "\E622" 2587 | } 2588 | 2589 | .glyphicons-meditation:before { 2590 | content: "\E623" 2591 | } 2592 | 2593 | .glyphicons-bath:before { 2594 | content: "\E624" 2595 | } 2596 | 2597 | .glyphicons-donate:before { 2598 | content: "\E625" 2599 | } 2600 | 2601 | .glyphicons-sauna:before { 2602 | content: "\E626" 2603 | } 2604 | 2605 | .glyphicons-bedroom-nightstand:before { 2606 | content: "\E627" 2607 | } 2608 | 2609 | .glyphicons-bedroom-lamp:before { 2610 | content: "\E628" 2611 | } 2612 | 2613 | .glyphicons-doctor:before { 2614 | content: "\E629" 2615 | } 2616 | 2617 | .glyphicons-engineering-networks:before { 2618 | content: "\E630" 2619 | } 2620 | 2621 | .glyphicons-washing-machine:before { 2622 | content: "\E631" 2623 | } 2624 | 2625 | .glyphicons-dryer:before { 2626 | content: "\E632" 2627 | } 2628 | 2629 | .glyphicons-dishwasher:before { 2630 | content: "\E633" 2631 | } 2632 | 2633 | .glyphicons-luggage-group:before { 2634 | content: "\E634" 2635 | } 2636 | 2637 | .glyphicons-teenager:before { 2638 | content: "\E635" 2639 | } 2640 | 2641 | .glyphicons-person-stick:before { 2642 | content: "\E636" 2643 | } 2644 | 2645 | .glyphicons-person-stick-old:before { 2646 | content: "\E637" 2647 | } 2648 | 2649 | .glyphicons-traveler:before { 2650 | content: "\E638" 2651 | } 2652 | 2653 | .glyphicons-veteran:before { 2654 | content: "\E639" 2655 | } 2656 | 2657 | .glyphicons-group-chat:before { 2658 | content: "\E640" 2659 | } 2660 | 2661 | .glyphicons-elections:before { 2662 | content: "\E641" 2663 | } 2664 | 2665 | .glyphicons-law-justice:before { 2666 | content: "\E642" 2667 | } 2668 | 2669 | .glyphicons-judiciary:before { 2670 | content: "\E643" 2671 | } 2672 | 2673 | .glyphicons-house-fire:before { 2674 | content: "\E644" 2675 | } 2676 | 2677 | .glyphicons-firefighters:before { 2678 | content: "\E645" 2679 | } 2680 | 2681 | .glyphicons-police:before { 2682 | content: "\E646" 2683 | } 2684 | 2685 | .glyphicons-ambulance:before { 2686 | content: "\E647" 2687 | } 2688 | 2689 | .glyphicons-light-beacon:before { 2690 | content: "\E648" 2691 | } 2692 | 2693 | .glyphicons-important-day:before { 2694 | content: "\E649" 2695 | } 2696 | 2697 | .glyphicons-bike-park:before { 2698 | content: "\E650" 2699 | } 2700 | 2701 | .glyphicons-object-align-top:before { 2702 | content: "\E651" 2703 | } 2704 | 2705 | .glyphicons-object-align-bottom:before { 2706 | content: "\E652" 2707 | } 2708 | 2709 | .glyphicons-object-align-horizontal:before { 2710 | content: "\E653" 2711 | } 2712 | 2713 | .glyphicons-object-align-left:before { 2714 | content: "\E654" 2715 | } 2716 | 2717 | .glyphicons-object-align-vertical:before { 2718 | content: "\E655" 2719 | } 2720 | 2721 | .glyphicons-object-align-right:before { 2722 | content: "\E656" 2723 | } 2724 | 2725 | .glyphicons-reflect-y:before { 2726 | content: "\E657" 2727 | } 2728 | 2729 | .glyphicons-reflect-x:before { 2730 | content: "\E658" 2731 | } 2732 | 2733 | .glyphicons-tick:before { 2734 | content: "\E659" 2735 | } 2736 | 2737 | .glyphicons-lawnmower:before { 2738 | content: "\E660" 2739 | } 2740 | 2741 | .glyphicons-call-redirect:before { 2742 | content: "\E661" 2743 | } 2744 | 2745 | .glyphicons-call-ip:before { 2746 | content: "\E662" 2747 | } 2748 | 2749 | .glyphicons-call-record:before { 2750 | content: "\E663" 2751 | } 2752 | 2753 | .glyphicons-call-ringtone:before { 2754 | content: "\E664" 2755 | } 2756 | 2757 | .glyphicons-call-traffic:before { 2758 | content: "\E665" 2759 | } 2760 | 2761 | .glyphicons-call-hold:before { 2762 | content: "\E666" 2763 | } 2764 | 2765 | .glyphicons-call-incoming:before { 2766 | content: "\E667" 2767 | } 2768 | 2769 | .glyphicons-call-outgoing:before { 2770 | content: "\E668" 2771 | } 2772 | 2773 | .glyphicons-call-video:before { 2774 | content: "\E669" 2775 | } 2776 | 2777 | .glyphicons-call-missed:before { 2778 | content: "\E670" 2779 | } 2780 | 2781 | .glyphicons-theater:before { 2782 | content: "\E671" 2783 | } 2784 | 2785 | .glyphicons-heartbeat:before { 2786 | content: "\E672" 2787 | } 2788 | 2789 | .glyphicons-kettlebell:before { 2790 | content: "\E673" 2791 | } 2792 | 2793 | .glyphicons-fireplace:before { 2794 | content: "\E674" 2795 | } 2796 | 2797 | .glyphicons-street-lights:before { 2798 | content: "\E675" 2799 | } 2800 | 2801 | .glyphicons-pedestrian:before { 2802 | content: "\E676" 2803 | } 2804 | 2805 | .glyphicons-flood:before { 2806 | content: "\E677" 2807 | } 2808 | 2809 | .glyphicons-open-water:before { 2810 | content: "\E678" 2811 | } 2812 | 2813 | .glyphicons-for-sale:before { 2814 | content: "\E679" 2815 | } 2816 | 2817 | .glyphicons-dustbin:before { 2818 | content: "\E680" 2819 | } 2820 | 2821 | .glyphicons-door:before { 2822 | content: "\E681" 2823 | } 2824 | 2825 | .glyphicons-camp-fire:before { 2826 | content: "\E682" 2827 | } 2828 | 2829 | .glyphicons-fleur-de-lis:before { 2830 | content: "\E683" 2831 | } 2832 | 2833 | .glyphicons-temperature-settings:before { 2834 | content: "\E684" 2835 | } 2836 | 2837 | .glyphicons-article:before { 2838 | content: "\E685" 2839 | } 2840 | 2841 | .glyphicons-sunbath:before { 2842 | content: "\E686" 2843 | } 2844 | 2845 | .glyphicons-balanced-diet:before { 2846 | content: "\E687" 2847 | } 2848 | 2849 | .glyphicons-ticket:before { 2850 | content: "\E688" 2851 | } 2852 | 2853 | .glyphicons-parking-ticket:before { 2854 | content: "\E689" 2855 | } 2856 | 2857 | .glyphicons-parking-meter:before { 2858 | content: "\E690" 2859 | } 2860 | 2861 | .glyphicons-laptop:before { 2862 | content: "\E691" 2863 | } 2864 | 2865 | .glyphicons-tree-structure:before { 2866 | content: "\E692" 2867 | } 2868 | 2869 | .glyphicons-weather-warning:before { 2870 | content: "\E693" 2871 | } 2872 | 2873 | .glyphicons-temperature-low:before { 2874 | content: "\E694" 2875 | } 2876 | 2877 | .glyphicons-temperature-high:before { 2878 | content: "\E695" 2879 | } 2880 | 2881 | .glyphicons-temperature-low-warning:before { 2882 | content: "\E696" 2883 | } 2884 | 2885 | .glyphicons-temperature-high-warning:before { 2886 | content: "\E697" 2887 | } 2888 | 2889 | .glyphicons-hurricane:before { 2890 | content: "\E698" 2891 | } 2892 | 2893 | .glyphicons-storm:before { 2894 | content: "\E699" 2895 | } 2896 | 2897 | .glyphicons-sorted-waste:before { 2898 | content: "\E700" 2899 | } 2900 | 2901 | .glyphicons-ear:before { 2902 | content: "\E701" 2903 | } 2904 | 2905 | .glyphicons-ear-deaf:before { 2906 | content: "\E702" 2907 | } 2908 | 2909 | .glyphicons-file-plus:before { 2910 | content: "\E703" 2911 | } 2912 | 2913 | .glyphicons-file-minus:before { 2914 | content: "\E704" 2915 | } 2916 | 2917 | .glyphicons-file-lock:before { 2918 | content: "\E705" 2919 | } 2920 | 2921 | .glyphicons-file-cloud:before { 2922 | content: "\E706" 2923 | } 2924 | 2925 | .glyphicons-file-cloud-download:before { 2926 | content: "\E707" 2927 | } 2928 | 2929 | .glyphicons-file-cloud-upload:before { 2930 | content: "\E708" 2931 | } 2932 | 2933 | .glyphicons-paragraph:before { 2934 | content: "\E709" 2935 | } 2936 | 2937 | .glyphicons-list-numbered:before { 2938 | content: "\E710" 2939 | } 2940 | 2941 | .glyphicons-donate-heart:before { 2942 | content: "\E711" 2943 | } 2944 | 2945 | .glyphicons-government:before { 2946 | content: "\E712" 2947 | } 2948 | 2949 | .glyphicons-maze:before { 2950 | content: "\E713" 2951 | } 2952 | 2953 | .glyphicons-chronicle:before { 2954 | content: "\E714" 2955 | } 2956 | 2957 | .glyphicons-user-structure:before { 2958 | content: "\E715" 2959 | } 2960 | 2961 | .glyphicons-recycle:before { 2962 | content: "\E716" 2963 | } 2964 | 2965 | .glyphicons-gas:before { 2966 | content: "\E717" 2967 | } 2968 | 2969 | .glyphicons-waste-pipe:before { 2970 | content: "\E718" 2971 | } 2972 | 2973 | .glyphicons-water-pipe:before { 2974 | content: "\E719" 2975 | } 2976 | 2977 | .glyphicons-parking:before { 2978 | content: "\E720" 2979 | } 2980 | 2981 | .glyphicons-closed:before { 2982 | content: "\E721" 2983 | } 2984 | 2985 | .glyphicons-mouse:before { 2986 | content: "\E722" 2987 | } 2988 | 2989 | .glyphicons-mouse-double-click:before { 2990 | content: "\E723" 2991 | } 2992 | 2993 | .glyphicons-mouse-left-click:before { 2994 | content: "\E724" 2995 | } 2996 | 2997 | .glyphicons-mouse-right-click:before { 2998 | content: "\E725" 2999 | } 3000 | 3001 | .glyphicons-mouse-middle-click:before { 3002 | content: "\E726" 3003 | } 3004 | 3005 | .glyphicons-mouse-scroll:before { 3006 | content: "\E727" 3007 | } 3008 | 3009 | .glyphicons-resize-vertical:before { 3010 | content: "\E728" 3011 | } 3012 | 3013 | .glyphicons-resize-horizontal:before { 3014 | content: "\E729" 3015 | } 3016 | 3017 | .glyphicons-temperature:before { 3018 | content: "\E730" 3019 | } 3020 | 3021 | .glyphicons-puzzle:before { 3022 | content: "\E731" 3023 | } 3024 | 3025 | .glyphicons-puzzle-2:before { 3026 | content: "\E732" 3027 | } 3028 | 3029 | .glyphicons-puzzle-3:before { 3030 | content: "\E733" 3031 | } 3032 | 3033 | .glyphicons-nearby-square:before { 3034 | content: "\E734" 3035 | } 3036 | 3037 | .glyphicons-nearby-circle:before { 3038 | content: "\E735" 3039 | } 3040 | 3041 | .glyphicons-rotate-right:before { 3042 | content: "\E736" 3043 | } 3044 | 3045 | .glyphicons-rotate-left:before { 3046 | content: "\E737" 3047 | } 3048 | 3049 | .glyphicons-pictures:before { 3050 | content: "\E738" 3051 | } 3052 | 3053 | .glyphicons-photo-album:before { 3054 | content: "\E739" 3055 | } 3056 | 3057 | .glyphicons-cadastral-map:before { 3058 | content: "\E740" 3059 | } 3060 | 3061 | .glyphicons-fingerprint-scan:before { 3062 | content: "\E741" 3063 | } 3064 | 3065 | .glyphicons-fingerprint:before { 3066 | content: "\E742" 3067 | } 3068 | 3069 | .glyphicons-fingerprint-lock:before { 3070 | content: "\E743" 3071 | } 3072 | 3073 | .glyphicons-fingerprint-ok:before { 3074 | content: "\E744" 3075 | } 3076 | 3077 | .glyphicons-fingerprint-remove:before { 3078 | content: "\E745" 3079 | } 3080 | 3081 | .glyphicons-fingerprint-reload:before { 3082 | content: "\E746" 3083 | } 3084 | 3085 | .glyphicons-pending-notifications:before { 3086 | content: "\E747" 3087 | } 3088 | 3089 | .glyphicons-synchronization:before { 3090 | content: "\E748" 3091 | } 3092 | 3093 | .glyphicons-synchronization-ban:before { 3094 | content: "\E749" 3095 | } 3096 | 3097 | .glyphicons-hash:before { 3098 | content: "\E750" 3099 | } 3100 | 3101 | .glyphicons-gender-male:before { 3102 | content: "\E751" 3103 | } 3104 | 3105 | .glyphicons-gender-female:before { 3106 | content: "\E752" 3107 | } 3108 | 3109 | .glyphicons-gender-virgin-female:before { 3110 | content: "\E753" 3111 | } 3112 | 3113 | .glyphicons-gender-intersex:before { 3114 | content: "\E754" 3115 | } 3116 | 3117 | .glyphicons-gender-transgender:before { 3118 | content: "\E755" 3119 | } 3120 | 3121 | .glyphicons-gender-ori-lesbian:before { 3122 | content: "\E756" 3123 | } 3124 | 3125 | .glyphicons-gender-ori-gay:before { 3126 | content: "\E757" 3127 | } 3128 | 3129 | .glyphicons-gender-ori-hetero:before { 3130 | content: "\E758" 3131 | } 3132 | 3133 | .glyphicons-gender-other:before { 3134 | content: "\E759" 3135 | } 3136 | 3137 | .glyphicons-gender-unknown:before { 3138 | content: "\E760" 3139 | } 3140 | 3141 | .glyphicons-scanner:before { 3142 | content: "\E761" 3143 | } 3144 | 3145 | .glyphicons-multifunction-printer:before { 3146 | content: "\E762" 3147 | } 3148 | 3149 | .glyphicons-lasso:before { 3150 | content: "\E763" 3151 | } 3152 | 3153 | .glyphicons-view-360:before { 3154 | content: "\E764" 3155 | } 3156 | 3157 | .glyphicons-battery-charging:before { 3158 | content: "\E765" 3159 | } 3160 | 3161 | .glyphicons-battery-full:before { 3162 | content: "\E766" 3163 | } 3164 | 3165 | .glyphicons-battery-75:before { 3166 | content: "\E767" 3167 | } 3168 | 3169 | .glyphicons-battery-50:before { 3170 | content: "\E768" 3171 | } 3172 | 3173 | .glyphicons-battery-25:before { 3174 | content: "\E769" 3175 | } 3176 | 3177 | .glyphicons-battery-10:before { 3178 | content: "\E770" 3179 | } 3180 | 3181 | .glyphicons-satellite:before { 3182 | content: "\E771" 3183 | } 3184 | 3185 | .glyphicons-satellite-dish:before { 3186 | content: "\E772" 3187 | } 3188 | 3189 | .glyphicons-satellite-dish-alt:before { 3190 | content: "\E773" 3191 | } 3192 | 3193 | .glyphicons-auction:before { 3194 | content: "\E774" 3195 | } 3196 | 3197 | .glyphicons-directions:before { 3198 | content: "\E775" 3199 | } 3200 | 3201 | .glyphicons-race:before { 3202 | content: "\E776" 3203 | } 3204 | 3205 | .glyphicons-robot:before { 3206 | content: "\E777" 3207 | } 3208 | 3209 | .glyphicons-ruler-alt:before { 3210 | content: "\E778" 3211 | } 3212 | 3213 | .glyphicons-cube-empty:before { 3214 | content: "\E779" 3215 | } 3216 | 3217 | .glyphicons-cube-black:before { 3218 | content: "\E780" 3219 | } 3220 | 3221 | .glyphicons-move-square:before { 3222 | content: "\E781" 3223 | } 3224 | 3225 | .glyphicons-drop:before { 3226 | content: "\E782" 3227 | } 3228 | 3229 | .glyphicons-vr-headset:before { 3230 | content: "\E783" 3231 | } 3232 | 3233 | .glyphicons-vr-charging:before { 3234 | content: "\E784" 3235 | } 3236 | 3237 | .glyphicons-vr-low-battery:before { 3238 | content: "\E785" 3239 | } 3240 | 3241 | .glyphicons-vr-paired:before { 3242 | content: "\E786" 3243 | } 3244 | 3245 | .glyphicons-vr-settings:before { 3246 | content: "\E787" 3247 | } 3248 | 3249 | .glyphicons-vr-maintenance:before { 3250 | content: "\E788" 3251 | } 3252 | 3253 | .glyphicons-filter-remove:before { 3254 | content: "\E789" 3255 | } 3256 | 3257 | .glyphicons-filter-applied:before { 3258 | content: "\E790" 3259 | } 3260 | 3261 | .glyphicons-one-day:before { 3262 | content: "\E791" 3263 | } 3264 | 3265 | .glyphicons-user-vr:before { 3266 | content: "\E792" 3267 | } 3268 | 3269 | .glyphicons-user-vr-add:before { 3270 | content: "\E793" 3271 | } 3272 | 3273 | .glyphicons-user-vr-remove:before { 3274 | content: "\E794" 3275 | } 3276 | 3277 | .glyphicons-dice-1:before { 3278 | content: "\E795" 3279 | } 3280 | 3281 | .glyphicons-dice-2:before { 3282 | content: "\E796" 3283 | } 3284 | 3285 | .glyphicons-dice-3:before { 3286 | content: "\E797" 3287 | } 3288 | 3289 | .glyphicons-dice-4:before { 3290 | content: "\E798" 3291 | } 3292 | 3293 | .glyphicons-dice-5:before { 3294 | content: "\E799" 3295 | } 3296 | 3297 | .glyphicons-dice-6:before { 3298 | content: "\E800" 3299 | } -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | .unlift { 2 | margin-top: 3px; 3 | } 4 | 5 | .resultscontainer { 6 | width: 40%; 7 | float: right; 8 | } 9 | 10 | #chartdiv { 11 | width: 100%; 12 | height: 500px; 13 | overflow: hidden; 14 | } 15 | 16 | fieldset { 17 | float: left; 18 | width: 60%; 19 | } 20 | 21 | .inputGroupContainer { 22 | float: left; 23 | } 24 | 25 | .control-label { 26 | float: left; 27 | width: 20%; 28 | } 29 | 30 | #chartCheck { 31 | width: 17%; 32 | float: left; 33 | padding-top: 5px; 34 | } 35 | 36 | #autoCheck { 37 | width: 40%; 38 | float: left; 39 | } 40 | 41 | .startCalc { 42 | margin-left: 60px; 43 | float: left; 44 | padding-right: 0px; 45 | } 46 | 47 | #startCalcBtn { 48 | float: right; 49 | width: 100%; 50 | } 51 | 52 | .checkboxy { 53 | cursor: pointer; 54 | } 55 | 56 | .form-horizontal { 57 | z-index: 99; 58 | } 59 | 60 | .discordBtn { 61 | float: right; 62 | background-color: #7289DA; 63 | border-color: #7289DA; 64 | margin-top: 2px; 65 | margin-right: 5px; 66 | } 67 | 68 | legend { 69 | height: 40px; 70 | } 71 | 72 | .btcBtn { 73 | float: right; 74 | margin-top: 2px; 75 | margin-right: 10px; 76 | } 77 | 78 | .modal, 79 | .modal-dialog { 80 | margin: 5px auto; 81 | width: 300px; 82 | } 83 | 84 | input.autoInput { 85 | border: 0; 86 | outline: 0; 87 | background: transparent; 88 | border-bottom: 1px solid #BDBDBD; 89 | width: 80px; 90 | text-align: center; 91 | } 92 | 93 | .radioey { 94 | cursor: pointer; 95 | font-weight: normal; 96 | } 97 | 98 | disclaimer { 99 | color: #c87629 100 | } 101 | 102 | .themeSwitch { 103 | float: right; 104 | color: #e58929; 105 | border: 2px solid grey; 106 | padding: 2px; 107 | margin-top: 4px; 108 | margin-right: 8px; 109 | font-size: 0.8em; 110 | } 111 | 112 | .themeSwitch:hover { 113 | cursor: pointer; 114 | color: #c87629; 115 | } 116 | 117 | legend { 118 | color: "#000"; 119 | } 120 | 121 | label { 122 | color: "#000"; 123 | } 124 | 125 | th { 126 | color: "#000"; 127 | } 128 | 129 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azvast/ethercrash-script-simulator/b10d4a235d993181e1636c2f9e5adf7588f3184b/favicon.ico -------------------------------------------------------------------------------- /fonts/glyphicons-iefix.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azvast/ethercrash-script-simulator/b10d4a235d993181e1636c2f9e5adf7588f3184b/fonts/glyphicons-iefix.eot -------------------------------------------------------------------------------- /fonts/glyphicons-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azvast/ethercrash-script-simulator/b10d4a235d993181e1636c2f9e5adf7588f3184b/fonts/glyphicons-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azvast/ethercrash-script-simulator/b10d4a235d993181e1636c2f9e5adf7588f3184b/fonts/glyphicons-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azvast/ethercrash-script-simulator/b10d4a235d993181e1636c2f9e5adf7588f3184b/fonts/glyphicons-regular.woff -------------------------------------------------------------------------------- /fonts/glyphicons-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azvast/ethercrash-script-simulator/b10d4a235d993181e1636c2f9e5adf7588f3184b/fonts/glyphicons-regular.woff2 -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | EtherCrash.io Script Simulator 12 | 13 | 14 | 15 |
16 |   EtherCrash.io Script Simulator 17 |
18 | 19 |
20 | 21 |
22 |
23 | 24 | 25 | 26 | 28 |
29 |
30 |
31 | 32 |
33 | 34 |
35 |
36 | 37 | 38 | 39 | 41 |
42 |
43 |
44 | 45 |
46 | 47 |
48 |
49 | 50 | 51 | 52 | 54 |
55 |
56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 | 64 | 65 |
66 |
67 |
68 | 69 |
70 |
71 | 72 |
73 |
74 | 77 |
78 |
79 | 82 | 83 | (Configure) 84 | 85 |
86 |
87 |
88 |
89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 |
Games playedDuration
Start balanceEnd Balance
Lowest balanceHighest balance
Win StreakLose Streak
Lowest netLose Streak Cost
Lowest ProfitHighest Profit
Profit
135 |
136 |
137 | 195 |
196 | 197 | 198 | 199 | 200 | 201 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | -------------------------------------------------------------------------------- /js/BaBScriptTest.js: -------------------------------------------------------------------------------- 1 | var engine = {}; 2 | var babScriptTester = { 3 | startBalance: 0, 4 | timeToStop: false, 5 | crashList: [], 6 | makeChart: false, 7 | balance: this.startBalance, 8 | currentCrash: 0, 9 | betAmount: 0, 10 | multiplier: 0, 11 | listeners: {}, 12 | lowestBalance: this.balance, 13 | highestBalance: this.balance, 14 | sinceWin: 0, 15 | sinceLose: 0, 16 | winStreak: 0, 17 | loseStreak: 0, 18 | loseStreakCost: 0, 19 | maxLoseStreakCost: 0, 20 | profit: 0, 21 | highestProfit: 0, 22 | lowestProfit: 0, 23 | gamesSinceUpdate: 0, 24 | alreadyCalcd: false, 25 | lastPlayedGameWon: false, 26 | sheet: document.styleSheets[2], 27 | force_color: "green", 28 | lastGamePlayed: false, 29 | darkTheme: false, 30 | lastGame: 0, 31 | balanceLog: [], 32 | duration: 0, 33 | 34 | genOutcomes: function (hash, amount) { 35 | var lastHash = ""; 36 | for (var i = 0; i < amount; i++) { 37 | var gameHash = (lastHash != "" ? this.genGameHash(lastHash) : hash); 38 | var gameCrash = this.crashPointFromHash((lastHash != "" ? this.genGameHash(lastHash) : hash)); 39 | this.crashList.unshift(gameCrash); 40 | lastHash = gameHash; 41 | } 42 | }, 43 | divisible: function (hash, mod) { 44 | // So ABCDEFGHIJ should be chunked like AB CDEF GHIJ 45 | var val = 0; 46 | var o = hash.length % 4; 47 | for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) { 48 | val = ((val << 16) + parseInt(hash.substring(i, i + 4), 16)) % mod; 49 | } 50 | return val === 0; 51 | }, 52 | genGameHash: function (serverSeed) { 53 | return CryptoJS.SHA256(serverSeed).toString(); 54 | }, 55 | hmac: function (key, v) { 56 | var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); 57 | return hmacHasher.finalize(v).toString(); 58 | }, 59 | crashPointFromHash: function (serverSeed) { 60 | // see: provably fair seeding event 61 | var hash = this.hmac(serverSeed, '0xd8b8a187d5865a733680b4bf4d612afec9c6829285d77f438cd70695fb946801'); 62 | // In 1 of 101 games the game crashes instantly. 63 | if (this.divisible(hash, 101)) return 0; 64 | // Use the most significant 52-bit from the hash to calculate the crash point 65 | var h = parseInt(hash.slice(0, 52 / 4), 16); 66 | var e = Math.pow(2, 52); 67 | return (Math.floor((100 * e - h) / (e - h)) / 100).toFixed(2); 68 | } 69 | } 70 | babScriptTester.simulateFromAuto = function (baseBetInBits, autoCashoutAt, stopAtBits, onLossReturnToBaseBet, onWinReturnToBaseBet, increaseBetByOnLoss, increaseBetByOnWin) { 71 | var baseBet = baseBetInBits * 100; 72 | var autoCashoutAtPercentage = autoCashoutAt * 100; 73 | var stopAtBiggerThan = stopAtBits * 100; 74 | var currentBet = baseBet; 75 | engine.on("game_starting", function (info) { 76 | if (engine.lastGamePlay() == "WON") { //won 77 | if (onWinReturnToBaseBet) { 78 | currentBet = baseBet; 79 | } else { 80 | currentBet *= increaseBetByOnWin; 81 | } 82 | } else if (engine.lastGamePlay() == "LOST") { 83 | if (onLossReturnToBaseBet) { 84 | currentBet = baseBet; 85 | } else { 86 | currentBet *= increaseBetByOnLoss; 87 | currentBet = Math.round(currentBet); 88 | } 89 | } else if (engine.lastGamePlay() == "NOT_PLAYED") { 90 | currentBet = baseBet; 91 | } 92 | if (currentBet < stopAtBiggerThan) { 93 | engine.placeBet(currentBet, autoCashoutAtPercentage); 94 | } else { 95 | alert("Bet above maximum bet. Stopping simulation. All bets up and until this point have been simulated."); 96 | engine.stop(); 97 | } 98 | }); 99 | } 100 | 101 | engine.game_id = 0; 102 | 103 | babScriptTester.startCalculation = function () { 104 | let bulletSize = 8; 105 | 106 | babScriptTester.savePrefs(); 107 | babScriptTester.makeChart = document.getElementById("chartCheckbox").checked; 108 | babScriptTester.startBalance = parseInt(document.getElementById("startBalInput").value) * 100; 109 | 110 | babScriptTester.balance = babScriptTester.startBalance; 111 | babScriptTester.lowestBalance = babScriptTester.balance; 112 | babScriptTester.highestBalance = babScriptTester.balance; 113 | babScriptTester.lowestProfit = babScriptTester.balance; 114 | 115 | if (babScriptTester.alreadyCalcd) { 116 | location.reload(); 117 | } else { 118 | babScriptTester.alreadyCalcd = true; 119 | if (document.getElementById("autoCheckbox").checked) { 120 | babScriptTester.simulateFromAuto(parseInt(document.getElementById("autoBaseBet").value), parseFloat(document.getElementById("autoAutoCashout").value).toFixed(2), parseInt(document.getElementById("autoStopAt").value), document.getElementById("lossRtbb").checked, document.getElementById("winRtbb").checked, parseFloat(document.getElementById("lossIbb").value), parseFloat(document.getElementById("winIbb").value)); 121 | } else { 122 | eval(document.getElementById("scriptText").value); 123 | } 124 | babScriptTester.genOutcomes(document.getElementById("endHash").value, parseInt(document.getElementById("backAmount").value)); 125 | if (babScriptTester.makeChart) { 126 | babScriptTester.prevBalance = babScriptTester.startBalance; 127 | babScriptTester.balanceLog.push({ 128 | n: 0, 129 | balance: Math.round(babScriptTester.startBalance) / 100, 130 | force_color: "green" 131 | }); 132 | } 133 | for (var iterator = 0; iterator < babScriptTester.crashList.length; iterator++) { 134 | if (babScriptTester.timeToStop) { 135 | break; 136 | } 137 | babScriptTester.gamesSinceUpdate++; 138 | babScriptTester.currentCrash = babScriptTester.crashList[iterator]; 139 | 140 | babScriptTester.engineFunc("game_starting", { 141 | game_id: engine.game_id, 142 | time_till_start: 5000 143 | }); 144 | babScriptTester.engineFunc("game_started", {}); 145 | ++engine.game_id; 146 | 147 | babScriptTester.engineFunc("game_crash", { 148 | game_crash: babScriptTester.currentCrash * 100 149 | }); 150 | if (babScriptTester.gamesSinceUpdate) { 151 | babScriptTester.lastGamePlayed = false; 152 | } else { 153 | babScriptTester.lastGamePlayed = true; 154 | } 155 | 156 | babScriptTester.duration += Math.log(babScriptTester.currentCrash || 1) / 0.00006; 157 | babScriptTester.profit = babScriptTester.balance - babScriptTester.prevBalance; 158 | 159 | if (babScriptTester.balance < babScriptTester.lowestBalance) { 160 | babScriptTester.lowestBalance = babScriptTester.balance; 161 | } 162 | 163 | if (babScriptTester.balance > babScriptTester.highestBalance) { 164 | babScriptTester.highestBalance = babScriptTester.balance; 165 | } 166 | 167 | if (babScriptTester.profit < babScriptTester.lowestProfit) { 168 | babScriptTester.lowestProfit = babScriptTester.profit; 169 | } 170 | 171 | if (babScriptTester.profit > babScriptTester.highestProfit) { 172 | babScriptTester.highestProfit = babScriptTester.profit; 173 | } 174 | 175 | if (babScriptTester.prevBalance != babScriptTester.balance) { // for skip rounds 176 | if (babScriptTester.prevBalance < babScriptTester.balance) { // win 177 | babScriptTester.sinceWin = 0; 178 | babScriptTester.sinceLose++; 179 | babScriptTester.loseStreakCost = 0; 180 | if (babScriptTester.sinceLose > babScriptTester.winStreak) { 181 | babScriptTester.winStreak = babScriptTester.sinceLose; 182 | } 183 | } else { // lose 184 | babScriptTester.sinceLose = 0; 185 | babScriptTester.sinceWin++; 186 | babScriptTester.loseStreakCost += babScriptTester.betAmount; 187 | 188 | if (babScriptTester.sinceWin > babScriptTester.loseStreak) { 189 | babScriptTester.loseStreak = babScriptTester.sinceWin; 190 | babScriptTester.maxLoseStreakCost = babScriptTester.loseStreakCost; 191 | } 192 | } 193 | } 194 | 195 | if (babScriptTester.makeChart) { 196 | if (babScriptTester.prevBalance) { 197 | babScriptTester.force_color = babScriptTester.prevBalance > babScriptTester.balance ? "red" : "green"; 198 | } 199 | 200 | if (babScriptTester.currentCrash >= 20) { 201 | bulletSize = 14; 202 | } else if (babScriptTester.currentCrash >= 10) { 203 | bulletSize = 12; 204 | } else if (babScriptTester.currentCrash >= 5) { 205 | bulletSize = 10; 206 | } else { 207 | bulletSize = 8; 208 | } 209 | 210 | babScriptTester.balanceLog.push({ 211 | n: iterator + 1, 212 | force_color: babScriptTester.force_color, 213 | betAmount: babScriptTester.betAmount / 100, 214 | crashAt: babScriptTester.currentCrash, 215 | cashedOut: babScriptTester.force_color === "red" ? '-' : `${babScriptTester.multiplier / 100}x`, 216 | balance: Math.round(babScriptTester.balance) / 100, 217 | profit: Math.round(babScriptTester.profit) / 100, 218 | bulletSize 219 | }); 220 | babScriptTester.prevBalance = babScriptTester.balance; 221 | } 222 | if (babScriptTester.timeToStop) { 223 | babScriptTester.lastGame = iterator + 1; 224 | } 225 | } 226 | 227 | document.getElementById("numGames").innerHTML = babScriptTester.timeToStop ? babScriptTester.lastGame : babScriptTester.crashList.length; 228 | document.getElementById("startBal").innerHTML = Math.round(babScriptTester.startBalance) / 100; 229 | document.getElementById("lowestBal").innerHTML = Math.round(babScriptTester.lowestBalance) / 100; 230 | document.getElementById("highestBal").innerHTML = Math.round(babScriptTester.highestBalance) / 100; 231 | document.getElementById("lowestNet").innerHTML = Math.round(babScriptTester.lowestBalance - babScriptTester.startBalance) / 100; 232 | document.getElementById("balance").innerHTML = Math.round(babScriptTester.balance) / 100; 233 | document.getElementById("netProfit").innerHTML = Math.round(babScriptTester.balance - babScriptTester.startBalance) / 100; 234 | document.getElementById("duration").innerHTML = msToTime(babScriptTester.duration); 235 | document.getElementById("winStreak").innerHTML = babScriptTester.winStreak; 236 | document.getElementById("loseStreak").innerHTML = babScriptTester.loseStreak; 237 | document.getElementById("maxLoseStreakCost").innerHTML = Math.round(babScriptTester.maxLoseStreakCost) / 100; 238 | document.getElementById("highestProfit").innerHTML = Math.round(babScriptTester.highestProfit) / 100; 239 | document.getElementById("lowestProfit").innerHTML = Math.round(babScriptTester.lowestProfit) / 100; 240 | 241 | if (babScriptTester.makeChart) { 242 | babScriptTester.chart = AmCharts.makeChart("chartdiv", { 243 | "type": "serial", 244 | "theme": babScriptTester.darkTheme ? "dark" : "light", 245 | "autoMargins": true, 246 | "categoryField": "n", 247 | "valueAxes": [{ 248 | "id": "v1", 249 | "axisAlpha": 0, 250 | "inside": true, 251 | "title": "Balance" 252 | }], 253 | "graphs": [{ 254 | "id": "g1", 255 | "balloon": { 256 | "drop": false, 257 | "adjustBorderColor": false, 258 | "borderColor": "#000000", 259 | "color": "#ffffff" 260 | }, 261 | "bullet": "round", 262 | "bulletBorderAlpha": 1, 263 | "bulletColor": "green", 264 | "bulletSizeField": "bulletSize", 265 | "lineColor": "green", 266 | "useNegativeColorIfDown": true, 267 | "bulletBorderColor": "#FFFFFF", 268 | "bulletBorderThickness": 2, 269 | "negativeLineColor": "red", 270 | "colorField": "force_color", 271 | "lineThickness": 2, 272 | "title": "red line", 273 | "valueField": "balance", 274 | "balloonText": "
Bet: [[betAmount]] Ethos
Crash At: [[crashAt]]x
Cashed Out: [[cashedOut]]
Profit: [[profit]] Ethos
Balance: [[balance]] Ethos
" 275 | }], 276 | "chartScrollbar": { 277 | "graph": "g1", 278 | "oppositeAxis": false, 279 | "offset": 30, 280 | "scrollbarHeight": 80, 281 | "backgroundAlpha": 0, 282 | "selectedBackgroundAlpha": 0.1, 283 | "selectedBackgroundColor": "#888888", 284 | "graphFillAlpha": 0, 285 | "graphLineAlpha": 0.5, 286 | "selectedGraphFillAlpha": 0, 287 | "selectedGraphLineAlpha": 1, 288 | "autoGridCount": true, 289 | "color": "#AAAAAA" 290 | }, 291 | "chartCursor": { 292 | "cursorColor": "black" 293 | }, 294 | "categoryAxis": { 295 | "dashLength": 1, 296 | "minorGridEnabled": true 297 | }, 298 | "dataProvider": babScriptTester.balanceLog 299 | }); 300 | babScriptTester.chart.addListener("rendered", zoomChart); 301 | zoomChart(); 302 | } 303 | } 304 | } 305 | /* 306 | engine.player_bet = function () {} 307 | engine.game_starting = function () {} 308 | engine.game_started = function () {} 309 | engine.game_crash = function () {} 310 | engine.cashed_out = function (args) {} 311 | */ 312 | engine.getUsername = function () { 313 | return "usersUsername"; 314 | } 315 | engine.getBalance = function () { 316 | return babScriptTester.balance; 317 | } 318 | engine.on = function (identifier, response) { 319 | if (babScriptTester.listeners[identifier]) { 320 | babScriptTester.listeners[identifier][babScriptTester.listeners[identifier].length] = response; 321 | } else { 322 | babScriptTester.listeners[identifier] = []; 323 | babScriptTester.listeners[identifier][0] = response; 324 | } 325 | } 326 | babScriptTester.engineFunc = function (identifier, argument) { 327 | if (babScriptTester.listeners[identifier]) { 328 | for (var i = 0; i < babScriptTester.listeners[identifier].length; i++) { 329 | babScriptTester.listeners[identifier][i](argument); 330 | } 331 | } 332 | } 333 | babScriptTester.savePrefs = function () { 334 | var inputElements = document.getElementsByTagName("input"); 335 | var textareaElement = document.getElementsByTagName("textarea")[0]; 336 | for (var i = 0; i < inputElements.length; i++) { 337 | if (inputElements[i].type == "text") { 338 | localStorage.setItem(inputElements[i].id, inputElements[i].value); 339 | } else if (inputElements[i].type == "checkbox" || inputElements[i].type == "radio") { 340 | localStorage.setItem(inputElements[i].id, inputElements[i].checked); 341 | } 342 | } 343 | localStorage.setItem(textareaElement.id, textareaElement.value); 344 | } 345 | engine.stop = function () { 346 | babScriptTester.timeToStop = true; 347 | } 348 | engine.chat = function (args) { } 349 | engine.cashOut = function () { 350 | alert("Simulation stopping. engine.cashOut() used. Time-based cashouts are not supported"); 351 | engine.stop(); 352 | } 353 | engine.getCurrentPayout = function () { 354 | alert("engine.getCurrentPayout() used. Time-based cashouts are not supported"); 355 | return 0; 356 | } 357 | engine.getMaxBet = function () { 358 | return 100000000; 359 | } 360 | engine.getMaxWin = function () { 361 | return 2200000000; 362 | } 363 | engine.lastGamePlayed = function () { 364 | return babScriptTester.lastGamePlayed; 365 | } 366 | engine.lastGamePlay = function () { 367 | if (!engine.lastGamePlayed()) { 368 | return "NOT_PLAYED"; 369 | } else { 370 | return babScriptTester.lastPlayedGameWon ? "WON" : "LOST"; 371 | } 372 | } 373 | 374 | function zoomChart() { 375 | babScriptTester.chart.zoomToIndexes(babScriptTester.chart.dataProvider.length - 40, babScriptTester.chart.dataProvider.length - 1); 376 | setTimeout(function () { 377 | document.getElementById("chartdiv").style.overflow = "hidden"; 378 | }, 500); 379 | } 380 | engine.placeBet = function (bet, multiplier) { 381 | if (babScriptTester.balance - bet < 0) { 382 | alert("Attempted to make bet higher than balance, so can't bet anymore. All bets up and until this point have been simulated."); 383 | bet = 0; 384 | engine.stop(); 385 | } 386 | 387 | babScriptTester.gamesSinceUpdate = 0; 388 | if (babScriptTester.timeToStop) { 389 | return; 390 | } 391 | 392 | babScriptTester.engineFunc("player_bet", { 393 | username: "usersUsername", 394 | index: 0 395 | }); 396 | 397 | babScriptTester.betAmount = bet; 398 | babScriptTester.multiplier = multiplier; 399 | babScriptTester.balance -= bet; 400 | 401 | // result 402 | if (multiplier <= babScriptTester.currentCrash * 100) { 403 | babScriptTester.balance += bet * (multiplier / 100); 404 | babScriptTester.engineFunc("cashed_out", { 405 | username: "usersUsername", 406 | stopped_at: multiplier 407 | }); 408 | babScriptTester.lastPlayedGameWon = true; // win 409 | } else { 410 | babScriptTester.lastPlayedGameWon = false; // lose 411 | } 412 | 413 | if (babScriptTester.balance < 0) { 414 | alert("Negative balance (out of money), so can't bet anymore. All bets up and until this point have been simulated."); 415 | engine.stop(); 416 | } 417 | } 418 | 419 | window.onload = function () { 420 | if (localStorage.getItem("darktheme")) { 421 | babScriptTester.darkTheme = localStorage.getItem("darktheme") == "false"; 422 | // babScriptTester.toggleTheme(); 423 | } 424 | var inputElements = document.getElementsByTagName("input"); 425 | var textareaElement = document.getElementsByTagName("textarea")[0]; 426 | for (var i = 0; i < inputElements.length; i++) { 427 | if (localStorage.getItem(inputElements[i].id)) { 428 | if (inputElements[i].type == "text") { 429 | inputElements[i].value = localStorage.getItem(inputElements[i].id); 430 | } else if (inputElements[i].type == "checkbox" || inputElements[i].type == "radio") { 431 | inputElements[i].checked = localStorage.getItem(inputElements[i].id) == "true"; 432 | } 433 | } 434 | } 435 | if (localStorage.getItem(textareaElement.id)) { 436 | textareaElement.value = localStorage.getItem(textareaElement.id); 437 | } 438 | }; 439 | document.getElementById("startCalcBtn").addEventListener("click", babScriptTester.startCalculation); 440 | 441 | function msToTime(duration) { 442 | let seconds = Math.floor((duration / 1000) % 60), 443 | minutes = Math.floor((duration / (1000 * 60)) % 60), 444 | hours = Math.floor((duration / (1000 * 60 * 60)) % 24), 445 | days = Math.floor(duration / (1000 * 60 * 60 * 24)); 446 | 447 | hours = (hours < 10) ? "0" + hours : hours; 448 | minutes = (minutes < 10) ? "0" + minutes : minutes; 449 | seconds = (seconds < 10) ? "0" + seconds : seconds; 450 | 451 | return (days > 0 ? days + "d " : "") + hours + "h " + minutes + "m " + seconds + "s"; 452 | } 453 | -------------------------------------------------------------------------------- /js/core.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * CryptoJS core components. 9 | */ 10 | var CryptoJS = CryptoJS || (function (Math, undefined) { 11 | /** 12 | * CryptoJS namespace. 13 | */ 14 | var C = {}; 15 | 16 | /** 17 | * Library namespace. 18 | */ 19 | var C_lib = C.lib = {}; 20 | 21 | /** 22 | * Base object for prototypal inheritance. 23 | */ 24 | var Base = C_lib.Base = (function () { 25 | function F() {} 26 | 27 | return { 28 | /** 29 | * Creates a new object that inherits from this object. 30 | * 31 | * @param {Object} overrides Properties to copy into the new object. 32 | * 33 | * @return {Object} The new object. 34 | * 35 | * @static 36 | * 37 | * @example 38 | * 39 | * var MyType = CryptoJS.lib.Base.extend({ 40 | * field: 'value', 41 | * 42 | * method: function () { 43 | * } 44 | * }); 45 | */ 46 | extend: function (overrides) { 47 | // Spawn 48 | F.prototype = this; 49 | var subtype = new F(); 50 | 51 | // Augment 52 | if (overrides) { 53 | subtype.mixIn(overrides); 54 | } 55 | 56 | // Create default initializer 57 | if (!subtype.hasOwnProperty('init')) { 58 | subtype.init = function () { 59 | subtype.$super.init.apply(this, arguments); 60 | }; 61 | } 62 | 63 | // Initializer's prototype is the subtype object 64 | subtype.init.prototype = subtype; 65 | 66 | // Reference supertype 67 | subtype.$super = this; 68 | 69 | return subtype; 70 | }, 71 | 72 | /** 73 | * Extends this object and runs the init method. 74 | * Arguments to create() will be passed to init(). 75 | * 76 | * @return {Object} The new object. 77 | * 78 | * @static 79 | * 80 | * @example 81 | * 82 | * var instance = MyType.create(); 83 | */ 84 | create: function () { 85 | var instance = this.extend(); 86 | instance.init.apply(instance, arguments); 87 | 88 | return instance; 89 | }, 90 | 91 | /** 92 | * Initializes a newly created object. 93 | * Override this method to add some logic when your objects are created. 94 | * 95 | * @example 96 | * 97 | * var MyType = CryptoJS.lib.Base.extend({ 98 | * init: function () { 99 | * // ... 100 | * } 101 | * }); 102 | */ 103 | init: function () { 104 | }, 105 | 106 | /** 107 | * Copies properties into this object. 108 | * 109 | * @param {Object} properties The properties to mix in. 110 | * 111 | * @example 112 | * 113 | * MyType.mixIn({ 114 | * field: 'value' 115 | * }); 116 | */ 117 | mixIn: function (properties) { 118 | for (var propertyName in properties) { 119 | if (properties.hasOwnProperty(propertyName)) { 120 | this[propertyName] = properties[propertyName]; 121 | } 122 | } 123 | 124 | // IE won't copy toString using the loop above 125 | if (properties.hasOwnProperty('toString')) { 126 | this.toString = properties.toString; 127 | } 128 | }, 129 | 130 | /** 131 | * Creates a copy of this object. 132 | * 133 | * @return {Object} The clone. 134 | * 135 | * @example 136 | * 137 | * var clone = instance.clone(); 138 | */ 139 | clone: function () { 140 | return this.init.prototype.extend(this); 141 | } 142 | }; 143 | }()); 144 | 145 | /** 146 | * An array of 32-bit words. 147 | * 148 | * @property {Array} words The array of 32-bit words. 149 | * @property {number} sigBytes The number of significant bytes in this word array. 150 | */ 151 | var WordArray = C_lib.WordArray = Base.extend({ 152 | /** 153 | * Initializes a newly created word array. 154 | * 155 | * @param {Array} words (Optional) An array of 32-bit words. 156 | * @param {number} sigBytes (Optional) The number of significant bytes in the words. 157 | * 158 | * @example 159 | * 160 | * var wordArray = CryptoJS.lib.WordArray.create(); 161 | * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); 162 | * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); 163 | */ 164 | init: function (words, sigBytes) { 165 | words = this.words = words || []; 166 | 167 | if (sigBytes != undefined) { 168 | this.sigBytes = sigBytes; 169 | } else { 170 | this.sigBytes = words.length * 4; 171 | } 172 | }, 173 | 174 | /** 175 | * Converts this word array to a string. 176 | * 177 | * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex 178 | * 179 | * @return {string} The stringified word array. 180 | * 181 | * @example 182 | * 183 | * var string = wordArray + ''; 184 | * var string = wordArray.toString(); 185 | * var string = wordArray.toString(CryptoJS.enc.Utf8); 186 | */ 187 | toString: function (encoder) { 188 | return (encoder || Hex).stringify(this); 189 | }, 190 | 191 | /** 192 | * Concatenates a word array to this word array. 193 | * 194 | * @param {WordArray} wordArray The word array to append. 195 | * 196 | * @return {WordArray} This word array. 197 | * 198 | * @example 199 | * 200 | * wordArray1.concat(wordArray2); 201 | */ 202 | concat: function (wordArray) { 203 | // Shortcuts 204 | var thisWords = this.words; 205 | var thatWords = wordArray.words; 206 | var thisSigBytes = this.sigBytes; 207 | var thatSigBytes = wordArray.sigBytes; 208 | 209 | // Clamp excess bits 210 | this.clamp(); 211 | 212 | // Concat 213 | if (thisSigBytes % 4) { 214 | // Copy one byte at a time 215 | for (var i = 0; i < thatSigBytes; i++) { 216 | var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 217 | thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); 218 | } 219 | } else if (thatWords.length > 0xffff) { 220 | // Copy one word at a time 221 | for (var i = 0; i < thatSigBytes; i += 4) { 222 | thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; 223 | } 224 | } else { 225 | // Copy all words at once 226 | thisWords.push.apply(thisWords, thatWords); 227 | } 228 | this.sigBytes += thatSigBytes; 229 | 230 | // Chainable 231 | return this; 232 | }, 233 | 234 | /** 235 | * Removes insignificant bits. 236 | * 237 | * @example 238 | * 239 | * wordArray.clamp(); 240 | */ 241 | clamp: function () { 242 | // Shortcuts 243 | var words = this.words; 244 | var sigBytes = this.sigBytes; 245 | 246 | // Clamp 247 | words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); 248 | words.length = Math.ceil(sigBytes / 4); 249 | }, 250 | 251 | /** 252 | * Creates a copy of this word array. 253 | * 254 | * @return {WordArray} The clone. 255 | * 256 | * @example 257 | * 258 | * var clone = wordArray.clone(); 259 | */ 260 | clone: function () { 261 | var clone = Base.clone.call(this); 262 | clone.words = this.words.slice(0); 263 | 264 | return clone; 265 | }, 266 | 267 | /** 268 | * Creates a word array filled with random bytes. 269 | * 270 | * @param {number} nBytes The number of random bytes to generate. 271 | * 272 | * @return {WordArray} The random word array. 273 | * 274 | * @static 275 | * 276 | * @example 277 | * 278 | * var wordArray = CryptoJS.lib.WordArray.random(16); 279 | */ 280 | random: function (nBytes) { 281 | var words = []; 282 | for (var i = 0; i < nBytes; i += 4) { 283 | words.push((Math.random() * 0x100000000) | 0); 284 | } 285 | 286 | return new WordArray.init(words, nBytes); 287 | } 288 | }); 289 | 290 | /** 291 | * Encoder namespace. 292 | */ 293 | var C_enc = C.enc = {}; 294 | 295 | /** 296 | * Hex encoding strategy. 297 | */ 298 | var Hex = C_enc.Hex = { 299 | /** 300 | * Converts a word array to a hex string. 301 | * 302 | * @param {WordArray} wordArray The word array. 303 | * 304 | * @return {string} The hex string. 305 | * 306 | * @static 307 | * 308 | * @example 309 | * 310 | * var hexString = CryptoJS.enc.Hex.stringify(wordArray); 311 | */ 312 | stringify: function (wordArray) { 313 | // Shortcuts 314 | var words = wordArray.words; 315 | var sigBytes = wordArray.sigBytes; 316 | 317 | // Convert 318 | var hexChars = []; 319 | for (var i = 0; i < sigBytes; i++) { 320 | var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 321 | hexChars.push((bite >>> 4).toString(16)); 322 | hexChars.push((bite & 0x0f).toString(16)); 323 | } 324 | 325 | return hexChars.join(''); 326 | }, 327 | 328 | /** 329 | * Converts a hex string to a word array. 330 | * 331 | * @param {string} hexStr The hex string. 332 | * 333 | * @return {WordArray} The word array. 334 | * 335 | * @static 336 | * 337 | * @example 338 | * 339 | * var wordArray = CryptoJS.enc.Hex.parse(hexString); 340 | */ 341 | parse: function (hexStr) { 342 | // Shortcut 343 | var hexStrLength = hexStr.length; 344 | 345 | // Convert 346 | var words = []; 347 | for (var i = 0; i < hexStrLength; i += 2) { 348 | words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); 349 | } 350 | 351 | return new WordArray.init(words, hexStrLength / 2); 352 | } 353 | }; 354 | 355 | /** 356 | * Latin1 encoding strategy. 357 | */ 358 | var Latin1 = C_enc.Latin1 = { 359 | /** 360 | * Converts a word array to a Latin1 string. 361 | * 362 | * @param {WordArray} wordArray The word array. 363 | * 364 | * @return {string} The Latin1 string. 365 | * 366 | * @static 367 | * 368 | * @example 369 | * 370 | * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); 371 | */ 372 | stringify: function (wordArray) { 373 | // Shortcuts 374 | var words = wordArray.words; 375 | var sigBytes = wordArray.sigBytes; 376 | 377 | // Convert 378 | var latin1Chars = []; 379 | for (var i = 0; i < sigBytes; i++) { 380 | var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 381 | latin1Chars.push(String.fromCharCode(bite)); 382 | } 383 | 384 | return latin1Chars.join(''); 385 | }, 386 | 387 | /** 388 | * Converts a Latin1 string to a word array. 389 | * 390 | * @param {string} latin1Str The Latin1 string. 391 | * 392 | * @return {WordArray} The word array. 393 | * 394 | * @static 395 | * 396 | * @example 397 | * 398 | * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); 399 | */ 400 | parse: function (latin1Str) { 401 | // Shortcut 402 | var latin1StrLength = latin1Str.length; 403 | 404 | // Convert 405 | var words = []; 406 | for (var i = 0; i < latin1StrLength; i++) { 407 | words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); 408 | } 409 | 410 | return new WordArray.init(words, latin1StrLength); 411 | } 412 | }; 413 | 414 | /** 415 | * UTF-8 encoding strategy. 416 | */ 417 | var Utf8 = C_enc.Utf8 = { 418 | /** 419 | * Converts a word array to a UTF-8 string. 420 | * 421 | * @param {WordArray} wordArray The word array. 422 | * 423 | * @return {string} The UTF-8 string. 424 | * 425 | * @static 426 | * 427 | * @example 428 | * 429 | * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); 430 | */ 431 | stringify: function (wordArray) { 432 | try { 433 | return decodeURIComponent(escape(Latin1.stringify(wordArray))); 434 | } catch (e) { 435 | throw new Error('Malformed UTF-8 data'); 436 | } 437 | }, 438 | 439 | /** 440 | * Converts a UTF-8 string to a word array. 441 | * 442 | * @param {string} utf8Str The UTF-8 string. 443 | * 444 | * @return {WordArray} The word array. 445 | * 446 | * @static 447 | * 448 | * @example 449 | * 450 | * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); 451 | */ 452 | parse: function (utf8Str) { 453 | return Latin1.parse(unescape(encodeURIComponent(utf8Str))); 454 | } 455 | }; 456 | 457 | /** 458 | * Abstract buffered block algorithm template. 459 | * 460 | * The property blockSize must be implemented in a concrete subtype. 461 | * 462 | * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 463 | */ 464 | var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ 465 | /** 466 | * Resets this block algorithm's data buffer to its initial state. 467 | * 468 | * @example 469 | * 470 | * bufferedBlockAlgorithm.reset(); 471 | */ 472 | reset: function () { 473 | // Initial values 474 | this._data = new WordArray.init(); 475 | this._nDataBytes = 0; 476 | }, 477 | 478 | /** 479 | * Adds new data to this block algorithm's buffer. 480 | * 481 | * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. 482 | * 483 | * @example 484 | * 485 | * bufferedBlockAlgorithm._append('data'); 486 | * bufferedBlockAlgorithm._append(wordArray); 487 | */ 488 | _append: function (data) { 489 | // Convert string to WordArray, else assume WordArray already 490 | if (typeof data == 'string') { 491 | data = Utf8.parse(data); 492 | } 493 | 494 | // Append 495 | this._data.concat(data); 496 | this._nDataBytes += data.sigBytes; 497 | }, 498 | 499 | /** 500 | * Processes available data blocks. 501 | * 502 | * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. 503 | * 504 | * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. 505 | * 506 | * @return {WordArray} The processed data. 507 | * 508 | * @example 509 | * 510 | * var processedData = bufferedBlockAlgorithm._process(); 511 | * var processedData = bufferedBlockAlgorithm._process(!!'flush'); 512 | */ 513 | _process: function (doFlush) { 514 | // Shortcuts 515 | var data = this._data; 516 | var dataWords = data.words; 517 | var dataSigBytes = data.sigBytes; 518 | var blockSize = this.blockSize; 519 | var blockSizeBytes = blockSize * 4; 520 | 521 | // Count blocks ready 522 | var nBlocksReady = dataSigBytes / blockSizeBytes; 523 | if (doFlush) { 524 | // Round up to include partial blocks 525 | nBlocksReady = Math.ceil(nBlocksReady); 526 | } else { 527 | // Round down to include only full blocks, 528 | // less the number of blocks that must remain in the buffer 529 | nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); 530 | } 531 | 532 | // Count words ready 533 | var nWordsReady = nBlocksReady * blockSize; 534 | 535 | // Count bytes ready 536 | var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); 537 | 538 | // Process blocks 539 | if (nWordsReady) { 540 | for (var offset = 0; offset < nWordsReady; offset += blockSize) { 541 | // Perform concrete-algorithm logic 542 | this._doProcessBlock(dataWords, offset); 543 | } 544 | 545 | // Remove processed words 546 | var processedWords = dataWords.splice(0, nWordsReady); 547 | data.sigBytes -= nBytesReady; 548 | } 549 | 550 | // Return processed words 551 | return new WordArray.init(processedWords, nBytesReady); 552 | }, 553 | 554 | /** 555 | * Creates a copy of this object. 556 | * 557 | * @return {Object} The clone. 558 | * 559 | * @example 560 | * 561 | * var clone = bufferedBlockAlgorithm.clone(); 562 | */ 563 | clone: function () { 564 | var clone = Base.clone.call(this); 565 | clone._data = this._data.clone(); 566 | 567 | return clone; 568 | }, 569 | 570 | _minBufferSize: 0 571 | }); 572 | 573 | /** 574 | * Abstract hasher template. 575 | * 576 | * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) 577 | */ 578 | var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ 579 | /** 580 | * Configuration options. 581 | */ 582 | cfg: Base.extend(), 583 | 584 | /** 585 | * Initializes a newly created hasher. 586 | * 587 | * @param {Object} cfg (Optional) The configuration options to use for this hash computation. 588 | * 589 | * @example 590 | * 591 | * var hasher = CryptoJS.algo.SHA256.create(); 592 | */ 593 | init: function (cfg) { 594 | // Apply config defaults 595 | this.cfg = this.cfg.extend(cfg); 596 | 597 | // Set initial values 598 | this.reset(); 599 | }, 600 | 601 | /** 602 | * Resets this hasher to its initial state. 603 | * 604 | * @example 605 | * 606 | * hasher.reset(); 607 | */ 608 | reset: function () { 609 | // Reset data buffer 610 | BufferedBlockAlgorithm.reset.call(this); 611 | 612 | // Perform concrete-hasher logic 613 | this._doReset(); 614 | }, 615 | 616 | /** 617 | * Updates this hasher with a message. 618 | * 619 | * @param {WordArray|string} messageUpdate The message to append. 620 | * 621 | * @return {Hasher} This hasher. 622 | * 623 | * @example 624 | * 625 | * hasher.update('message'); 626 | * hasher.update(wordArray); 627 | */ 628 | update: function (messageUpdate) { 629 | // Append 630 | this._append(messageUpdate); 631 | 632 | // Update the hash 633 | this._process(); 634 | 635 | // Chainable 636 | return this; 637 | }, 638 | 639 | /** 640 | * Finalizes the hash computation. 641 | * Note that the finalize operation is effectively a destructive, read-once operation. 642 | * 643 | * @param {WordArray|string} messageUpdate (Optional) A final message update. 644 | * 645 | * @return {WordArray} The hash. 646 | * 647 | * @example 648 | * 649 | * var hash = hasher.finalize(); 650 | * var hash = hasher.finalize('message'); 651 | * var hash = hasher.finalize(wordArray); 652 | */ 653 | finalize: function (messageUpdate) { 654 | // Final message update 655 | if (messageUpdate) { 656 | this._append(messageUpdate); 657 | } 658 | 659 | // Perform concrete-hasher logic 660 | var hash = this._doFinalize(); 661 | 662 | return hash; 663 | }, 664 | 665 | blockSize: 512/32, 666 | 667 | /** 668 | * Creates a shortcut function to a hasher's object interface. 669 | * 670 | * @param {Hasher} hasher The hasher to create a helper for. 671 | * 672 | * @return {Function} The shortcut function. 673 | * 674 | * @static 675 | * 676 | * @example 677 | * 678 | * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); 679 | */ 680 | _createHelper: function (hasher) { 681 | return function (message, cfg) { 682 | return new hasher.init(cfg).finalize(message); 683 | }; 684 | }, 685 | 686 | /** 687 | * Creates a shortcut function to the HMAC's object interface. 688 | * 689 | * @param {Hasher} hasher The hasher to use in this HMAC helper. 690 | * 691 | * @return {Function} The shortcut function. 692 | * 693 | * @static 694 | * 695 | * @example 696 | * 697 | * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); 698 | */ 699 | _createHmacHelper: function (hasher) { 700 | return function (message, key) { 701 | return new C_algo.HMAC.init(hasher, key).finalize(message); 702 | }; 703 | } 704 | }); 705 | 706 | /** 707 | * Algorithm namespace. 708 | */ 709 | var C_algo = C.algo = {}; 710 | 711 | return C; 712 | }(Math)); 713 | -------------------------------------------------------------------------------- /js/hmac.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function () { 8 | // Shortcuts 9 | var C = CryptoJS; 10 | var C_lib = C.lib; 11 | var Base = C_lib.Base; 12 | var C_enc = C.enc; 13 | var Utf8 = C_enc.Utf8; 14 | var C_algo = C.algo; 15 | 16 | /** 17 | * HMAC algorithm. 18 | */ 19 | var HMAC = C_algo.HMAC = Base.extend({ 20 | /** 21 | * Initializes a newly created HMAC. 22 | * 23 | * @param {Hasher} hasher The hash algorithm to use. 24 | * @param {WordArray|string} key The secret key. 25 | * 26 | * @example 27 | * 28 | * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); 29 | */ 30 | init: function (hasher, key) { 31 | // Init hasher 32 | hasher = this._hasher = new hasher.init(); 33 | 34 | // Convert string to WordArray, else assume WordArray already 35 | if (typeof key == 'string') { 36 | key = Utf8.parse(key); 37 | } 38 | 39 | // Shortcuts 40 | var hasherBlockSize = hasher.blockSize; 41 | var hasherBlockSizeBytes = hasherBlockSize * 4; 42 | 43 | // Allow arbitrary length keys 44 | if (key.sigBytes > hasherBlockSizeBytes) { 45 | key = hasher.finalize(key); 46 | } 47 | 48 | // Clamp excess bits 49 | key.clamp(); 50 | 51 | // Clone key for inner and outer pads 52 | var oKey = this._oKey = key.clone(); 53 | var iKey = this._iKey = key.clone(); 54 | 55 | // Shortcuts 56 | var oKeyWords = oKey.words; 57 | var iKeyWords = iKey.words; 58 | 59 | // XOR keys with pad constants 60 | for (var i = 0; i < hasherBlockSize; i++) { 61 | oKeyWords[i] ^= 0x5c5c5c5c; 62 | iKeyWords[i] ^= 0x36363636; 63 | } 64 | oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; 65 | 66 | // Set initial values 67 | this.reset(); 68 | }, 69 | 70 | /** 71 | * Resets this HMAC to its initial state. 72 | * 73 | * @example 74 | * 75 | * hmacHasher.reset(); 76 | */ 77 | reset: function () { 78 | // Shortcut 79 | var hasher = this._hasher; 80 | 81 | // Reset 82 | hasher.reset(); 83 | hasher.update(this._iKey); 84 | }, 85 | 86 | /** 87 | * Updates this HMAC with a message. 88 | * 89 | * @param {WordArray|string} messageUpdate The message to append. 90 | * 91 | * @return {HMAC} This HMAC instance. 92 | * 93 | * @example 94 | * 95 | * hmacHasher.update('message'); 96 | * hmacHasher.update(wordArray); 97 | */ 98 | update: function (messageUpdate) { 99 | this._hasher.update(messageUpdate); 100 | 101 | // Chainable 102 | return this; 103 | }, 104 | 105 | /** 106 | * Finalizes the HMAC computation. 107 | * Note that the finalize operation is effectively a destructive, read-once operation. 108 | * 109 | * @param {WordArray|string} messageUpdate (Optional) A final message update. 110 | * 111 | * @return {WordArray} The HMAC. 112 | * 113 | * @example 114 | * 115 | * var hmac = hmacHasher.finalize(); 116 | * var hmac = hmacHasher.finalize('message'); 117 | * var hmac = hmacHasher.finalize(wordArray); 118 | */ 119 | finalize: function (messageUpdate) { 120 | // Shortcut 121 | var hasher = this._hasher; 122 | 123 | // Compute HMAC 124 | var innerHash = hasher.finalize(messageUpdate); 125 | hasher.reset(); 126 | var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); 127 | 128 | return hmac; 129 | } 130 | }); 131 | }()); 132 | -------------------------------------------------------------------------------- /js/sha256.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function (Math) { 8 | // Shortcuts 9 | var C = CryptoJS; 10 | var C_lib = C.lib; 11 | var WordArray = C_lib.WordArray; 12 | var Hasher = C_lib.Hasher; 13 | var C_algo = C.algo; 14 | 15 | // Initialization and round constants tables 16 | var H = []; 17 | var K = []; 18 | 19 | // Compute constants 20 | (function () { 21 | function isPrime(n) { 22 | var sqrtN = Math.sqrt(n); 23 | for (var factor = 2; factor <= sqrtN; factor++) { 24 | if (!(n % factor)) { 25 | return false; 26 | } 27 | } 28 | 29 | return true; 30 | } 31 | 32 | function getFractionalBits(n) { 33 | return ((n - (n | 0)) * 0x100000000) | 0; 34 | } 35 | 36 | var n = 2; 37 | var nPrime = 0; 38 | while (nPrime < 64) { 39 | if (isPrime(n)) { 40 | if (nPrime < 8) { 41 | H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); 42 | } 43 | K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); 44 | 45 | nPrime++; 46 | } 47 | 48 | n++; 49 | } 50 | }()); 51 | 52 | // Reusable object 53 | var W = []; 54 | 55 | /** 56 | * SHA-256 hash algorithm. 57 | */ 58 | var SHA256 = C_algo.SHA256 = Hasher.extend({ 59 | _doReset: function () { 60 | this._hash = new WordArray.init(H.slice(0)); 61 | }, 62 | 63 | _doProcessBlock: function (M, offset) { 64 | // Shortcut 65 | var H = this._hash.words; 66 | 67 | // Working variables 68 | var a = H[0]; 69 | var b = H[1]; 70 | var c = H[2]; 71 | var d = H[3]; 72 | var e = H[4]; 73 | var f = H[5]; 74 | var g = H[6]; 75 | var h = H[7]; 76 | 77 | // Computation 78 | for (var i = 0; i < 64; i++) { 79 | if (i < 16) { 80 | W[i] = M[offset + i] | 0; 81 | } else { 82 | var gamma0x = W[i - 15]; 83 | var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ 84 | ((gamma0x << 14) | (gamma0x >>> 18)) ^ 85 | (gamma0x >>> 3); 86 | 87 | var gamma1x = W[i - 2]; 88 | var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ 89 | ((gamma1x << 13) | (gamma1x >>> 19)) ^ 90 | (gamma1x >>> 10); 91 | 92 | W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; 93 | } 94 | 95 | var ch = (e & f) ^ (~e & g); 96 | var maj = (a & b) ^ (a & c) ^ (b & c); 97 | 98 | var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); 99 | var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); 100 | 101 | var t1 = h + sigma1 + ch + K[i] + W[i]; 102 | var t2 = sigma0 + maj; 103 | 104 | h = g; 105 | g = f; 106 | f = e; 107 | e = (d + t1) | 0; 108 | d = c; 109 | c = b; 110 | b = a; 111 | a = (t1 + t2) | 0; 112 | } 113 | 114 | // Intermediate hash value 115 | H[0] = (H[0] + a) | 0; 116 | H[1] = (H[1] + b) | 0; 117 | H[2] = (H[2] + c) | 0; 118 | H[3] = (H[3] + d) | 0; 119 | H[4] = (H[4] + e) | 0; 120 | H[5] = (H[5] + f) | 0; 121 | H[6] = (H[6] + g) | 0; 122 | H[7] = (H[7] + h) | 0; 123 | }, 124 | 125 | _doFinalize: function () { 126 | // Shortcuts 127 | var data = this._data; 128 | var dataWords = data.words; 129 | 130 | var nBitsTotal = this._nDataBytes * 8; 131 | var nBitsLeft = data.sigBytes * 8; 132 | 133 | // Add padding 134 | dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); 135 | dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); 136 | dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; 137 | data.sigBytes = dataWords.length * 4; 138 | 139 | // Hash final blocks 140 | this._process(); 141 | 142 | // Return final computed hash 143 | return this._hash; 144 | }, 145 | 146 | clone: function () { 147 | var clone = Hasher.clone.call(this); 148 | clone._hash = this._hash.clone(); 149 | 150 | return clone; 151 | } 152 | }); 153 | 154 | /** 155 | * Shortcut function to the hasher's object interface. 156 | * 157 | * @param {WordArray|string} message The message to hash. 158 | * 159 | * @return {WordArray} The hash. 160 | * 161 | * @static 162 | * 163 | * @example 164 | * 165 | * var hash = CryptoJS.SHA256('message'); 166 | * var hash = CryptoJS.SHA256(wordArray); 167 | */ 168 | C.SHA256 = Hasher._createHelper(SHA256); 169 | 170 | /** 171 | * Shortcut function to the HMAC's object interface. 172 | * 173 | * @param {WordArray|string} message The message to hash. 174 | * @param {WordArray|string} key The secret key. 175 | * 176 | * @return {WordArray} The HMAC. 177 | * 178 | * @static 179 | * 180 | * @example 181 | * 182 | * var hmac = CryptoJS.HmacSHA256(message, key); 183 | */ 184 | C.HmacSHA256 = Hasher._createHmacHelper(SHA256); 185 | }(Math)); 186 | --------------------------------------------------------------------------------