Get the source code from Github

Result:

title Free Bulk URL Shortener Online | No account and no software needed
description Create short links, small URLs, tiny links, and redirect URLs with this free URL shortener and free link shortener. Bulk shortening tool and generator.
url Open (new window) | https://bulkurlshortener.com/?short_link_not_found
keywords
image
code
feeds
authorName
authorUrl
icon
favicon
Open (new window) | https://bulkurlshortener.com/favicon.ico
providerName Bulkurlshortener
providerUrl Open (new window) | https://bulkurlshortener.com
publishedTime
license
cms
language
languages
View all collected data

OEmbed data

Endpoint
All data collected

Meta data

All data collected
Array
(
    [description] => Array
        (
            [0] => Create short links, small URLs, tiny links, and redirect URLs with this free URL shortener and free link shortener. Bulk shortening tool and generator.
        )

    [viewport] => Array
        (
            [0] => width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no
        )

)

Linked data

All data collected

HTML content

                        <!DOCTYPE html>
<html>
    <head>
        <title>Free Bulk URL Shortener Online | No account and no software needed</title>
        <meta name="description" content="Create short links, small URLs, tiny links, and redirect URLs with this free URL shortener and free link shortener. Bulk shortening tool and generator." />
        
        <link rel="canonical" href="https://bulkurlshortener.com/?short_link_not_found" />
        
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
        
        <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;utf8,<?xml version='1.0' encoding='iso-8859-1'?><svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 512.092 512.092' style='enable-background:new 0 0 512.092 512.092;' xml:space='preserve'><g><g><path fill='%23FFA714' d='M312.453,199.601c-6.066-6.102-12.792-11.511-20.053-16.128c-19.232-12.315-41.59-18.859-64.427-18.859 c-31.697-0.059-62.106,12.535-84.48,34.987L34.949,308.23c-22.336,22.379-34.89,52.7-34.91,84.318 c-0.042,65.98,53.41,119.501,119.39,119.543c31.648,0.11,62.029-12.424,84.395-34.816l89.6-89.6 c1.628-1.614,2.537-3.816,2.524-6.108c-0.027-4.713-3.87-8.511-8.583-8.484h-3.413c-18.72,0.066-37.273-3.529-54.613-10.581 c-3.195-1.315-6.867-0.573-9.301,1.877l-64.427,64.512c-20.006,20.006-52.442,20.006-72.448,0 c-20.006-20.006-20.006-52.442,0-72.448l108.971-108.885c19.99-19.965,52.373-19.965,72.363,0 c13.472,12.679,34.486,12.679,47.957,0c5.796-5.801,9.31-13.495,9.899-21.675C322.976,216.108,319.371,206.535,312.453,199.601z'/></g></g><g><g><path fill='%23FFCB2B' d='M477.061,34.993c-46.657-46.657-122.303-46.657-168.96,0l-89.515,89.429c-2.458,2.47-3.167,6.185-1.792,9.387 c1.359,3.211,4.535,5.272,8.021,5.205h3.157c18.698-0.034,37.221,3.589,54.528,10.667c3.195,1.315,6.867,0.573,9.301-1.877 l64.256-64.171c20.006-20.006,52.442-20.006,72.448,0c20.006,20.006,20.006,52.442,0,72.448l-80.043,79.957l-0.683,0.768 l-27.989,27.819c-19.99,19.965-52.373,19.965-72.363,0c-13.472-12.679-34.486-12.679-47.957,0 c-5.833,5.845-9.35,13.606-9.899,21.845c-0.624,9.775,2.981,19.348,9.899,26.283c9.877,9.919,21.433,18.008,34.133,23.893 c1.792,0.853,3.584,1.536,5.376,2.304c1.792,0.768,3.669,1.365,5.461,2.048c1.792,0.683,3.669,1.28,5.461,1.792l5.035,1.365 c3.413,0.853,6.827,1.536,10.325,2.133c4.214,0.626,8.458,1.025,12.715,1.195h5.973h0.512l5.12-0.597 c1.877-0.085,3.84-0.512,6.059-0.512h2.901l5.888-0.853l2.731-0.512l4.949-1.024h0.939c20.961-5.265,40.101-16.118,55.381-31.403 l108.629-108.629C523.718,157.296,523.718,81.65,477.061,34.993z'/></g></g></svg>">
        
        <!-- Google Tag Manager -->
        <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
        })(window,document,'script','dataLayer','GTM-TMPF84S');</script>
        <!-- End Google Tag Manager -->
        
        <style>
            body {
                position: relative;
                margin: 0;
                padding: 0;
                font-family: 'Poppins', sans-serif;
                color: #FFFFFF;
                background-color: #FF7700;
                background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 900'%3E%3Cpolygon fill='%23cc0000' points='957 450 539 900 1396 900'/%3E%3Cpolygon fill='%23aa0000' points='957 450 872.9 900 1396 900'/%3E%3Cpolygon fill='%23d6002b' points='-60 900 398 662 816 900'/%3E%3Cpolygon fill='%23b10022' points='337 900 398 662 816 900'/%3E%3Cpolygon fill='%23d9004b' points='1203 546 1552 900 876 900'/%3E%3Cpolygon fill='%23b2003d' points='1203 546 1552 900 1162 900'/%3E%3Cpolygon fill='%23d3006c' points='641 695 886 900 367 900'/%3E%3Cpolygon fill='%23ac0057' points='587 900 641 695 886 900'/%3E%3Cpolygon fill='%23c4008c' points='1710 900 1401 632 1096 900'/%3E%3Cpolygon fill='%239e0071' points='1710 900 1401 632 1365 900'/%3E%3Cpolygon fill='%23aa00aa' points='1210 900 971 687 725 900'/%3E%3Cpolygon fill='%23880088' points='943 900 1210 900 971 687'/%3E%3C/svg%3E");
                background-attachment: fixed;
                background-size: cover;
            }
            div {
                box-sizing: border-box;
            }
            .page_container {
                position: fixed;
                left: 0;
                top: 0;
                width: 100%;
                height: 100%;
                overflow: auto;
            }
            .header_container {
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 48px;
                color: #5F6368;
                background: #FFFFFF;
                box-shadow: 0 2px 6px 2px rgba(60,64,67,.15);
                z-index: 100;
            }
            .header_placeholder {
                position: relative;
                width: 100%;
                height: 53px;
            }
            .header_container .logo_container {
                margin-left: 20px;
                top: 12px;
            }
            .logo_container {
                display: inline-block;
                position: relative;
                width: 205px;
                height: 20px;
                line-height: 10px;
            }
            .logo_container .logo_icon {
                position: absolute;
                top: 0;
                left: 0;
                width: 20px;
                height: 20px;
            }
            .logo_container .logo_text {
                position: absolute;
                top: 0px;
                left: 28px;
                width: 177px;
                height: 20px;
                line-height: 20px;
                font-family: 'Poppins', sans-serif;
                font-size: 20px;
                font-weight: 400;
                color: #757575;
                white-space: nowrap;
            }
            .logo_icon {
                display: inline-block;
                position: relative;
                background: url("data:image/svg+xml;utf8,<?xml version='1.0' encoding='iso-8859-1'?><svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 512.092 512.092' style='enable-background:new 0 0 512.092 512.092;' xml:space='preserve'><g><g><path fill='%23FFA714' d='M312.453,199.601c-6.066-6.102-12.792-11.511-20.053-16.128c-19.232-12.315-41.59-18.859-64.427-18.859 c-31.697-0.059-62.106,12.535-84.48,34.987L34.949,308.23c-22.336,22.379-34.89,52.7-34.91,84.318 c-0.042,65.98,53.41,119.501,119.39,119.543c31.648,0.11,62.029-12.424,84.395-34.816l89.6-89.6 c1.628-1.614,2.537-3.816,2.524-6.108c-0.027-4.713-3.87-8.511-8.583-8.484h-3.413c-18.72,0.066-37.273-3.529-54.613-10.581 c-3.195-1.315-6.867-0.573-9.301,1.877l-64.427,64.512c-20.006,20.006-52.442,20.006-72.448,0 c-20.006-20.006-20.006-52.442,0-72.448l108.971-108.885c19.99-19.965,52.373-19.965,72.363,0 c13.472,12.679,34.486,12.679,47.957,0c5.796-5.801,9.31-13.495,9.899-21.675C322.976,216.108,319.371,206.535,312.453,199.601z'/></g></g><g><g><path fill='%23FFCB2B' d='M477.061,34.993c-46.657-46.657-122.303-46.657-168.96,0l-89.515,89.429c-2.458,2.47-3.167,6.185-1.792,9.387 c1.359,3.211,4.535,5.272,8.021,5.205h3.157c18.698-0.034,37.221,3.589,54.528,10.667c3.195,1.315,6.867,0.573,9.301-1.877 l64.256-64.171c20.006-20.006,52.442-20.006,72.448,0c20.006,20.006,20.006,52.442,0,72.448l-80.043,79.957l-0.683,0.768 l-27.989,27.819c-19.99,19.965-52.373,19.965-72.363,0c-13.472-12.679-34.486-12.679-47.957,0 c-5.833,5.845-9.35,13.606-9.899,21.845c-0.624,9.775,2.981,19.348,9.899,26.283c9.877,9.919,21.433,18.008,34.133,23.893 c1.792,0.853,3.584,1.536,5.376,2.304c1.792,0.768,3.669,1.365,5.461,2.048c1.792,0.683,3.669,1.28,5.461,1.792l5.035,1.365 c3.413,0.853,6.827,1.536,10.325,2.133c4.214,0.626,8.458,1.025,12.715,1.195h5.973h0.512l5.12-0.597 c1.877-0.085,3.84-0.512,6.059-0.512h2.901l5.888-0.853l2.731-0.512l4.949-1.024h0.939c20.961-5.265,40.101-16.118,55.381-31.403 l108.629-108.629C523.718,157.296,523.718,81.65,477.061,34.993z'/></g></g></svg>");
                background-size: contain;
                background-repeat: no-repeat;
                background-position: center;
            }
            h1, h2 {
                display: inline-block;
                margin: 0;
                font-size: inherit;
                font-weight: inherit;
            }
            .full_width {
                margin-left: auto;
                margin-right: auto;
                width: 100%;
                max-width: 1250px;
            }
            @media only screen and (max-width: 1330px) {
                .full_width {
                    margin-left: auto;
                    margin-right: auto;
                    width: calc(100% - 80px);
                }
            }
            .body_container {
                position: relative;
                width: 100%;
                min-height: calc(100% - 53px - 135px);
                text-align: center;
            }
            .hero_container {
                position: relative;
                padding: 50px 0 50px 0;
            }
            .hero_column_container {
                display: inline-block;
                position: relative;
                width: 50%;
                vertical-align: top;
            }
            .hero_column_container.left {
                text-align: left;
                padding-right: 20px;
            }
            .hero_column_container.right {
                padding-left: 20px;
            }
            @media only screen and (max-width: 815px) {
                .header_container {
                    text-align: center;
                }
                .header_container .logo_container {
                    margin-left: 0;
                }
                .body_container {
                    min-height: initial;
                }
                .hero_column_container {
                    width: 100%;
                }
                .hero_column_container.left {
                    padding-right: 0;
                }
                .hero_column_container.right {
                    padding-left: 0;
                }
            }
            .hero_title {
                max-width: 500px;
                font-size: 60px;
                margin-bottom: 60px;
            }
            .hero_subtittle {
                font-size: 30px;
                margin-bottom: 40px;
            }
            .input_container {
                position: relative;
                top: 20px;
                margin-bottom: 20px;
            }
            .input_container textarea {
                box-sizing: border-box;
                padding: 20px;
                width: 100%;
                height: 300px;
                font-family: 'Poppins', sans-serif;
                color: #FFFFFF;
                background-color: #F37100;
                border: 0;
                border-radius: 0.25em;
                box-shadow: 0 0 5px rgba(0,0,0,0.1) inset;
                outline: none;
            }
            .input_container textarea:disabled {
                background: #C75D00;
                color: #FF8C26;
            }
            .input_container textarea::-moz-selection{
            	background-color: #FFFFFF;
            }
            .input_container textarea::selection{
            	background-color: #FFFFFF;
            }
            .input_button_container {
                position: absolute;
                bottom: 30px;
                right: 25px;
            }
            .input_button_container > div {
                display: inline-block;
                vertical-align: middle;
            }
            .input_button_container > div:not(:last-child) {
                margin-right: 20px;
            }
            input[type="button"].theme_button {
                position: relative;
                box-sizing: border-box;
                padding: 10px 20px;
                color: #FFFFFF;
                font-family: 'Poppins', sans-serif;
                font-weight: 600;
                background: #CC0000;
                border: 0;
                border-radius: 0.15em;
                box-shadow: 0 1px 3px 1px rgba(0,0,0,0.15);
            }
            input[type="button"].alt_button {
                color: #757575;
                background: #FFFFFF;
            }
            input[type="button"].tiny_button {
                padding: 5px 10px;
                font-size: 0.8em;
            }
            input[type="button"].theme_button:hover {
                background: #D80000;
            }
            input[type="button"].theme_button.alt_button:hover {
                background: #EAEAEA;
            }
            input[type="button"].theme_button:active {
                top: 1px;
                background: #AA0000;
                box-shadow: none;
            }
            input[type="button"].theme_button.alt_button:active {
                background: #EAEAEA;
            }
            input[type="button"].theme_button:disabled {
                color: #F35E5E;
                background-color: #AA0000;
            }
            input[type="button"].theme_button.alt_button:disabled {
                color: #9E9E9E;
                background: #CACACA;
            }
            input[type="button"].theme_button:focus {
                outline: none;
            }
            .card_container {
                position: relative;
                margin-bottom: 40px;
                padding: 60px;
                text-align: left;
                border-radius: 0.25em;
                color: #757575;
                background: #FFFFFF;
                box-shadow: 0 1px 3px 1px rgba(60,64,67,.15);
            }
            .card_container.top_notice {
                margin-top: 40px;
                padding: 30px 40px;
                background: #FFD5D5;
            }
            .card_column_2 {
                display: inline-block;
                vertical-align: top;
                width: calc(100% / 2 - 40px);
                margin-left: calc(40px * 2 / 1);
            }
            .card_column_2:first-child {
                margin-left: 0;
            }
            .card_column_2:last-child {
                margin-right: 0;
            }
            .card_column_3 {
                display: inline-block;
                vertical-align: top;
                width: calc(100% / 3 - 40px);
                margin-left: calc(40px * 3 / 2);
            }
            .card_column_3:first-child {
                margin-left: 0;
            }
            .card_column_3:last-child {
                margin-right: 0;
            }
            .card_title {
                font-size: 1.2em;
                color: #424242;
                margin-bottom: 20px;
            }
            .card_title:not(:first-child) {
                margin-top: 40px;
            }
            .card_body {
                margin-bottom: 10px;
            }
            #card_container_output {
                background: #D6002B;
            }
            #output_container {
                max-height: 250px;
                overflow-y: auto;
            }
            .output_row {
                position: relative;
            }
            .output_row:not(:first-child) {
                margin-top: 20px;
            }
            .output_row:not(.loading):after {
                position: absolute;
                content: "";
                left: calc(50% - 10px / 4);
                top: calc(50% - 10px);
                
                width: 0; 
                height: 0; 
                border-top: 10px solid transparent;
                border-bottom: 10px solid transparent;
                
                border-left: 10px solid #B10022;
            }
            .output_column {
                position: relative;
                padding: 10px;
                white-space: nowrap;
                overflow-x: hidden;
                background: #B10022;
                border-radius: 0.25em;
                box-shadow: 0 0 5px rgba(0,0,0,0.1) inset;
            }
            .output_column a {
                color: #FFFFFF;
                text-decoration: none;
            }
            .output_column:last-child a {
                color: #5D0215;
            }
            .output_column span {
                color: #5D0215;
            }
            .output_column_button_container {
                position: absolute;
                top: 8px;
                right: 8px;
            }
            .output_column_button_container.narrow {
                display: none;
            }
            #message_container {
                padding: 20px;
                color: #FFECCC;
                text-align: center;
            }
            .output_controller_container {
                width: 100%;
                text-align: center;
            }
            .output_controller_container > div {
                display: inline-block;
                vertical-align: middle;
            }
            .output_controller_container > div:not(:first-child) {
                margin-left: 20px;
            }
            @media only screen and (max-width: 815px) {
                .input_container textarea {
                    white-space: pre;
                }
                .input_button_container {
                    position: absolute;
                    right: 0;
                    width: 100%;
                    text-align: center;
                }
                .card_container {
                    padding: 40px;
                }
                .card_column_2 {
                    width: 100%;
                    margin-left: 0;
                    margin-right: 0;
                }
                .card_column_2:not(:first-child) {
                    margin-top: 40px;
                }
                .card_column_3 {
                    width: 100%;
                    margin-left: 0;
                    margin-right: 0;
                }
                .card_column_3:not(:first-child) {
                    margin-top: 40px;
                }
                #output_container {
                    max-height: 400px;
                }
                .output_column:not(:first-child) {
                    margin-top: 20px;
                }
                .output_row:not(:first-child) {
                    margin-top: 40px;
                }
                .output_row:not(.loading):after {
                    position: absolute;
                    content: "";
                    left: calc(50% - 10px / 2);
                    top: calc(50% - 10px / 2);
                    
                    width: 0; 
                    height: 0; 
                    border-left: 10px solid transparent;
                    border-right: 10px solid transparent;
                    
                    border-top: 10px solid #B10022;
                }
                .output_column_button_container:not(.narrow) {
                    display: none;
                }
                .output_column_button_container.narrow {
                    display: block;
                }
            }
            @media only screen and (max-width: 500px) {
                .card_container {
                    padding: 30px;
                }
                .output_controller_container > div {
                    display: block;
                }
                .output_controller_container > div:not(:first-child) {
                    margin-left: 0;
                    margin-top: 20px;
                }
            }
            .output_row.loading {
                color: #ffffff;
                font-size: 5px;
                margin: 20px auto;
                width: 1em;
                height: 1em;
                border-radius: 50%;
                position: relative;
                text-indent: -9999em;
                -webkit-animation: load4 1.3s infinite linear;
                animation: load4 1.3s infinite linear;
                -webkit-transform: translateZ(0);
                -ms-transform: translateZ(0);
                transform: translateZ(0);
            }
            @-webkit-keyframes load4 {
                0%,
                100% {
                    box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
                }
                12.5% {
                    box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
                }
                25% {
                    box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
                }
                37.5% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
                }
                50% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
                }
                62.5% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
                }
                75% {
                    box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
                }
                87.5% {
                    box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
                }
            }
            @keyframes load4 {
                0%,
                100% {
                    box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
                }
                12.5% {
                    box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
                }
                25% {
                    box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
                }
                37.5% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
                }
                50% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
                }
                62.5% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
                }
                75% {
                    box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
                }
                87.5% {
                    box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
                }
            }
            .footer_container {
                position: relative;
                padding-top: 20px;
                height: 135px;
            }
            .footer_text_row_container,
            .footer_link_row_container {
                position: relative;
                width: 100%;
                text-align: center;
            }
            .footer_text_row_container {
                font-size: 11px;
            }
            .footer_link_row_container {
                font-size: 12px;
            }
            .footer_text {
                display: inline-block;
                vertical-align: middle;
                margin: 10px 20px 0px 20px;
                color: #FFFFFF;
            }
            .footer_link {
                display: inline-block;
                vertical-align: middle;
                margin: 10px 10px;
            }
            .footer_link a {
                color: #FFABAB;
                text-decoration: none;
            }
            .footer_link a:hover {
                color: #FFFFFF;
            }
            @media only screen and (max-width: 815px) {
                .footer_container {
                    padding-bottom: 50px;
                    height: initial;
                }
            }
        </style>
        
        <link href="https://fonts.googleapis.com/css?family=Poppins:400,500,600&display=swap" rel="stylesheet">
        
    </head>
    <body>
        <!-- Google Tag Manager (noscript) -->
        <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMPF84S"
        height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
        <!-- End Google Tag Manager (noscript) -->
        
        <div class="page_container">
            <div class="header_container">
                <a href="/" >
                    <div class="logo_container">
                        <div class="logo_icon"></div>
                        <div class="logo_text">
                            Bulk URL Shortener
                        </div>
                    </div>
                </a>
            </div>
            <div class="header_placeholder"></div>
            <div class="body_container">
                
                                    
                    <div class="card_container top_notice full_width">
                        <div class="card_title">Link Not Found</div>
                        <div class="card_body">The shortened URL you visited was not found. It may have expired.</div>
                    </div>
                    
                                
                <div class="hero_container full_width">
                    <div class="hero_column_container left">
                        <div class="hero_title">
                            <h1>Always Free Bulk URL Shortener</h1>
                        </div>
                        <div class="hero_subtittle">
                            <h2>1,000 Redirects for every link.</h2>
                            <h2>Expires if not used for 90 days.</h2>
                        </div>
                    </div><div class="hero_column_container right">
                        <div class="input_container">
                            <textarea id="input_textarea" spellcheck="false"></textarea>
                            <div class="input_button_container">
                                <div id="cancel_button_container" style="display: none">
                                    <input class="theme_button alt_button" id="cancel_button" type="button" value="Cancel" disabled />
                                </div><div id="clear_button_container">
                                    <input class="theme_button alt_button" id="clear_button" type="button" value="Clear" />
                                </div><div>
                                    <input class="theme_button" id="input_button" type="button" value="Shorten Links" />
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="card_container full_width" id="card_container_output" style="display: none;">
                    <div class="output_container" id="output_container"></div>
                    <div class="message_container" id="message_container"></div>
                    <div class="output_controller_container">
                        <div>
                            <input class="theme_button alt_button" id="export_csv" type="button" value="Download CSV" />
                        </div><div>
                            <input class="theme_button alt_button" id="export_copy" type="button" value="Copy All" />
                        </div>
                    </div>
                </div>
                <!--
                <div class="card_container full_width">
                    <div class="card_column_3">
                        <div class="card_title"></div>
                        <div class="card_body"></div>
                        <div class="card_body"></div>
                        <div class="card_body"></div>
                    </div><div class="card_column_3">
                        <div class="card_title"></div>
                        <div class="card_body"></div>
                    </div><div class="card_column_3">
                        <div class="card_title"></div>
                        <div class="card_body"></div>
                    </div>
                </div>
                -->
            </div>
            <div class="footer_container full_width">
                <div class="footer_text_row_container">
                    <div class="footer_text">Copyright &copy; Bulk URL Shortener 2020 - 2022. All rights reserved.</div>
                </div>
                <div class="footer_link_row_container">
                    <div class="footer_link"><a href="/privacy" target="_blank">Privacy Policy</a></div>
                    <div class="footer_link"><a href="/report" target="_blank">Report Abuse</a></div>
                </div>
            </div>
        </div>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
        <script>
            
            var el_input_textarea = document.getElementById("input_textarea");
            var $el_input_textarea = $(el_input_textarea);
            
            var el_input_button = document.getElementById("input_button");
            var $el_input_button = $(el_input_button);
            
            var el_cancel_button = document.getElementById("cancel_button");
            var $el_cancel_button = $(el_cancel_button);
            
            var el_cancel_button_container = document.getElementById("cancel_button_container");
            var $el_cancel_button_container = $(el_cancel_button_container);
            
            var el_clear_button = document.getElementById("clear_button");
            var $el_clear_button = $(el_clear_button);
            
            var el_clear_button_container = document.getElementById("clear_button_container");
            var $el_clear_button_container = $(el_clear_button_container);
            
            var el_card_container_output = document.getElementById("card_container_output");
            var $el_card_container_output = $(el_card_container_output);
            
            var el_output_container = document.getElementById("output_container");
            var $el_output_container = $(el_output_container);
            
            var el_message_container = document.getElementById("message_container");
            var $el_message_container = $(el_message_container);
            
            var cache_store = (function(){
                var _storage = {};
                
                var _store = function(k, v) {
                    if (typeof k == "undefined") {
                        return Object.keys(_storage);
                    }
                    if (typeof v == "undefined") {
                        return _storage[k.trim()];
                    }
                    _storage[k.trim()] = v;
                    return v;
                };
                
                return {
                    store: function(k, v) {
                        return _store(k, v);
                    },
                    exists: function(str) {
                        return _storage.hasOwnProperty(str.trim());
                    }
                };
            })();
            
            var shortener = (function(cache) {
                
                var _cache = cache;
                var _started = false;
                var _urls;
                var _count_total;
                var _count_success;
                var _count_error;
                var _server_errors;
                var _server_error_threshold = 10;
                var _server_error_retry_wait_milliseconds = 10000;
                var _aborting;
                
                var _split_rows = function(str) {
                    var arr = str.split(/\n/);
                    for (var ii = arr.length - 1; ii >= 0; ii--) {
        				if (!arr[ii].trim()) {
        					arr.splice(ii, 1);
        				}
        			}
        			return arr;
                };
                
                var _listeners = {
                    "start": [],
                    "stop": [],
                    
                    "empty": [],
                    "error": [],
                    "done": [],
                    "abort": [],
                    
                    "url_success": [],
                    "url_error": []
                };
                
                var _add_listener = function(type, fn) {
                    if (!_listeners.hasOwnProperty(type)) {
                        return;
                    }
                    _listeners[type].push(fn);
                };
                
                var _call_listeners = function(type, args) {
                    if (!_listeners.hasOwnProperty(type)) {
                        return;
                    }
                    args = args ? args : [];
                    for (var fn of _listeners[type]) {
                        fn.apply(fn, args);
                    }
                };
                
                var _server_error_retry = function(url) {
                    if (_server_errors < _server_error_threshold) {
                        console.log("Waiting to try again.")
					    _server_errors++;
					    setTimeout(function(){
					        _next(url);
					    }, _server_error_retry_wait_milliseconds);
					    return;
					}
					console.log("Giving up.");
					_call_listeners("error");
					_call_listeners("stop");
					_started = false;
                }
                
                var _build_shorturl_from_id = function(id) {
                    return document.location.protocol + "//" + document.location.host + "/" + id;
                };
                
                var _next = function(url) {
                    if (_aborting) {
                        _call_listeners("abort", [_count_success, _count_error, _count_total]);
                        _call_listeners("stop");
                        _started = false;
                        return;
                    }
                    if (_urls.length == 0) {
                        _call_listeners("done", [_count_success, _count_error, _count_total]);
                        _call_listeners("stop");
                        _started = false;
                        return;
                    }
                    var url = url ? url : _urls.shift();
                    if (_cache.exists(url)) {
                        _count_success++;
                        _call_listeners("url_success", [url, _build_shorturl_from_id(_cache.store(url)), _count_success, _count_error, _count_total]);
        				_next();
                        return;
                    }
                    $.ajax({
        				url: "/api/create",
        				method: "POST",
        				type: "json",
        				data: {u:url},
        				success: function(data, textStatus, jqXHR) {
        				    if (!data) {
        				        console.error("Could not parse server response.");
        				        _server_error_retry(url);
        				        return;
        				    }
        					if (data.error) {
        					    _count_error++;
        					    _call_listeners("url_error", [url, data.error, _count_success, _count_error, _count_total]);
        					    _next();
        					    return;
        					}
        				    if (!data.i) {
        				        console.error("Could not find short URL ID in server response.");
        				        _server_error_retry(url);
        				        return;
        				    }
        					_cache.store(url, data.i);
                            _count_success++;
        					_call_listeners("url_success", [url, _build_shorturl_from_id(data.i), _count_success, _count_error, _count_total]);
        					_next();
        				},
        				error: function(jqXHR, textStatus, errorThrown) {
        					console.error("Network error: ", jqXHR, textStatus, errorThrown);
        					_server_error_retry(url);
        				}
        			});
                };
                
                var _start = function(str) {
                    if (_started) {
                        console.log("Already started");
                        return false;
                    }
                    _started = true;
                    _urls = _split_rows(str);
                    _count_total = _urls.length;
                    if (_count_total == 0) {
                        _call_listeners("empty");
                        return false;
                    }
                    _count_success = 0;
                    _count_error = 0;
                    _call_listeners("start");
                    _server_errors = 0;
                    _aborting = false;
                    _next();
                    return true;
                };
                
                var _stop = function() {
                    _aborting = true;
                }
                
                return {
                    on: function(type, fn) {
                        return _add_listener(type, fn);
                    },
                    start: function(str) {
                        return _start(str)
                    },
                    stop: function() {
                        return _stop();
                    }
                }
            })(cache_store);
            
            el_input_textarea.value = "https://www.google.com/maps/@36.0657405,-112.1191631,3a,75y,354.81h,89.28t/data=!3m8!1e1!3m6!1sAF1QipMgRxdel20UFGdbTpVLgYfr29AMkvwQGB2xQq6-!2e10!3e11!6shttps:%2F%2Flh5.googleusercontent.com%2Fp%2FAF1QipMgRxdel20UFGdbTpVLgYfr29AMkvwQGB2xQq6-%3Dw203-h100-k-no-pi0-ya297.86172-ro-0-fo100!7i8704!8i4352\n" +
                "https://www.google.com/search?q=free+bulk+url+shortener+online\n" +
                "https://www.example.com/?1=abcdefghijklmnopqrstuvwxyz";
                
            if ($el_input_textarea.offset().top + $el_input_textarea.outerHeight() < $(window).innerHeight()) {
                el_input_textarea.focus();
            }
            
            var input_button_default_value = el_input_button.value;
            var input_button_started_value = "Shortening...";
            
            shortener.on("start", function() {
                
                el_input_textarea.disabled = true;
                
                el_input_button.disabled = true;
                el_input_button.value = input_button_started_value;
                
                $el_clear_button_container.hide();
                el_clear_button.disabled = true;
                
                $el_cancel_button_container.show();
                el_cancel_button.disabled = false;
                
                $el_card_container_output.show();
                $el_output_container.empty();
                
                $el_output_container.append("<div class=\"output_row loading\" />");
                
                $el_message_container.text("Shortening...");
                
            });
            
            shortener.on("url_success", function(url, short_url, count_success, count_error, count_total) {
                
                $input_tiny_button_short_url = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy Short URL")
                    .attr("data-copytext", short_url)
                    .attr("title", short_url);
                $div_tiny_button_short_url = $("<div />")
                    .addClass("output_column_button_container")
                    .append($input_tiny_button_short_url);
                
                $input_tiny_button_short_url_narrow = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy")
                    .attr("data-copytext", short_url)
                    .attr("title", short_url);
                $div_tiny_button_short_url_narrow = $("<div />")
                    .addClass("output_column_button_container narrow")
                    .append($input_tiny_button_short_url_narrow);
                
                $a_short_url = $("<a />")
                    .text(short_url)
                    .attr("href", short_url)
                    .attr("target", "_blank")
                    .attr("title", short_url);
                $div_short_url = $("<div />")
                    .addClass("card_column_2")
                    .addClass("output_column")
                    .append($a_short_url)
                    .append($div_tiny_button_short_url)
                    .append($div_tiny_button_short_url_narrow);
                
                $input_tiny_button_url = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy Original")
                    .attr("data-copytext", url)
                    .attr("title", url);
                $div_tiny_button_url = $("<div />")
                    .addClass("output_column_button_container")
                    .append($input_tiny_button_url);
                
                $input_tiny_button_url_narrow = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy")
                    .attr("data-copytext", url)
                    .attr("title", url);
                $div_tiny_button_url_narrow = $("<div />")
                    .addClass("output_column_button_container narrow")
                    .append($input_tiny_button_url_narrow);
                
                $a_url = $("<a />")
                    .text(url)
                    .attr("href", url)
                    .attr("target", "_blank")
                    .attr("title", url);
                $div_url = $("<div />")
                    .addClass("card_column_2")
                    .addClass("output_column")
                    .append($a_url)
                    .append($div_tiny_button_url)
                    .append($div_tiny_button_url_narrow);
                
                $div_row = $("<div />")
                    .addClass("output_row")
                    .append($div_short_url)
                    .append($div_url);
                
                $el_output_container.find(".loading").before($div_row);
                
                $el_output_container.scrollTop($el_output_container[0].scrollHeight);
                
                if (count_error) {
                    $el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done with " + count_error + " error" + ( count_error == 1 ? "" : "s" ) + ")");
                    return;   
                }
                $el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done)");
                
            });
            
            shortener.on("url_error", function(url, msg, count_success, count_error, count_total) {
                
                $input_tiny_button_short_url = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy Error")
                    .attr("data-copytext", msg)
                    .attr("title", msg);
                $div_tiny_button_short_url = $("<div />")
                    .addClass("output_column_button_container")
                    .append($input_tiny_button_short_url);
                    
                $input_tiny_button_short_url_narrow = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy")
                    .attr("data-copytext", msg)
                    .attr("title", msg);
                $div_tiny_button_short_url_narrow = $("<div />")
                    .addClass("output_column_button_container narrow")
                    .append($input_tiny_button_short_url_narrow);
                
                $span_short_url = $("<span />")
                    .text(msg)
                    .attr("title", msg);
                $div_short_url = $("<div />")
                    .addClass("card_column_2")
                    .addClass("output_column")
                    .append($span_short_url)
                    .append($div_tiny_button_short_url)
                    .append($div_tiny_button_short_url_narrow);
                
                $input_tiny_button_url = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy Original")
                    .attr("data-copytext", url)
                    .attr("title", url);
                $div_tiny_button_url = $("<div />")
                    .addClass("output_column_button_container")
                    .append($input_tiny_button_url);
                
                $input_tiny_button_url_narrow = $("<input />")
                    .attr("type", "button")
                    .addClass("theme_button")
                    .addClass("alt_button")
                    .addClass("tiny_button")
                    .attr("value", "Copy")
                    .attr("data-copytext", url)
                    .attr("title", url);
                $div_tiny_button_url_narrow = $("<div />")
                    .addClass("output_column_button_container narrow")
                    .append($input_tiny_button_url_narrow);
                
                $span_url = $("<span />")
                    .text(url)
                    .attr("title", url);
                $div_url = $("<div />")
                    .addClass("card_column_2")
                    .addClass("output_column")
                    .append($span_url)
                    .append($div_tiny_button_url)
                    .append($div_tiny_button_url_narrow);
                
                $div_row = $("<div />")
                    .addClass("output_row")
                    .append($div_short_url)
                    .append($div_url);
                
                $el_output_container.find(".loading").before($div_row);
                
                $el_output_container.scrollTop($el_output_container[0].scrollHeight);
                
                if (count_error) {
                    $el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done with " + count_error + " error" + ( count_error == 1 ? "" : "s" ) + ")");
                    return;   
                }
                $el_message_container.text("Shortening... (" + count_success + " out of " + count_total + " done)");
                
                console.log(url, msg);
                
            });
            
            shortener.on("abort", function(count_success, count_error, count_total) {
                if (count_error) {
                    $el_message_container.text("Stopped (" + count_success + " out of " + count_total + " done with " + count_error + " error" + ( count_error == 1 ? "" : "s" ) + ")");
                    return;   
                }
                $el_message_container.text("Stopped (" + count_success + " out of " + count_total + " done)");
            });
            
            shortener.on("done", function(count_success, count_error, count_total) {
                if (count_error) {
                    $el_message_container.text("Shortened " + count_success + " out of " + count_total + " link" + ( count_total == 1 ? "" : "s" ) + " with " + count_error + " error" + ( count_error == 1 ? "" : "s" ));
                    return;   
                }
                $el_message_container.text("Shortened " + count_success + " link" + ( count_success == 1 ? "" : "s" ) );
            });
            
            shortener.on("stop", function() {
                
                el_input_textarea.disabled = false;
                
                el_input_button.disabled = false;
                el_input_button.value = input_button_default_value;
                
                $el_clear_button_container.show();
                el_clear_button.disabled = false;
                
                $el_cancel_button_container.hide();
                el_cancel_button.disabled = true;
                
                $el_output_container.find(".loading").remove();
                
            });
            
            var scrollOnce = false;
            $el_input_button.on("click", function() {
                
                if (shortener.start(el_input_textarea.value)) {
                    
                    if (!scrollOnce) {
                        
                        scrollOnce = true;
                        
                        $(".page_container").animate({
                            scrollTop: Math.max(
                                $(".hero_container").outerHeight() + $(".header_placeholder").outerHeight() - 100,
                                $(".page_container").scrollTop()
                            )
                        }, 2000);
                    }
                }
                
            });
            
            $el_clear_button.on("click", function() {
                
                el_input_textarea.value = "";
                
            });
            
            $el_cancel_button.on("click", function() {
                
                shortener.stop();
                
            });
            
            var buttonCopy = new ClipboardJS("input[type=\"button\"][data-copytext]", {
                text: function(trigger) {
                    return trigger.getAttribute('data-copytext');
                }
            });
            
            var copyAllStore;
            var csvAllStore;
            shortener.on("start", function() {
                copyAllStore = [];
                csvAllStore = [];
            });
            shortener.on("url_success", function(url, short_url, count_success, count_error, count_total) {
                copyAllStore.push(short_url + "\t" + url);
                csvAllStore.push("\"" + short_url.replace(/\"/, "\"\"") + "\",\"" + url.replace(/\"/, "\"\"") + "\"");
            });
            shortener.on("url_error", function(url, msg, count_success, count_error, count_total) {
                copyAllStore.push(msg + "\t" + url);
                csvAllStore.push("\"" + msg.replace(/\"/, "\"\"") + "\",\"" + url.replace(/\"/, "\"\"") + "\"");
            });
            
            var buttonCopyAll = new ClipboardJS("#export_copy", {
                text: function(trigger) {
                    return copyAllStore.join("\n");
                }
            });
            
            var makeDownload = function(val, filename, contentType) {
    		    if (!val || !filename || !contentType)
    		    {
    		        return;
    		    }
    		    var a = window.document.createElement('a');
    		    a.href = window.URL.createObjectURL(new Blob([val], {type: contentType}));
    		    a.download = filename;
    		    
    		    document.body.appendChild(a);
    		    a.click();
    		    document.body.removeChild(a);
    		};
            
            $("#export_csv").on("click", function(e) {
                makeDownload(csvAllStore.join("\n"), "bulk-url-shortener.csv", "text/csv");
            });
            
        </script>
    </body>
</html>