diff --git a/.gitignore b/.gitignore index dd3b30b..9df3cf3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ script/hypnotoad.pid local/* files/* stop-upload +tap.xml themes/* !themes/default !themes/default/* @@ -14,6 +15,8 @@ themes/default/templates/data.html.ep themes/default/templates/raw.html.ep themes/default/templates/stats.json.ep themes/default/templates/partial/raw.js.ep +!themes/korrigan +!themes/korrigan/* tmp/* .zanata-cache/* cover_db/* @@ -21,4 +24,4 @@ cover_db/* .ash_history .vscode/ .DS_Store -.cpanm/ \ No newline at end of file +.cpanm/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7367040..203fb15 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,6 +21,7 @@ variables: retry: 2 except: - tags + .carton_bdd_template: &carton_bdd_definition <<: *retry stage: carton_bdd @@ -29,20 +30,29 @@ variables: - local/ needs: - carton -.sqlite_template: &sqlite_definition + +.test_template: &test_definition <<: *retry stage: tests + script: + - MOJO_CONFIG=t/$CI_JOB_NAME.conf make test + - MOJO_CONFIG=t/$CI_JOB_NAME.conf make watch + - MOJO_CONFIG=t/$CI_JOB_NAME.conf make cleanbdd + - MOJO_CONFIG=t/$CI_JOB_NAME.conf make cleanfiles + - MOJO_CONFIG=t/$CI_JOB_NAME.conf make stats + - MOJO_CONFIG=t/$CI_JOB_NAME.conf make test-junit-output artifacts: paths: + - tap.xml - cover_db/ + +.sqlite_template: &sqlite_definition + <<: *test_definition needs: - carton_sqlite + .pg_template: &pg_definition - <<: *retry - stage: tests - artifacts: - paths: - - cover_db/ + <<: *test_definition needs: - carton_postgresql services: @@ -76,6 +86,7 @@ carton: - local/ dependencies: [] script: + - cpanm -l local Devel::Cover~1.29 - carton install --deployment --without=sqlite --without=postgresql --without=minion --without=cache --without=memcached when: always @@ -96,75 +107,37 @@ carton_postgresql: # sqlite1: <<: *sqlite_definition - script: + before_script: - carton install --deployment --without=postgresql --without=minion --without=cache --without=memcached - - MOJO_CONFIG=t/sqlite1.conf make test-sqlite - - MOJO_CONFIG=t/sqlite1.conf make watch - - MOJO_CONFIG=t/sqlite1.conf make cleanbdd - - MOJO_CONFIG=t/sqlite1.conf make cleanfiles - - MOJO_CONFIG=t/sqlite1.conf make stats sqlite2: <<: *sqlite_definition - script: + before_script: - carton install --deployment --without=postgresql --without=cache --without=memcached - - MOJO_CONFIG=t/sqlite2.conf make minion & - - sleep 3 - - MOJO_CONFIG=t/sqlite2.conf make test-sqlite - - MOJO_CONFIG=t/sqlite2.conf make watch - - MOJO_CONFIG=t/sqlite2.conf make cleanbdd - - MOJO_CONFIG=t/sqlite2.conf make cleanfiles - - MOJO_CONFIG=t/sqlite2.conf make stats sqlite3: <<: *sqlite_definition services: - name: postgres:9.6 alias: postgres - script: + before_script: - carton install --deployment --without=cache --without=memcached - export PGPASSWORD=lutim_pwd; echo 'CREATE DATABASE lutim_minion WITH OWNER lutim;' | psql -h postgres -U lutim lutim_db - - MOJO_CONFIG=t/sqlite3.conf make minion & - - sleep 3 - - MOJO_CONFIG=t/sqlite3.conf make test-sqlite - - MOJO_CONFIG=t/sqlite3.conf make watch - - MOJO_CONFIG=t/sqlite3.conf make cleanbdd - - MOJO_CONFIG=t/sqlite3.conf make cleanfiles - - MOJO_CONFIG=t/sqlite3.conf make stats ### PostgreSQL tests ## # postgresql1: <<: *pg_definition - script: + before_script: - carton install --deployment --without=sqlite --without=minion --without=cache --without=memcached - - MOJO_CONFIG=t/postgresql1.conf make test-pg - - MOJO_CONFIG=t/postgresql1.conf make watch - - MOJO_CONFIG=t/postgresql1.conf make cleanbdd - - MOJO_CONFIG=t/postgresql1.conf make cleanfiles - - MOJO_CONFIG=t/postgresql1.conf make stats postgresql2: <<: *pg_definition - script: + before_script: - carton install --deployment --without=cache --without=memcached - - MOJO_CONFIG=t/postgresql2.conf make minion & - - sleep 3 - - MOJO_CONFIG=t/postgresql2.conf make test-pg - - MOJO_CONFIG=t/postgresql2.conf make watch - - MOJO_CONFIG=t/postgresql2.conf make cleanbdd - - MOJO_CONFIG=t/postgresql2.conf make cleanfiles - - MOJO_CONFIG=t/postgresql2.conf make stats postgresql3: <<: *pg_definition - script: + before_script: - carton install --deployment --without=sqlite --without=cache --without=memcached - export PGPASSWORD=lutim_pwd; echo 'CREATE DATABASE lutim_minion WITH OWNER lutim;' | psql -h postgres -U lutim lutim_db - - MOJO_CONFIG=t/postgresql3.conf make minion & - - sleep 3 - - MOJO_CONFIG=t/postgresql3.conf make test-pg - - MOJO_CONFIG=t/postgresql3.conf make watch - - MOJO_CONFIG=t/postgresql3.conf make cleanbdd - - MOJO_CONFIG=t/postgresql3.conf make cleanfiles - - MOJO_CONFIG=t/postgresql3.conf make stats ### Code coverage ## @@ -173,6 +146,9 @@ cover: stage: cover script: - make cover - coverage: '/Total .*\d+\.\d+$/' + coverage: '/Total.* (\d+\.\d+)$/' + artifacts: + reports: + junit: tap.xml except: - tags diff --git a/.provision/README.md b/.provision/README.md new file mode 100644 index 0000000..054a2a4 --- /dev/null +++ b/.provision/README.md @@ -0,0 +1,7 @@ +## ansible-role-lutim + +An ansible role deploy the application on host machine(Ubuntu 20.04) + +## terraform-aws-lutim + +A terraform plan creates necessary AWS infrastructure and deploy the lutim. This terraform plan uses the `lutim_startup.sh` script to deploy lufi on AWS and also uses above ansible role `ansible-role-lutim` to configure the application on AWS. \ No newline at end of file diff --git a/.provision/ansible-role-lutim/README.md b/.provision/ansible-role-lutim/README.md new file mode 100644 index 0000000..9c322bd --- /dev/null +++ b/.provision/ansible-role-lutim/README.md @@ -0,0 +1,50 @@ +Ansible-Role-lutim +========= +This role installs the and configures lutim on Debian/Ubuntu servers with nginx web server configuration. + +Role Variables +-------------- +| Variable name | Value | Description | +| ------------- | ----- | ----------- | +| `app_dir` | /var/www/lutim | Set the application directory for the best practice | +| `lutim_owner` | www-data | Set the application user for the best practice | +| `lutim_group` | www-data | Set the application group for the best practice | +| `_contact` | contact.example.com | Contact option (mandatory), where you have to put some way for the users to contact you. | +| `_secrets` | ffyg7kbkjba | Secrets option (mandotory), which is array of random string. Used by Mojolicious for encrypting session cookies | +| `_project_version` | master | We can chose the project version either Master branch, Dev branch or tag based | +| `_server_name` | IP address (or) CNAME/FQDN | Mention the Server Name for the Nginx configurations | + +Sample example of use in a playbook +-------------- + +The following code has been tested with Ubuntu 20.04 + +```yaml + +- name: "install lutim" + hosts: enter your hosts file + become: yes + role: + - ansible-role-lutim + vars: + lutim_owner: "www-data" + lutim_group: "www-data" + contact: "contact.example.com" + secrets: "yigavlvlivwe" + app_dir: "/var/www/lutim" + project_version: "master" + servername: "IP address (or) CNAME/FQDN" +``` + +Contributing +------------ +Don’t hesitate to create a pull request + + + + + + + + + diff --git a/.provision/ansible-role-lutim/files/cronjob b/.provision/ansible-role-lutim/files/cronjob new file mode 100644 index 0000000..4f71d2d --- /dev/null +++ b/.provision/ansible-role-lutim/files/cronjob @@ -0,0 +1,6 @@ +#Path of the script +PATH=/var/www/lutim + +carton exec script/lutim cron cleanbdd --mode production +carton exec script/lutim cron cleanfiles --mode production +carton exec script/lutim cron watch --mode production diff --git a/.provision/ansible-role-lutim/handlers/main.yml b/.provision/ansible-role-lutim/handlers/main.yml new file mode 100644 index 0000000..2c843be --- /dev/null +++ b/.provision/ansible-role-lutim/handlers/main.yml @@ -0,0 +1,5 @@ +--- +# handlers file for ansible-role-lutim + +- name: restart nginx + service: name=nginx state=restarted diff --git a/.provision/ansible-role-lutim/tasks/apprun.yaml b/.provision/ansible-role-lutim/tasks/apprun.yaml new file mode 100644 index 0000000..80891c7 --- /dev/null +++ b/.provision/ansible-role-lutim/tasks/apprun.yaml @@ -0,0 +1,23 @@ +#apprun.yml +--- + - name: This command will install the postgress module + ansible.builtin.shell: + cmd: carton install --deployment --without=test --without=sqlite + chdir: "{{ app_dir }}" + + - name: Upload application config file + ansible.builtin.template: + src: ../templates/lutim.conf.j2 + dest: "{{ app_dir }}/lutim.conf" + + - name: App executes + ansible.builtin.shell: + cmd: carton exec hypnotoad script/lutim + chdir: "{{ app_dir }}" + + - name: Nginx configuration file add + ansible.builtin.template: + src: ../templates/app.conf + dest: /etc/nginx/conf.d/ + mode: '0644' + notify: restart nginx \ No newline at end of file diff --git a/.provision/ansible-role-lutim/tasks/cronjob.yaml b/.provision/ansible-role-lutim/tasks/cronjob.yaml new file mode 100644 index 0000000..0244108 --- /dev/null +++ b/.provision/ansible-role-lutim/tasks/cronjob.yaml @@ -0,0 +1,21 @@ +--- + - name: Copy the cronjob file + ansible.builtin.copy: + src: ../files/cronjob + dest: /etc/cron.d/lutim + owner: www-data + group: www-data + + - name: "example cronjob" + ansible.builtin.cron: + name: "cronjob" + state: present + user: www-data + minute: "0" + hour: "0" + day: "*" + month: "*" + weekday: "*" + job: | + carton exec script/lutim cron cleanbdd --mode production; carton exec script/lutim cron cleanfiles --mode production; carton exec script/lutim cron watch --mode production + \ No newline at end of file diff --git a/.provision/ansible-role-lutim/tasks/dependencies.yaml b/.provision/ansible-role-lutim/tasks/dependencies.yaml new file mode 100644 index 0000000..e0199ea --- /dev/null +++ b/.provision/ansible-role-lutim/tasks/dependencies.yaml @@ -0,0 +1,23 @@ +# dependencies.yaml +--- + - name: Lutim | Update apt cache + ansible.builtin.apt: update_cache=yes + changed_when: no + - name: Install Dependencies + ansible.builtin.apt: + name: + - nginx + - carton + - build-essential + - libssl-dev + - libpq-dev + - libio-socket-ssl-perl + - zlib1g-dev + - libmojo-sqlite-perl + - shared-mime-info + - perlmagick + state: present + + + + \ No newline at end of file diff --git a/.provision/ansible-role-lutim/tasks/gitclone.yaml b/.provision/ansible-role-lutim/tasks/gitclone.yaml new file mode 100644 index 0000000..69982fa --- /dev/null +++ b/.provision/ansible-role-lutim/tasks/gitclone.yaml @@ -0,0 +1,18 @@ +#gitclone +--- + +- name: clone the repository + ansible.builtin.git: + repo: 'https://framagit.org/fiat-tux/hat-softwares/lutim.git' + dest: "{{ app_dir }}" + clone: yes + update: yes + version: "{{ project_version }}" + +- name: Change the owner + ansible.builtin.file: + path: "{{ app_dir }}" + owner: "{{ lutim_owner }}" + group: "{{ lutim_group }}" + state: directory + recurse: yes \ No newline at end of file diff --git a/.provision/ansible-role-lutim/tasks/main.yml b/.provision/ansible-role-lutim/tasks/main.yml new file mode 100644 index 0000000..6595c67 --- /dev/null +++ b/.provision/ansible-role-lutim/tasks/main.yml @@ -0,0 +1,7 @@ +--- +# tasks file for ansible-role-lutim + +- include: dependencies.yaml +- include: gitclone.yaml +- include: apprun.yaml +- include: cronjob.yaml \ No newline at end of file diff --git a/.provision/ansible-role-lutim/templates/app.conf b/.provision/ansible-role-lutim/templates/app.conf new file mode 100644 index 0000000..3e691a5 --- /dev/null +++ b/.provision/ansible-role-lutim/templates/app.conf @@ -0,0 +1,43 @@ +server { + listen 80; + # No need to have a `root` parameter. + server_name {{ _server_name }}; + # This is important for user's privacy ! + access_log off; + error_log /var/log/nginx/lutim.error.log; + # This is important ! Make it OK with your Lutim configuration + client_max_body_size 40M; + + location ~* ^/(img|css|font|js)/ { + try_files $uri @lutim; + add_header Expires "Thu, 31 Dec 2037 23:55:55 GMT"; + add_header Cache-Control "public, max-age=315360000"; + + # HTTPS only header, improves security + #add_header Strict-Transport-Security "max-age=15768000"; + } + + location / { + try_files $uri @lutim; + + # HTTPS only header, improves security + #add_header Strict-Transport-Security "max-age=15768000"; + } + + location @lutim { + # Adapt this to your configuration + proxy_pass http://127.0.0.1:8080; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # If you want to log the remote port of the image senders, you'll need that + proxy_set_header X-Remote-Port $remote_port; + + proxy_set_header X-Forwarded-Proto $scheme; + + # We expect the downsteam servers to redirect to the right hostname, so don't do any rewrites here. + proxy_redirect off; + } +} diff --git a/.provision/ansible-role-lutim/templates/lutim.conf.j2 b/.provision/ansible-role-lutim/templates/lutim.conf.j2 new file mode 100644 index 0000000..568869c --- /dev/null +++ b/.provision/ansible-role-lutim/templates/lutim.conf.j2 @@ -0,0 +1,317 @@ +# vim:set sw=4 ts=4 sts=4 ft=perl expandtab: +{ + #################### + # Hypnotoad settings + #################### + # see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings + hypnotoad => { + # array of IP addresses and ports you want to listen to + listen => ['http://127.0.0.1:8080'], + # if you use Lutim behind a reverse proxy like Nginx, you want to set proxy to 1 + # if you use Lutim directly, let it commented + #proxy => 1, + }, + + ################ + # Lutim settings + ################ + + # put a way to contact you here and uncomment it + # mandatory + contact => '{{ _contact }}', + + # random string used to encrypt cookies + # mandatory + secrets => ['{{ _secrets }}'], + + # choose a theme. See the available themes in `themes` directory + # optional, default is 'default' + #theme => 'default', + + # length of the images random URL + # optional, default is 8 + #length => 8, + + # length of the encryption key + # optional, default is 8 + #crypto_key_length => 8, + + # how many URLs will be provisioned in a batch ? + # optional, default is 5 + #provis_step => 5, + + # max number of URLs to be provisioned + # optional, default is 100 + #provisioning => 100, + + # anti-flood protection delay, in seconds + # users won't be able to ask Lutim to download images more than one per anti_flood_delay seconds + # optional, default is 5 + #anti_flood_delay => 5, + + # twitter account which will appear on twitter cards + # see https://dev.twitter.com/docs/cards/validation/validator to register your Lutim instance on twitter + # optional, no default + #tweet_card_via => '@foo', + + # max image size, in octets + # you can write it 10*1024*1024 + # optional, default is 10485760 + #max_file_size => 10485760, + + # if you want to have piwik statistics, provide a piwik image tracker + # only the image tracker is allowed, no javascript + # optional, no default + #piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&rec=1', + + # if you want to include something in the right of the screen, put it here + # here's an example to put the logo of your hoster + # optional, no default + #hosted_by => 'My super hoster Hoster logo', + + # DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED + # Lutim now checks if the X-Forwarded-Proto header is present and equal to https. + # set to 1 if you use Lutim behind a secure web server + # optional, default is 0 + #https => 0, + + # broadcast_message which will displayed on all pages of Lutim (but no in json response) + # optional, no default + #broadcast_message => 'Maintenance', + + # array of authorized domains for API calls. + # if you want to authorize everyone to use the API: ['*'] + # optional, no domains allowed by default + #allowed_domains => ['http://1.example.com', 'http://2.example.com'], + + # default time limit for files + # valid values are 0, 1, 7, 30 and 365 + # optional, default is 0 (no limit) + #default_delay => 0, + + # comma-separated values proposed for delays + # optional, default is '0,1,7,30,365' + #proposed_delays => '0,1,7,30,365', + + # number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay) + # a warning message will be displayed on homepage + # optional, default is 0 (no limit) + #max_delay => 0, + + # if set to 1, all the images will be encrypted and the encryption option will no be displayed + # optional, default is 0 + #always_encrypt => 0, + + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + + # length of the image's delete token + # optional, default is 24 + #token_length => 24, + + # URL sub-directory in which you want Lutim to be accessible + # example: you want to have Lutim under https://example.org/lutim/ + # => set prefix to '/lutim' or to '/lutim/', it doesn't matter + # optional, defaut is / + #prefix => '/', + + # choose what database you want to use + # valid choices are sqlite and postgresql (all lowercase) + # optional, default is sqlite + #dbtype => 'sqlite', + + # SQLite ONLY - only used if dbtype is set to sqlite + # define a path to the SQLite database + # you can define it relative to lutim directory or set an absolute path + # remember that it has to be in a directory writable by Lutim user + # optional, default is lutim.db + #db_path => 'lutim.db', + + # PostgreSQL ONLY - only used if dbtype is set to postgresql + # these are the credentials to access the PostgreSQL database + # mandatory if you choosed postgresql as dbtype + pgdb => { + database => 'lutim', + host => 'localhost', + user => 'DBUSER', + pwd => 'DBPASSWORD' + }, + + # use Minion instead of directly increase counters + # need to launch a minion worker service if enabled + # optional, Minion is disabled by default + minion => { + enabled => 0, + # # Which Minion backend to use? + # # valid values are sqlite and postgresql (all lowercase) + # # mandatory if Minion is enabled, default is sqlite + # dbtype => 'sqlite', + # # SQLite ONLY - only used if if you choose sqlite as Minion backend, define the path to the minion database + # # you can define it relative to lutim directory or set an absolute path + # # remember that it has to be in a directory writable by Lutim user + # # optional, default is minion.db + db_path => 'minion.db', + # # PostgreSQL ONLY - only used if you choose postgresql as Minion backend + # # these are the credentials to access the Minion's PostgreSQL database + # # mandatory if you choosed postgresql as Minion backend, no default + pgdb => { + database => 'lutim_minion', + host => 'localhost', + user => 'DBUSER', + pwd => 'DBPASSWORD' + } + }, + + # set `ldap` if you want that only authenticated users can shorten URLs + # please note that everybody can still use shortend URLs + # optional, no default + #ldap => { + # uri => 'ldaps://ldap.example.org', # server URI + # user_tree => 'ou=users,dc=example,dc=org', # search base DN + # bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN + # bind_pwd => 'secr3t', # search bind password + # user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.) + # user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.) + #}, + + # set `htpasswd` if you want to use an htpasswd file instead of ldap + # create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2` + # make sure that lutim can read the file! + # optional, no default + #htpasswd => 'lutim.passwd', + + # if you've set ldap or htpasswd above, the session will last `session_duration` seconds before + # the user needs to reauthenticate + # optional, default is 3600 + #session_duration => 3600, + + # disable counters of images + # set to 1 to disable counters + # optional, counters are enabled by default + #disable_img_stats => 0, + + # define the height of the thumbnails generated at users' will + # this is not the height of the thumbnails send after upload, + # we're talking about thumbnails generated when someone asked for + # https://example.org/lutim/tesrinp?thumb + # this works only if you have ImageMagick + # optional, default is 100 (pixels) + #thumbnail_size => 100, + + # maximum number of files that can be downloaded as a single zip archive + # if too many files are asked, it results a timeout, so Lutim split the zip URL + # in multiple URLs, each with max_file_size images. + # timeout behavior depends heavily on your server ressources (CPU) and if images + # are encrypted + # optional, default is 15 + #max_files_in_zip => 15, + + # maximum size (in MB) of memory allowed for the image cache + # Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images. + # This setting makes the cache remove oldest viewed image if the cache size is over it. + # WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of + # CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details + # So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for + # cache is 400MB. + # If set to 0, the cache is disabled + # optional, default is 0 + #cache_max_size => 0, + + # array of memcached servers to cache URL in order to accelerate responses to often-viewed URL. + # If set to [], the use of memcached is disabled. + # If you use memcached, the internal cache (see cache_max_size option above) will not be used. + # Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached + # servers. + # exemple of valid value: ['127.0.0.1:11211'] + # optional, default is [] + #memcached_servers => [], + + # enable or disable Lutim built-in logs + # set to 1 to disable logs + # optional, default is 0 + #quiet_logs => 0, + + # Content-Security-Policy header that will be sent by Lstu + # Set to '' to disable CSP header + # https://content-security-policy.com/ provides a good documentation about CSP. + # https://report-uri.com/home/generate provides a tool to generate a CSP header. + # optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" + # NB: unsafe-inline for script-src and style-src are here only because morris, + # the graph library used in the stats page requires it + # the default value is good for `default` theme + #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", + + # X-Frame-Options header that will be sent by Lstu + # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' + # Set to '' to disable X-Frame-Options header + # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + # Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly + # to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) + # optional, default is 'DENY' + #x_frame_options => 'DENY', + + # X-Content-Type-Options that will be sent by Lstu + # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options + # Set to '' to disable X-Content-Type-Options header + # optional, default is 'nosniff' + #x_content_type_options => 'nosniff', + + # X-XSS-Protection that will be sent by Lstu + # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection + # Set to '' to disable X-XSS-Protection header + # optional, default is '1; mode=block' + #x_xss_protection => '1; mode=block', + + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + + ########################## + # Lutim cron jobs settings + ########################## + + # number of days shown in /stats page (used with script/lutim cron stats) + # optional, default is 365 + stats_day_num => 365, + + # number of days senders' IP addresses are kept in database + # after that delay, they will be deleted from database (used with script/lutim cron cleanbdd) + # optional, default is 365 + keep_ip_during => 365, + + # max size of the files directory, in octets + # used by script/lutim cron watch to trigger an action + # optional, no default + max_total_size => 10*1024*1024*1024, + + # default action when files directory is over max_total_size (used with script/lutim cron watch) + # valid values are 'warn', 'stop-upload' and 'delete' + # please, see readme + # optional, default is 'warn' + #policy_when_full => 'warn', + + # images which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task + # if delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted + # optional, no default + delete_no_longer_viewed_files => 90 +}; diff --git a/.provision/ansible-role-lutim/vars/main.yml b/.provision/ansible-role-lutim/vars/main.yml new file mode 100644 index 0000000..2e28a1c --- /dev/null +++ b/.provision/ansible-role-lutim/vars/main.yml @@ -0,0 +1,16 @@ +--- +# vars file for ansible-role-lutim + +lutim_owner: "www-data" + +lutim_group: "www-data" + +app_dir: "/var/www/lutim" + +_contact: "" + +_secrets: "" + +_project_version: "" + +_servername: "" \ No newline at end of file diff --git a/.provision/terraform-aws-lutim/README.md b/.provision/terraform-aws-lutim/README.md new file mode 100644 index 0000000..818f7da --- /dev/null +++ b/.provision/terraform-aws-lutim/README.md @@ -0,0 +1,92 @@ +# Terraform-AWS-Deploy + + This terraform plan create the resourcess of EC2 instance + +## Terraform Variables + Edit the `vars.tf` file to add the variables as per your need. + +| Variable name | Value | Description | +| ------------- | ----- | ----------- | +| `aws_region` | us-east-1 | Set the region | +| `vpc_cidr` | 10.0.0.0/16 | Set the cidr value for the vpc | +| `public_subnet_cidr` | 10.0.2.0/24 | Set the cidr value for the public subnet | +| `user` | ubuntu | Set the EC2 instance user name | +| `public_key` | /home/user_name/.ssh/id_rsa_pub | Set the publickey value for the ec2 instance from the host machine | +| `private_key` | /home/user_name/.ssh/id_rsa | Set the private key value for the ec2 instance from the hostmachine | +| `aws_access_key` | AWSACCESSKEY | Enter your aws access key | +| `aws_secrete_key` | AWSSECRETEKEY | Enter your aws secrete key | +| `instance_name` | lutim_app_instance | Set the name for instance | +| `app_dir` | /var/www/lutim | Set the application directory for the best practice | +| `lutim_owner` | www-data | Set the application user for the best practice | +| `lutim_group` | www-data | Set the application group for the best practice | +| `contact` | contact.example.com | Contact option (mandatory), where you have to put some way for the users to contact you. | +| `contact_user` | name | Name of the user | +| `secrets` | ffyg7kbkjba | Secrets option (mandotory), which is array of random string. Used by Mojolicious for encrypting session cookies | +| `app_dir` | /var/www/lutim | Set the application directory for the best practice | +| `lutim_owner` | www-data | Set the application user for the best practice | +| `lutim_group` | www-data | Set the application group for the best practice | +| `contact` | contact.example.com | Contact option (mandatory), where you have to put some way for the users to contact you. | +| `contact_user` | name | Name of the user | +| `secrets` | ffyg7kbkjba | Secrets option (mandotory), which is array of random string. Used by Mojolicious for encrypting session cookies | + +## Usage of terraform plan with lufi deploy script + +```sh +git clone https://framagit.org/fiat-tux/hat-softwares/lutim.git + +cd lutim/.provision/terraform-aws-lutim + +terraform init +terraform plan +terraform apply +``` +## Usage of terraform plan with ansible role + +- Comment out the below `locals` and `user_data` source in __main.tf__ file + +```hcl +locals { + user_data_vars = { + user = var.lutim_owner + group = var.lutim_group + directory = var.app_dir + contact_user = var.contact_user + contact_lutim = var.contact + secret_lutim = var.secret + } +} +``` + +```hcl +user_data = templatefile("${path.module}/lutim_startup.sh", local.user_data_vars) +``` + +- Add the below provisioner data in __main.tf__ file at the `aws_instance` resource + +```sh + connection { + agent = false + type = "ssh" + host = aws_instance.ec2_instance.public_dns + private_key = "${file(var.private_key)}" + user = "${var.user}" + } + + provisioner "remote-exec" { + inline = [ + "sudo apt update -y", + "sudo apt install python3.9 -y", + ] + } + + provisioner "local-exec" { + command = < hosts && \ + echo "[Lutim]" | tee -a hosts && \ + echo "${aws_instance.ec2_instance.public_ip} ansible_user=${var.user} ansible_ssh_private_key_file=${var.private_key}" | tee -a hosts && \ + export ANSIBLE_HOST_KEY_CHECKING=False && \ + ansible-playbook -u ${var.user} --private-key ${var.private_key} -i hosts site.yml + EOT + } +``` diff --git a/.provision/terraform-aws-lutim/lutim_startup.sh b/.provision/terraform-aws-lutim/lutim_startup.sh new file mode 100644 index 0000000..abaa215 --- /dev/null +++ b/.provision/terraform-aws-lutim/lutim_startup.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +echo "**********************************************************************" +echo " *" +echo "Install dependencies *" +echo " *" +echo "**********************************************************************" + +SUDO=sudo +$SUDO apt update +$SUDO apt install jq -y +$SUDO apt install wget -y +$SUDO apt install unzip +$SUDO apt install carton -y +$SUDO apt install build-essential -y +$SUDO apt install nginx -y +$SUDO apt install libssl-dev -y +$SUDO apt install libio-socket-ssl-perl -y +$SUDO apt install liblwp-protocol-https-perl -y +$SUDO apt install zlib1g-dev -y +$SUDO apt install libmojo-sqlite-perl -y +$SUDO apt install libpq-dev -y + +echo "**********************************************************************" +echo " *" +echo "Configuring the Application *" +echo " *" +echo "**********************************************************************" + +sleep 10; +version=$(curl -s https://framagit.org/api/v4/projects/1/releases | jq '.[]' | jq -r '.name' | head -1) +echo $version +pushd ${directory} +$SUDO wget https://framagit.org/fiat-tux/hat-softwares/lutim/-/archive/$version/lutim-$version.zip +$SUDO unzip lutim-$version.zip +$SUDO chown ${user} lutim-$version +$SUDO chgrp ${group} lutim-$version +pushd lutim-$version + +echo "**********************************************************************" +echo " *" +echo "Install Carton Packages *" +echo " *" +echo "**********************************************************************" + +$SUDO carton install --deployment --without=test --without=sqlite --without=mysql + +sleep 10; + +$SUDO cp lutim.conf.template lutim.conf + +sed -i 's/127.0.0.1/0.0.0.0/' lutim.conf +sed -i 's/#contact/contact/g' lutim.conf +sed -i "s/John Doe/${contact_user}/g" lutim.conf +sed -i "s/admin[at]example.com/${contact_lutim}/g" lutim.conf +sed -i "s/fdjsofjoihrei/${secret_lutim}/g" lutim.conf +sed -i '153 , 158 s/#/ /g' lutim.conf + +echo "**********************************************************************" +echo " *" +echo "Run the Application *" +echo " *" +echo "**********************************************************************" + +$SUDO carton exec hypnotoad script/lutim + diff --git a/.provision/terraform-aws-lutim/main.tf b/.provision/terraform-aws-lutim/main.tf new file mode 100644 index 0000000..2e22cb8 --- /dev/null +++ b/.provision/terraform-aws-lutim/main.tf @@ -0,0 +1,123 @@ +locals { + user_data_vars = { + user = var.lutim_owner + group = var.lutim_group + directory = var.app_dir + contact_user = var.contact_user + contact_lutim = var.contact + secret_lutim = var.secret + } +} + +#Create the VPC +resource "aws_vpc" "vpc" { + cidr_block = "${var.vpc_cidr}" + enable_dns_hostnames = true + enable_dns_support = true + instance_tenancy = "default" + tags = { + Name = "lutim-master-vpc" + } +} + +# Create InternetGateWay and attach to VPC + +resource "aws_internet_gateway" "IGW" { + vpc_id = "${aws_vpc.vpc.id}" + tags = { + "Name" = "lutim-master-igw" + } +} + +# Create a public subnet + +resource "aws_subnet" "publicsubnet" { + vpc_id = "${aws_vpc.vpc.id}" + cidr_block = "${var.public_subnet_cidr}" + map_public_ip_on_launch = true + tags = { + Name = "lutim-master-us-east-1-public" + } +} + +# Create routeTable +resource "aws_route_table" "publicroute" { + vpc_id = "${aws_vpc.vpc.id}" + route { + cidr_block = "0.0.0.0/0" + gateway_id = "${aws_internet_gateway.IGW.id}" + } + + tags = { + Name = "lutim-master-us-east-1-public-rt" + } +} + +resource "aws_main_route_table_association" "mainRTB" { + vpc_id = "${aws_vpc.vpc.id}" + route_table_id = "${aws_route_table.publicroute.id}" +} +## Create security group +resource "aws_security_group" "security" { + name = "lutim-master-sg" + description = "allow all traffic" + vpc_id = "${aws_vpc.vpc.id}" + + ingress { + description = "allow all traffic" + from_port = "0" + to_port = "65535" + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + ingress { + description = "allow port SSH" + from_port = "22" + to_port = "22" + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + +} + +# Add ubuntu AMI +data "aws_ami" "ubuntu" { + most_recent = true + owners = ["099720109477"] + + filter { + name = "name" + values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"] + } +} + +#Create key_pair for the instance + +resource "aws_key_pair" "genkey" { + key_name = "lutim.webapp" + public_key = "${file(var.public_key)}" +} + +# Craete ec2 instance +resource "aws_instance" "ec2_instance" { + ami = "${data.aws_ami.ubuntu.id}" + instance_type = "t2.medium" + associate_public_ip_address = "true" + subnet_id = "${aws_subnet.publicsubnet.id}" + vpc_security_group_ids = ["${aws_security_group.security.id}"] + user_data = templatefile("${path.module}/lutim_startup.sh", local.user_data_vars) + key_name = "lutim.webapp" + + tags = { + Name = "${var.instance_name}" + } +} + + + diff --git a/.provision/terraform-aws-lutim/output.tf b/.provision/terraform-aws-lutim/output.tf new file mode 100644 index 0000000..8c6f79e --- /dev/null +++ b/.provision/terraform-aws-lutim/output.tf @@ -0,0 +1,7 @@ +output "public_ip" { + value = "${aws_instance.ec2_instance.public_ip}" +} + +output "App_running_at" { + value = "http://${aws_instance.ec2_instance.public_ip}:8080" +} diff --git a/.provision/terraform-aws-lutim/provider.tf b/.provision/terraform-aws-lutim/provider.tf new file mode 100644 index 0000000..d037bd2 --- /dev/null +++ b/.provision/terraform-aws-lutim/provider.tf @@ -0,0 +1,14 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 3.0" + } + } +} + +provider "aws" { +access_key = "${var.aws_access_key}" +secret_key = "${var.aws_secret_key}" +region = "${var.aws_region}" +} \ No newline at end of file diff --git a/.provision/terraform-aws-lutim/vars.tf b/.provision/terraform-aws-lutim/vars.tf new file mode 100644 index 0000000..1b7e183 --- /dev/null +++ b/.provision/terraform-aws-lutim/vars.tf @@ -0,0 +1,60 @@ +variable "aws_region" { + default = "aws_region" +} +variable "vpc_cidr" { + default = "cidr_value" +} +variable "public_subnet_cidr" { + default = "cidr_value" +} +variable "public_subnet1_cidr" { + default = "cidr_value" +} + +variable "user" { + default = "user_of_instance" +} + +variable "public_key" { + default = "$PWD_publickey" +} +variable "private_key" { + default = "$PWD_privatekey" +} +variable "aws_access_key" { + default = "aws_access_key" +} + +variable "aws_secret_key" { + default = "aws_secrete_key" +} + +variable "instance_name" { + default = "instance_name" +} + +variable "lutim_owner" { + default = "" +} + +variable "lutim_group" { + default = "" +} + +variable "app_dir" { + default = "" +} + +variable "contact_user" { + default = "" +} + +variable "contact" { + default = "" +} + +variable "secret" { + default = "" +} + + diff --git a/CHANGELOG b/CHANGELOG index 4ad908e..e43f71e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,10 @@ Revision history for Lutim 0.13.0 ????-??-?? + - 💄 — Add Korrigan theme (Nicolas Frandeboeuf) + - 🔥 — Remove zanata stuff + - ✨ — Add a config flag to disable API (@b_b) + - 🌐 — Update translations 0.12.1 2020-10-08 - ⬆️ Update jQuery diff --git a/Dockerfile b/Dockerfile index bbee699..e809dcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ -FROM alpine:3.9 +FROM alpine:3.15 ARG BUILD_DATE ARG VCS_REF ARG VERSION LABEL org.label-schema.build-date=$BUILD_DATE \ - org.label-schema.name="Let's Upload That Image" \ + org.label-schema.name="Lets Upload That Image" \ org.label-schema.url="https://lut.im/" \ org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.vcs-url="https://git.framasoft.org/luc/lutim" \ @@ -12,12 +12,37 @@ LABEL org.label-schema.build-date=$BUILD_DATE \ org.label-schema.version=$VERSION \ org.label-schema.schema-version="1.0" -RUN adduser -D lutim -COPY --chown=lutim:lutim . /home/lutim +RUN adduser -D lutim \ + && addgroup lutim root + +COPY . /home/lutim +RUN chmod -R g+rwX /home/lutim WORKDIR /home/lutim -RUN /bin/sh /home/lutim/docker/build.sh +RUN apk --no-cache add perl~=5 \ + libpq~=14 \ + perl-crypt-rijndael~=1 \ + perl-io-socket-ssl~=2 \ + perl-net-ssleay~=1 \ + su-exec~=0.2 \ + shared-mime-info~=2 \ + libretls~=3 \ + imagemagick~=7 \ + imagemagick-perlmagick~=7 \ + bash~=~5 \ + && apk --no-cache add --virtual .build-deps build-base~=0.5 \ + perl-utils~=5 \ + perl-dev~=5 \ + postgresql14-dev~=14 \ + vim~=8 \ + wget~=1 \ + zlib-dev~=1 \ + && cpan notest Carton Config::FromHash \ + && carton install --without test \ + && apk del .build-deps \ + && rm -rf /var/cache/apk/* /root/.cpan* USER lutim +EXPOSE 8080 ENTRYPOINT ["/bin/sh", "/home/lutim/docker/entrypoint.sh"] \ No newline at end of file diff --git a/Makefile b/Makefile index 82f021a..e4f1043 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ XGETTEXT=carton exec local/bin/xgettext.pl -u CARTON=carton exec LUTIM=script/lutim REAL_LUTIM=script/application +HARNESS_PERL_SWITCHES=-MDevel::Cover=+ignore,local HEAD := $(shell git rev-parse --abbrev-ref HEAD) minify: @@ -18,22 +19,23 @@ locales: $(XGETTEXT) $(EXTRACTDIR) -o $(POT) 2>/dev/null $(XGETTEXT) $(EXTRACTDIR) -o $(ENPO) 2>/dev/null -stats-locales: - wlc stats - podcheck: podchecker lib/Lutim/DB/Image.pm +check-syntax: + find lib/ themes/ -name \*.pm -exec $(CARTON) perl -Ilib -c {} \; + find t/ -name \*.t -exec $(CARTON) perl -Ilib -c {} \; + cover: - PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) cover --ignore_re '^local' + PERL5OPT='-Ilib' $(CARTON) cover --ignore_re '^local' -test-sqlite: - @PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) $(REAL_LUTIM) test +test: + @PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='$(HARNESS_PERL_SWITCHES)' $(CARTON) -- prove -l --failures -test-pg: - @PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) $(REAL_LUTIM) test +test-junit-output: + @PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='$(HARNESS_PERL_SWITCHES)' $(CARTON) -- prove -l --failures --formatter TAP::Formatter::JUnit > tap.xml -test: podcheck test-sqlite test-pg +full-test: podcheck just-test clean: rm -rf lutim.db files/ diff --git a/README.md b/README.md index 6b17eaa..92d11cf 100644 --- a/README.md +++ b/README.md @@ -68,3 +68,7 @@ It uses: * [JSZip](https://stuk.github.io/jszip/) for generating a zip containing all the images in the gallery * [FileSaver.js](https://github.com/eligrey/FileSaver.js/) for saving the zip * [Toastify JS](https://apvarun.github.io/toastify-js/) for notifications + +## Deploy lutim + +An ansible role and a terraform plan reside under the `.provision` directory. An user could utilize the terraform plan if they chose to deploy lutim on AWS, if that's not the goal, they could simply execute the ansible role in part. Usage docs for both are present in their respective directories. diff --git a/cpanfile b/cpanfile index 8cd5af3..6c748c1 100644 --- a/cpanfile +++ b/cpanfile @@ -32,6 +32,7 @@ feature 'postgresql', 'PostgreSQL support' => sub { feature 'sqlite', 'SQLite support' => sub { requires 'Mojo::SQLite', '>= 3.000'; requires 'Minion::Backend::SQLite', '>= 4.001'; + requires 'DBD::SQLite', '>= 1.66'; }; feature 'minion', 'Minion support' => sub { requires 'Minion'; diff --git a/cpanfile.snapshot b/cpanfile.snapshot index eb11ab2..b535345 100644 --- a/cpanfile.snapshot +++ b/cpanfile.snapshot @@ -294,13 +294,13 @@ DISTRIBUTIONS Test::More 0.88 Time::HiRes 0 version 0 - DBD-SQLite-1.58 - pathname: I/IS/ISHIGAKI/DBD-SQLite-1.58.tar.gz + DBD-SQLite-1.66 + pathname: I/IS/ISHIGAKI/DBD-SQLite-1.66.tar.gz provides: - DBD::SQLite 1.58 + DBD::SQLite 1.66 DBD::SQLite::Constants undef - DBD::SQLite::VirtualTable 1.58 - DBD::SQLite::VirtualTable::Cursor 1.58 + DBD::SQLite::VirtualTable 1.66 + DBD::SQLite::VirtualTable::Cursor 1.66 DBD::SQLite::VirtualTable::FileContent undef DBD::SQLite::VirtualTable::FileContent::Cursor undef DBD::SQLite::VirtualTable::PerlData undef diff --git a/docker/build.sh b/docker/build.sh deleted file mode 100644 index fd1e763..0000000 --- a/docker/build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env sh - -set -eu - -apk update -apk add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl -sh $(dirname $0)/install-dev-env.sh - -sh $(dirname $0)/install-imagemagick.sh - -cpan notest Carton Config::FromHash -carton install --without test - -# Remove dev env -apk del .build-deps -rm -rf /var/cache/apk/* /root/.cpan* \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh old mode 100644 new mode 100755 index 4fe4050..360d818 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -eu @@ -14,7 +14,7 @@ then echo "" echo "You can then install the build dependencies with this command" echo " sh ~lutim/docker/install-dev-env.sh" - + tail -f /dev/null exit 0 fi @@ -28,7 +28,7 @@ then DB_HOST=$(perl utilities/read_conf.pl pgdb/host db) DB_PORT=$(perl utilities/read_conf.pl pgdb/port 5432) fi -if [ -n "$DB_HOST" -a -n "$DB_PORT" ] +if [ -n "$DB_HOST" ] && [ -n "$DB_PORT" ] then while ! nc -vz "${DB_HOST}" "${DB_PORT}"; do echo "Waiting for database..." diff --git a/docker/install-dev-env.sh b/docker/install-dev-env.sh deleted file mode 100644 index 2f219d7..0000000 --- a/docker/install-dev-env.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh - -apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql-dev vim wget zlib-dev \ No newline at end of file diff --git a/docker/install-imagemagick.sh b/docker/install-imagemagick.sh deleted file mode 100644 index 5a4f73f..0000000 --- a/docker/install-imagemagick.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env sh - -# Instructions from https://imagemagick.org/script/perl-magick.php - -set -eu - -IM_VERSION=7.0.8-41 -SHA256_DIGEST=93f73a245c25194f757c075df9f2ec40010376200cc664c21646565b8690112c - -IM_DIR="ImageMagick-$IM_VERSION" -TARBALL="$IM_DIR.tar.gz" - -ORIG_DIR="$(pwd)" - -apk add libgomp libgcc libmagic \ - libjpeg libjpeg-turbo-dev \ - libpng libpng-dev \ - tiff tiff-dev \ - libwebp libwebp-dev - -mkdir -p /tmp/im-build -cd /tmp/im-build - -echo "$SHA256_DIGEST *$TARBALL" > SHA256SUM - -wget https://imagemagick.org/download/$TARBALL -O $TARBALL -sha256sum -c SHA256SUM - -tar xvf $TARBALL -cd $IM_DIR -./configure --with-perl --with-jpeg --with-png --with-tiff --with-webp -make -j$(nproc) -make install - -ldconfig /usr/local/lib -perl -MImage::Magick -le 'print Image::Magick->QuantumDepth' - -cd "$ORIG_DIR" -apk del libjpeg-turbo-dev libpng-dev tiff-dev libwebp-dev -rm -rf /tmp/im-build \ No newline at end of file diff --git a/lib/Lutim/Controller/Image.pm b/lib/Lutim/Controller/Image.pm index 6441f9a..c7d6ecb 100644 --- a/lib/Lutim/Controller/Image.pm +++ b/lib/Lutim/Controller/Image.pm @@ -287,6 +287,22 @@ sub add { my $keep_exif = $c->param('keep-exif'); my $wm = $c->param('watermark'); + if ($c->config('disable_api')) { + my $unauthorized_api = (!defined($c->req->headers->referrer) || Mojo::URL->new($c->req->headers->referrer)->host ne Mojo::URL->new('https://'.$c->req->headers->host)->host); + if ($unauthorized_api) { + my $msg = $c->l('Sorry, the API is disabled'); + $c->app->log->info('Blocked API call for '.$c->ip(1)); + return $c->respond_to( + json => { json => { success => Mojo::JSON->false, msg => $msg } }, + any => sub { + shift->render( + template => 'index', + msg => $msg, + ); + } + ); + } + } if(!defined($c->stash('stop_upload'))) { if (defined($file_url) && $file_url) { if (is_http_uri($file_url) || is_https_uri($file_url)) { diff --git a/lib/Lutim/DB/Image/Pg.pm b/lib/Lutim/DB/Image/Pg.pm index 9bf2057..c5e2738 100644 --- a/lib/Lutim/DB/Image/Pg.pm +++ b/lib/Lutim/DB/Image/Pg.pm @@ -78,12 +78,15 @@ sub select_empty { } sub write { - my $c = shift; + my $c = shift; + my $provisioning = shift; if ($c->record) { $c->app->pg->db->query('UPDATE lutim SET counter = ?, created_at = ?, created_by = ?, delete_at_day = ?, delete_at_first_view = ?, enabled = ?, filename = ?, footprint = ?, height = ?, last_access_at = ?, mediatype = ?, mod_token = ?, path = ?, short = ?, width = ?, iv = ? WHERE short = ?', $c->counter, $c->created_at, $c->created_by, $c->delete_at_day, $c->delete_at_first_view, $c->enabled, $c->filename, $c->footprint, $c->height, $c->last_access_at, $c->mediatype, $c->mod_token, $c->path, $c->short, $c->width, $c->iv, $c->short); } else { - $c->app->pg->db->query('INSERT INTO lutim (counter, created_at, created_by, delete_at_day, delete_at_first_view, enabled, filename, footprint, height, last_access_at, mediatype, mod_token, path, short, width, iv) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $c->counter, $c->created_at, $c->created_by, $c->delete_at_day, $c->delete_at_first_view, $c->enabled, $c->filename, $c->footprint, $c->height, $c->last_access_at, $c->mediatype, $c->mod_token, $c->path, $c->short, $c->width, $c->iv); + my $query = 'INSERT INTO lutim (counter, created_at, created_by, delete_at_day, delete_at_first_view, enabled, filename, footprint, height, last_access_at, mediatype, mod_token, path, short, width, iv) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + $query .= ' ON CONFLICT DO NOTHING' if $provisioning; + $c->app->pg->db->query($query, $c->counter, $c->created_at, $c->created_by, $c->delete_at_day, $c->delete_at_first_view, $c->enabled, $c->filename, $c->footprint, $c->height, $c->last_access_at, $c->mediatype, $c->mod_token, $c->path, $c->short, $c->width, $c->iv); $c->record(1); } diff --git a/lib/Lutim/DB/Image/SQLite.pm b/lib/Lutim/DB/Image/SQLite.pm index fd68ebc..398e32a 100644 --- a/lib/Lutim/DB/Image/SQLite.pm +++ b/lib/Lutim/DB/Image/SQLite.pm @@ -79,12 +79,15 @@ sub select_empty { } sub write { - my $c = shift; + my $c = shift; + my $provisioning = shift; if ($c->record) { $c->app->sqlite->db->query('UPDATE lutim SET counter = ?, created_at = ?, created_by = ?, delete_at_day = ?, delete_at_first_view = ?, enabled = ?, filename = ?, footprint = ?, height = ?, last_access_at = ?, mediatype = ?, mod_token = ?, path = ?, short = ?, width = ?, iv = ? WHERE short = ?', $c->counter, $c->created_at, $c->created_by, $c->delete_at_day, $c->delete_at_first_view, $c->enabled, $c->filename, $c->footprint, $c->height, $c->last_access_at, $c->mediatype, $c->mod_token, $c->path, $c->short, $c->width, $c->iv, $c->short); } else { - $c->app->sqlite->db->query('INSERT INTO lutim (counter, created_at, created_by, delete_at_day, delete_at_first_view, enabled, filename, footprint, height, last_access_at, mediatype, mod_token, path, short, width, iv) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $c->counter, $c->created_at, $c->created_by, $c->delete_at_day, $c->delete_at_first_view, $c->enabled, $c->filename, $c->footprint, $c->height, $c->last_access_at, $c->mediatype, $c->mod_token, $c->path, $c->short, $c->width, $c->iv); + my $query = 'INSERT INTO lutim (counter, created_at, created_by, delete_at_day, delete_at_first_view, enabled, filename, footprint, height, last_access_at, mediatype, mod_token, path, short, width, iv) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + $query .= ' ON CONFLICT DO NOTHING' if $provisioning; + $c->app->sqlite->db->query($query, $c->counter, $c->created_at, $c->created_by, $c->delete_at_day, $c->delete_at_first_view, $c->enabled, $c->filename, $c->footprint, $c->height, $c->last_access_at, $c->mediatype, $c->mod_token, $c->path, $c->short, $c->width, $c->iv); $c->record(1); } diff --git a/lib/Lutim/DefaultConfig.pm b/lib/Lutim/DefaultConfig.pm index e93a981..3f42af4 100644 --- a/lib/Lutim/DefaultConfig.pm +++ b/lib/Lutim/DefaultConfig.pm @@ -22,6 +22,7 @@ our $default_config = { watermark_default => 'none', watermark_enforce => 'none', theme => 'default', + disable_api => 0, dbtype => 'sqlite', db_path => 'lutim.db', max_files_in_zip => 15, diff --git a/lib/Lutim/Plugin/Helpers.pm b/lib/Lutim/Plugin/Helpers.pm index 3ea009e..040c4c8 100644 --- a/lib/Lutim/Plugin/Helpers.pm +++ b/lib/Lutim/Plugin/Helpers.pm @@ -195,7 +195,7 @@ sub _provisioning { ->delete_at_first_view(0) ->delete_at_day(0) ->mod_token($c->shortener($c->app->config('token_length'))) - ->write; + ->write('provisioning'); $img = Lutim::DB::Image->new(app => $c->app); } diff --git a/lutim.conf.template b/lutim.conf.template index 8c3d12f..e3b389b 100644 --- a/lutim.conf.template +++ b/lutim.conf.template @@ -135,6 +135,10 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -251,7 +255,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -261,7 +265,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -270,13 +274,13 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' diff --git a/push-trad-to-zanata.sh b/push-trad-to-zanata.sh deleted file mode 100755 index df7f104..0000000 --- a/push-trad-to-zanata.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -FILE=$1 -if [[ ! -e themes/default/lib/Lutim/I18N/$FILE.po ]] -then - echo "themes/default/lib/Lutim/I18N/$FILE.po does not exist. Exiting." - exit 1 -else - LOCALE=$(echo $FILE | sed -e "s@_@-@g") - zanata-cli -q -B push --push-type trans -l $LOCALE -fi - diff --git a/t/test.t b/t/test.t index b8aeb18..72d63aa 100644 --- a/t/test.t +++ b/t/test.t @@ -150,8 +150,7 @@ $t->get_ok('/d/'.$rshort.'/'.$token, form => { format => 'json' }) $t->get_ok('/'.$rshort) ->status_is(302); -# Needed if we use Minion with sqlite for increasing counters -sleep 8; +$t->app->minion->perform_jobs if $t->app->config('minion')->{enabled}; # Get image counter $t->post_ok('/c', form => { short => $rshort, token => $token }) diff --git a/themes/default/lib/Lutim/I18N/de.po b/themes/default/lib/Lutim/I18N/de.po index 1c4b8fb..013d4e8 100644 --- a/themes/default/lib/Lutim/I18N/de.po +++ b/themes/default/lib/Lutim/I18N/de.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-03-09 16:23+0000\n" -"Last-Translator: Luc Didry \n" +"PO-Revision-Date: 2022-12-24 17:38+0000\n" +"Last-Translator: Vri \n" "Language-Team: German \n" "Language: de\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11.2\n" +"X-Generator: Weblate 4.14.1\n" #. (7) #. (30) @@ -65,9 +65,8 @@ msgid "An error occured while downloading the image." msgstr "Beim Herunterladen des Bildes ist ein Fehler aufgetreten." #: themes/default/templates/zip.html.ep:2 -#, fuzzy msgid "Archives download" -msgstr "Archiv-Download" +msgstr "Herunterladen von Archiv" #: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25 msgid "Back to homepage" @@ -107,11 +106,11 @@ msgstr "Zähler" #: themes/default/templates/stats.html.ep:18 msgid "Delay repartition chart for disabled images" -msgstr "" +msgstr "Diagramm zur Neuaufteilung der Verzögerung für deaktivierte Bilder" #: themes/default/templates/stats.html.ep:15 msgid "Delay repartition chart for enabled images" -msgstr "" +msgstr "Diagramm zur Neuaufteilung der Verzögerung für deaktivierte Bilder" #: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161 msgid "Delete at first view?" @@ -162,7 +161,7 @@ msgstr "Verschlüssle das Bild (Lutim behält den Key nicht)." #: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113 msgid "Error while trying to modify the image." -msgstr "Beim bearbeiten des Bildes ist ein Fehler aufgetreten." +msgstr "Beim Bearbeiten des Bildes ist ein Fehler aufgetreten." #: themes/default/templates/stats.html.ep:10 msgid "Evolution of total files" @@ -174,7 +173,7 @@ msgstr "Läuft ab am" #: themes/default/templates/myfiles.html.ep:112 msgid "Export localStorage data" -msgstr "" +msgstr "localStorage-Daten exportieren" #: themes/default/templates/myfiles.html.ep:121 msgid "File name" @@ -190,7 +189,7 @@ msgstr "" #: themes/default/templates/partial/navbar.html.ep:80 msgid "Fork me!" -msgstr "Fork me!" +msgstr "Fork mich!" #: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63 msgid "Gallery link" @@ -230,7 +229,7 @@ msgstr "Bild-URL" #: lib/Lutim/Command/cron/stats.pm:153 themes/default/templates/raw.html.ep:2 msgid "Image delay" -msgstr "" +msgstr "Bild-Verzögerung" #: themes/default/templates/partial/common.js.ep:157 msgid "Image deleted" @@ -242,7 +241,7 @@ msgstr "Bild nicht gefunden." #: themes/default/templates/myfiles.html.ep:113 msgid "Import localStorage data" -msgstr "" +msgstr "localStorage-Daten importieren" #: themes/default/templates/partial/navbar.html.ep:69 msgid "Informations" @@ -294,11 +293,11 @@ msgstr "Links zum teilen auf sozialen Netzwerken" #: themes/default/templates/login.html.ep:8 msgid "Login" -msgstr "Login" +msgstr "Anmelden" #: themes/default/templates/partial/navbar.html.ep:33 msgid "Logout" -msgstr "Ausloggen" +msgstr "Abmelden" #: themes/default/templates/zip.html.ep:7 msgid "" @@ -335,7 +334,7 @@ msgstr "Meine Bilder" #: themes/default/templates/gallery.html.ep:45 msgid "Next (arrow right)" -msgstr "" +msgstr "Nächstes (rechte Pfeiltaste)" #: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132 msgid "No limit" @@ -386,7 +385,7 @@ msgstr "" #: themes/default/templates/gallery.html.ep:43 msgid "Previous (arrow left)" -msgstr "" +msgstr "Vorheriges (linke Pfeiltaste)" #: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99 msgid "Random image link" @@ -394,7 +393,7 @@ msgstr "Zufälliger Bildlink" #: themes/default/templates/stats.html.ep:22 msgid "Raw stats" -msgstr "" +msgstr "Rohe Statistiken" #: themes/default/templates/myfiles.html.ep:52 msgid "Save changes" @@ -406,7 +405,7 @@ msgstr "Sende ein Bild" #: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37 msgid "Signin" -msgstr "Einloggen" +msgstr "Anmelden" #: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176 msgid "Something bad happened" @@ -464,10 +463,12 @@ msgid "" "The automatic download process will open a tab in your browser for each link." " You need to allow popups for Lutim." msgstr "" +"Das automatische Herunterladen wird für jeden Link einen neuen Tab in deinem " +"Browser öffnen. Du musst Pop-Ups für Lutim erlauben." #: themes/default/templates/partial/myfiles.js.ep:32 msgid "The data has been successfully imported." -msgstr "" +msgstr "Die Daten wurden erfolgreich importiert." #: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228 msgid "The delete token is invalid." @@ -518,7 +519,7 @@ msgstr "Die Zeit bis zum Löschen des Bildes wurde erfolgreich geändert" #: themes/default/templates/partial/gallery.js.ep:277 msgid "There is XXXX image(s) in the gallery" -msgstr "" +msgstr "Es gibt XXXX Bild(er) in der Galerie" #. ($c->config->{contact}) #: lib/Lutim/Controller/Image.pm:485 @@ -529,11 +530,11 @@ msgstr "" #: themes/default/templates/gallery.html.ep:30 msgid "Toggle fullscreen" -msgstr "" +msgstr "Vollbild umschalten" #: themes/default/templates/partial/navbar.html.ep:8 msgid "Toggle navigation" -msgstr "" +msgstr "Navigation umschalten" #: lib/Lutim/Command/cron/stats.pm:162 themes/default/templates/raw.html.ep:11 msgid "Total" @@ -621,9 +622,9 @@ msgid "" "do it via Tipeee or via Liberapay." msgstr "" -"Ja, ist es! Auf der anderen Seite kannst du den Entwickler via Tipeee oder Liberapay unterstützen." +"Ja, ist es! Jedoch kannst du den Entwickler via Tipeee oder Liberapay unterstützen." #: themes/default/templates/zip.html.ep:6 msgid "You asked to download a zip archive for too much files." @@ -677,7 +678,7 @@ msgstr "auf" #: themes/default/templates/about.html.ep:39 msgid "paste image to upload ability" -msgstr "" +msgstr "Bild zum Hochladen einfügen-Funktion" #: themes/default/templates/about.html.ep:41 msgid "russian translation" @@ -690,3 +691,21 @@ msgstr "spanische Übersetzung" #: themes/default/templates/about.html.ep:28 msgid "webapp developer" msgstr "Webapp-Entwickler" + +#: themes/default/templates/about.html.ep:24 +msgid "For more details, see the homepage of the project." +msgstr "" +"Für weitere Details besuche die Website des Projekts." + +#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +msgid "Single watermark" +msgstr "Einzelnes Wasserzeichen" + +#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +msgid "Tiling watermark" +msgstr "Gekacheltes Wasserzeichen" + +#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +msgid "No watermark" +msgstr "Kein Wasserzeichen" diff --git a/themes/default/lib/Lutim/I18N/es.po b/themes/default/lib/Lutim/I18N/es.po index 99c2a0e..c329326 100644 --- a/themes/default/lib/Lutim/I18N/es.po +++ b/themes/default/lib/Lutim/I18N/es.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-03-09 16:23+0000\n" -"Last-Translator: Luc Didry \n" +"PO-Revision-Date: 2021-04-24 11:14+0000\n" +"Last-Translator: Berto Te \n" "Language-Team: Spanish \n" "Language: es\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11.2\n" +"X-Generator: Weblate 4.5.1\n" #. (7) #. (30) @@ -646,7 +646,7 @@ msgstr "Ha sido desconectado con éxito." #: themes/default/templates/gallery.html.ep:31 msgid "Zoom in/out" -msgstr "Zoom in/out" +msgstr "Zoom aumentar / reducir" #: themes/default/templates/about.html.ep:27 msgid "and on" @@ -693,3 +693,15 @@ msgid "For more details, see the página del proyecto." + +#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +msgid "Tiling watermark" +msgstr "Marca de agua en mosaico" + +#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +msgid "Single watermark" +msgstr "Marca de agua única" + +#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +msgid "No watermark" +msgstr "Sin marca de agua" diff --git a/themes/default/lib/Lutim/I18N/hr.po b/themes/default/lib/Lutim/I18N/hr.po new file mode 100644 index 0000000..068de83 --- /dev/null +++ b/themes/default/lib/Lutim/I18N/hr.po @@ -0,0 +1,637 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2022-07-24 18:36+0000\n" +"Last-Translator: Milo Ivir \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.13.1\n" + +#. (7) +#. (30) +#. ($delay) +#. (config('max_delay') +#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9 +msgid "%1 days" +msgstr "%1 dana" + +#. ($total) +#: themes/default/templates/stats.html.ep:2 +msgid "%1 sent images on this instance from beginning." +msgstr "Broj poslanih slika u ovoj instanci od početka: %1." + +#: themes/default/templates/index.html.ep:228 +msgid "-or-" +msgstr "-ili-" + +#: lib/Lutim.pm:342 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10 +msgid "1 year" +msgstr "1 godina" + +#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 +msgid "24 hours" +msgstr "24 sata" + +#: themes/default/templates/partial/myfiles.js.ep:210 +msgid ": Error while trying to get the counter." +msgstr ": Greška u dohvaćanju brojača." + +#: themes/default/templates/partial/navbar.html.ep:63 +msgid "About" +msgstr "O programu" + +#: lib/Lutim/Command/cron/stats.pm:151 themes/default/templates/raw.html.ep:3 +msgid "Active images" +msgstr "Aktivne slike" + +#: lib/Lutim/Controller/Image.pm:329 +msgid "An error occured while downloading the image." +msgstr "Dogodila se greška prilikom preuzimanja slike." + +#: themes/default/templates/zip.html.ep:2 +msgid "Archives download" +msgstr "Preuzimanje arhiva" + +#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25 +msgid "Back to homepage" +msgstr "Natrag na web-stranicu" + +#: themes/default/templates/index.html.ep:231 themes/default/templates/index.html.ep:232 +msgid "Click to open the file browser" +msgstr "Pritisni za otvaranje preglednika datoteka" + +#: themes/default/templates/myfiles.html.ep:51 +msgid "Close" +msgstr "Zatvori" + +#: themes/default/templates/gallery.html.ep:29 +msgid "Close (Esc)" +msgstr "Zatvori (Esc)" + +#: themes/default/templates/about.html.ep:30 +msgid "Contributors" +msgstr "Doprinositelji" + +#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93 +msgid "Copied to clipboard" +msgstr "Kopirano u međuspremnik" + +#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364 +msgid "Copy all view links to clipboard" +msgstr "Kopiraj sve poveznice prikaza u međuspremnik" + +#: themes/default/templates/index.html.ep:105 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:97 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:172 +msgid "Copy to clipboard" +msgstr "Kopiraj u međuspremnik" + +#: themes/default/templates/myfiles.html.ep:117 +msgid "Counter" +msgstr "Brojač" + +#: themes/default/templates/stats.html.ep:18 +msgid "Delay repartition chart for disabled images" +msgstr "Dijagram odgode raspodjele za isključene slike" + +#: themes/default/templates/stats.html.ep:15 +msgid "Delay repartition chart for enabled images" +msgstr "Dijagram odgode raspodjele za uključene slike" + +#: themes/default/templates/index.html.ep:127 themes/default/templates/index.html.ep:159 themes/default/templates/index.html.ep:203 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161 +msgid "Delete at first view?" +msgstr "Izbrisati pri prvom prikazu?" + +#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:4 +msgid "Deleted images" +msgstr "Izbrisane slike" + +#: lib/Lutim/Command/cron/stats.pm:153 themes/default/templates/raw.html.ep:5 +msgid "Deleted images in 30 days" +msgstr "Izbrisane slike u 30 dana" + +#: themes/default/templates/index.html.ep:110 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181 +msgid "Deletion link" +msgstr "Poveznica za brisanje" + +#: themes/default/templates/gallery.html.ep:10 +msgid "Download all images" +msgstr "Preuzmi sve slike" + +#: themes/default/templates/index.html.ep:93 themes/default/templates/index.html.ep:95 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98 +msgid "Download link" +msgstr "Poveznica za preuzimanje" + +#: themes/default/templates/index.html.ep:26 themes/default/templates/index.html.ep:28 themes/default/templates/myfiles.html.ep:76 themes/default/templates/myfiles.html.ep:78 +msgid "Download zip link" +msgstr "Poveznica za preuzimanje zip-a" + +#: themes/default/templates/index.html.ep:227 +msgid "Drag & drop images here" +msgstr "Povuci i ispusti slike ovamo" + +#: themes/default/templates/about.html.ep:7 +msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want." +msgstr "" +"Povuci i ispusti sliku u odgovarajuće područje ili koristi tradicionalni " +"način slanja datoteka i Lutim će ti dati četiri URL-a. Jedan za pregled " +"slike, drugi za izravno preuzimanje, jedan koji možeš koristiti na " +"društvenim mrežama i zadnji za brisanje slike kada želiš." + +#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:206 +msgid "Encrypt the image (Lutim does not keep the key)." +msgstr "Šifriraj sliku (Lutim ne čuva ključ)." + +#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:128 +msgid "Error while trying to modify the image." +msgstr "Greška prilikom pokušaja stvaranja promjena u slici." + +#: themes/default/templates/stats.html.ep:10 +msgid "Evolution of total files" +msgstr "Razvoj ukupnog broja datoteka" + +#: themes/default/templates/myfiles.html.ep:120 +msgid "Expires at" +msgstr "Isteče" + +#: themes/default/templates/myfiles.html.ep:106 +msgid "Export localStorage data" +msgstr "Izvezi podatke lokalnog spremišta" + +#: themes/default/templates/myfiles.html.ep:115 +msgid "File name" +msgstr "Ime datoteke" + +#: themes/default/templates/about.html.ep:24 +msgid "For more details, see the homepage of the project." +msgstr "" +"Pogledaj detalje na web-stranici projekta." + +#: themes/default/templates/partial/navbar.html.ep:66 +msgid "Fork me!" +msgstr "Kopiraj granu!" + +#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:12 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:62 +msgid "Gallery link" +msgstr "Poveznica galerije" + +#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134 +msgid "Hit Ctrl+C, then Enter to copy the short link" +msgstr "Pritisni Ctrl+C, zatim Enter za kopiranje kratke poveznice" + +#: themes/default/templates/layouts/default.html.ep:47 +msgid "Homepage" +msgstr "Web-stranica" + +#: themes/default/templates/about.html.ep:20 +msgid "How do you pronounce Lutim?" +msgstr "Kako se izgovara Lutim?" + +#: themes/default/templates/about.html.ep:6 +msgid "How does it work?" +msgstr "Kako radi?" + +#: themes/default/templates/about.html.ep:18 +msgid "How to report an image?" +msgstr "Kako prijaviti sliku?" + +#: themes/default/templates/about.html.ep:14 +msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained." +msgstr "" +"Ako se datoteke izbrišu ako to zatražiš dok ih objavljuješ, njihov SHA512 " +"otisak se zadržava." + +#: themes/default/templates/index.html.ep:188 themes/default/templates/index.html.ep:241 +msgid "Image URL" +msgstr "URL adresa slike" + +#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:2 +msgid "Image delay" +msgstr "Kašnjenje slike" + +#: themes/default/templates/partial/common.js.ep:157 +msgid "Image deleted" +msgstr "Slika izbrisana" + +#: lib/Lutim/Controller/Image.pm:799 +msgid "Image not found." +msgstr "Slika nije pronađena." + +#: themes/default/templates/myfiles.html.ep:107 +msgid "Import localStorage data" +msgstr "Uvezi podatke lokalnog spremišta" + +#: themes/default/templates/partial/navbar.html.ep:55 +msgid "Informations" +msgstr "Informacije" + +#: themes/default/templates/partial/navbar.html.ep:25 +msgid "Install webapp" +msgstr "Instaliraj web-aplikaciju" + +#: themes/default/templates/partial/navbar.html.ep:21 +msgid "Instance's statistics" +msgstr "Statistika instance" + +#: themes/default/templates/about.html.ep:11 +msgid "Is it really anonymous?" +msgstr "Je li stvarno anonimno?" + +#: themes/default/templates/about.html.ep:9 +msgid "Is it really free (as in free beer)?" +msgstr "Je li se stvarno može besplatno koristiti?" + +#: themes/default/templates/about.html.ep:21 +msgid "Juste like you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "" +"Isto kao izgovaranje francuske riječi lutin (/ly.tɛ̃/)." + +#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209 +msgid "Keep EXIF tags" +msgstr "Zadrži EXIF oznake" + +#: themes/default/templates/partial/navbar.html.ep:43 +msgid "Language" +msgstr "Jezik" + +#: themes/default/templates/index.html.ep:130 themes/default/templates/index.html.ep:191 themes/default/templates/index.html.ep:244 themes/default/templates/partial/lutim.js.ep:165 +msgid "Let's go!" +msgstr "Kreni!" + +#: themes/default/templates/partial/navbar.html.ep:60 +msgid "License:" +msgstr "Licenca:" + +#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:103 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116 +msgid "Link for share on social networks" +msgstr "Poveznica za dijeljenje na društvenim mrežama" + +#: themes/default/templates/login.html.ep:8 +msgid "Login" +msgstr "Prijava" + +#: themes/default/templates/partial/navbar.html.ep:33 +msgid "Logout" +msgstr "Odjava" + +#: themes/default/templates/zip.html.ep:7 +msgid "Lutim can't zip so many images at once, so it splitted your demand in multiple URLs." +msgstr "" +"Lutim ne može komprimirati toliko slika odjednom. Tvoj zahtjev je stoga " +"podijeljen na više URL-ova." + +#: themes/default/templates/about.html.ep:4 +msgid "Lutim is a free (as in free beer) and anonymous image hosting service. It's also the name of the free (as in free speech) software which provides this service." +msgstr "" +"Lutim je besplatna i anonimna hosting usluga za slike. To je također ime " +"slobodnog softvera koji pruža ovu uslugu." + +#: themes/default/templates/about.html.ep:25 +msgid "Main developers" +msgstr "Glavni programeri" + +#: themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:87 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89 +msgid "Markdown syntax" +msgstr "Markdown sintaksa" + +#: themes/default/templates/partial/myfiles.js.ep:179 +msgid "Modify expiration delay" +msgstr "Promijeni odgodu isteka" + +#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18 +msgid "My images" +msgstr "Moje slike" + +#: themes/default/templates/gallery.html.ep:45 +msgid "Next (arrow right)" +msgstr "Sljedeće (desna strelica)" + +#: themes/default/templates/partial/myfiles.js.ep:120 themes/default/templates/partial/myfiles.js.ep:162 +msgid "No limit" +msgstr "Bez ograničenja" + +#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +msgid "No watermark" +msgstr "Bez vodenog žiga" + +#: themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:236 +msgid "Only images are allowed" +msgstr "Dozvoljene su samo slike" + +#: themes/default/templates/myfiles.html.ep:11 +msgid "Only the images sent with this browser will be listed here. The details are stored in localStorage: if you delete your localStorage data, you'll loose these details." +msgstr "" +"Ovdje će biti navedene samo slike poslane ovim preglednikom. Detalji se " +"spremaju u lokalno spremište: ako izbrišeš svoje podatke lokalnog spremišta, " +"izgubit ćeš te detalje." + +#: themes/default/templates/about.html.ep:16 +msgid "Only the uploader! (well, only if he's the only owner of the images' rights before the upload)" +msgstr "" +"Samo prenositelj! (zapravo, samo ako je on jedini vlasnik prava na slike " +"prije prijenosa)" + +#: themes/default/templates/login.html.ep:12 +msgid "Password" +msgstr "Lozinka" + +#: themes/default/templates/zip.html.ep:12 +msgid "Please click on each URL to download the different zip files." +msgstr "Pritisni svaki URL za preuzimanje zip datoteka." + +#. (config('contact') +#: themes/default/templates/about.html.ep:19 +msgid "Please contact the administrator: %1" +msgstr "Kontaktiraj administratora: %1" + +#: lib/Lutim/Controller/Authent.pm:36 +msgid "Please, check your credentials: unable to authenticate." +msgstr "Provjeri svoje podatke autentifikacije: autentifikacija je neuspjela." + +#: themes/default/templates/gallery.html.ep:43 +msgid "Previous (arrow left)" +msgstr "Prethodno (lijeva strelica)" + +#: themes/default/templates/index.html.ep:42 themes/default/templates/index.html.ep:44 themes/default/templates/myfiles.html.ep:92 themes/default/templates/myfiles.html.ep:94 +msgid "Random image link" +msgstr "Poveznica slučajne slike" + +#: themes/default/templates/stats.html.ep:22 +msgid "Raw stats" +msgstr "Neobrađena statistika" + +#: themes/default/templates/myfiles.html.ep:52 +msgid "Save changes" +msgstr "Spremi promjene" + +#: themes/default/templates/index.html.ep:183 +msgid "Send an image" +msgstr "Pošalji sliku" + +#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37 +msgid "Signin" +msgstr "Prijava" + +#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +msgid "Single watermark" +msgstr "Jedan vodeni žig" + +#: themes/default/templates/index.html.ep:145 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176 +msgid "Something bad happened" +msgstr "Dogodila se greška" + +#. ($c->config('contact') +#: lib/Lutim/Controller/Image.pm:806 +msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." +msgstr "" +"Dogodila se greška prilikom izrade zip datoteke. Pokušaj ponovo kasnije ili " +"kontaktiraj administratora (%1)." + +#: themes/default/templates/about.html.ep:13 +msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)." +msgstr "" +"IP adresa pošiljatelja slike zadržava se odgodom koja ovisi o izboru " +"administratora (za službenu instancu, koja se nalazi u Francuskoj, to je " +"godinu dana)." + +#: themes/default/templates/about.html.ep:23 +msgid "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." +msgstr "" +"Softver Lutim je slobodan softver koji omogućuje preuzmanje i instaliranje softvera na " +"vlastiti poslužitelj. Pogledaj AGPL za prikaz mogućnosti." + +#: lib/Lutim/Controller/Image.pm:348 +msgid "The URL is not valid." +msgstr "URL nije ispravan." + +#: themes/default/templates/zip.html.ep:16 +msgid "The automatic download process will open a tab in your browser for each link. You need to allow popups for Lutim." +msgstr "" +"Automatski postupak preuzimanja otvorit će karticu u tvom pregledniku za " +"svaku poveznicu. Moraš dozvoliti skočne prozore za Lutim." + +#: themes/default/templates/partial/myfiles.js.ep:32 +msgid "The data has been successfully imported." +msgstr "Podaci su uspješno uvezeni." + +#: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228 +msgid "The delete token is invalid." +msgstr "Token brisanja je neispravan." + +#. ($upload->filename) +#: lib/Lutim/Controller/Image.pm:531 +msgid "The file %1 is not an image." +msgstr "Datoteka %1 nije slika." + +#. ($tx->res->max_message_size) +#. ($c->req->max_message_size) +#. (config('max_file_size') +#: lib/Lutim/Controller/Image.pm:312 lib/Lutim/Controller/Image.pm:381 themes/default/templates/partial/lutim.js.ep:249 +msgid "The file exceed the size limit (%1)" +msgstr "Datoteka je prekoračila granicu (%1)" + +#: themes/default/templates/stats.html.ep:12 +msgid "The graph's datas are not updated in real-time." +msgstr "Podaci dijagrama se ne aktualiziraju se u stvarnom vremenu." + +#. ($image->filename) +#: lib/Lutim/Controller/Image.pm:230 +msgid "The image %1 has already been deleted." +msgstr "Slika %1 je već izbrisana." + +#. ($image->filename) +#: lib/Lutim/Controller/Image.pm:239 lib/Lutim/Controller/Image.pm:244 +msgid "The image %1 has been successfully deleted" +msgstr "Slika %1 je uspješno izbrisana" + +#: themes/default/templates/index.html.ep:57 +msgid "The images are encrypted on the server (Lutim does not keep the key)." +msgstr "Slike su šifrirane na poslužitelju (Lutim ne čuva ključ)." + +#: themes/default/templates/about.html.ep:5 +msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed." +msgstr "" +"Slike koje objeviš na Lutimu mogu se spremiti na neodređeno vrijeme ili se " +"mogu izbrisati pri prvom pregledu ili nakon odabrane odgode od predloženih." + +#: lib/Lutim/Controller/Image.pm:168 +msgid "The image’s delay has been successfully modified" +msgstr "Kašnjenje slike je uspješno promijenjeno" + +#: themes/default/templates/partial/gallery.js.ep:277 +msgid "There is XXXX image(s) in the gallery" +msgstr "Galerija sadrži XXXX slika" + +#. ($c->config->{contact}) +#: lib/Lutim/Controller/Image.pm:528 +msgid "There is no more available URL. Retry or contact the administrator. %1" +msgstr "" +"Nema više dostupnog URL-a. Pokušaj ponovo ili kontaktiraj administratora. %1" + +#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +msgid "Tiling watermark" +msgstr "Pločasti vodeni žig" + +#: themes/default/templates/gallery.html.ep:30 +msgid "Toggle fullscreen" +msgstr "Uključi/isključi cjeloekranski prikaz" + +#: themes/default/templates/partial/navbar.html.ep:8 +msgid "Toggle navigation" +msgstr "Uključi/isključi navigaciju" + +#: lib/Lutim/Command/cron/stats.pm:159 themes/default/templates/raw.html.ep:11 +msgid "Total" +msgstr "Ukupno" + +#: themes/default/templates/index.html.ep:72 themes/default/templates/partial/lutim.js.ep:17 +msgid "Tweet it!" +msgstr "Pošalji tweet!" + +#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90 +msgid "Unable to copy to clipboard" +msgstr "Neuspjelo kopiranje u međuspremink" + +#. ($short) +#: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273 +msgid "Unable to find the image %1." +msgstr "Neuspjelo pronalaženje slike %1." + +#: lib/Lutim/Controller/Image.pm:617 lib/Lutim/Controller/Image.pm:662 lib/Lutim/Controller/Image.pm:703 lib/Lutim/Controller/Image.pm:746 lib/Lutim/Controller/Image.pm:758 lib/Lutim/Controller/Image.pm:769 lib/Lutim/Controller/Image.pm:796 lib/Lutim/Plugin/Helpers.pm:89 +msgid "Unable to find the image: it has been deleted." +msgstr "Neuspjelo pronalaženje slike: slika je izbrisana." + +#: lib/Lutim/Controller/Image.pm:145 +msgid "Unable to get counter" +msgstr "Neuspjelo dohvaćanje brojača" + +#: themes/default/templates/about.html.ep:17 +msgid "Unlike many image sharing services, you don't give us rights on uploaded images." +msgstr "" +"Za razliku od mnogih usluga za dijeljenje slika, ne daješ nam prava za " +"prenesene slike." + +#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:239 +msgid "Upload an image with its URL" +msgstr "Prenesi sliku s ovim URL-om" + +#: themes/default/templates/myfiles.html.ep:119 +msgid "Uploaded at" +msgstr "Preneseno" + +#: themes/default/templates/stats.html.ep:6 +msgid "Uploaded files by days" +msgstr "Prenesene datoteke po danima" + +#. ($c->app->config('contact') +#: lib/Lutim/Plugin/Helpers.pm:222 +msgid "Uploading is currently disabled, please try later or contact the administrator (%1)." +msgstr "" +"Prijenos je trenutačno onemogućen, pokušaj kasnije ili kontaktiraj " +"administratora (%1)." + +#: themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:79 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76 +msgid "View link" +msgstr "Pogledaj poveznicu" + +#: themes/default/templates/about.html.ep:22 +msgid "What about the software which provides the service?" +msgstr "Što je sa softverom koji pruža uslugu?" + +#: themes/default/templates/about.html.ep:3 +msgid "What is Lutim?" +msgstr "Što je Lutim?" + +#: themes/default/templates/about.html.ep:15 +msgid "Who owns rights on images uploaded on Lutim?" +msgstr "Tko posjeduje prava nad slikama postavljene na Lutimu?" + +#: themes/default/templates/about.html.ep:12 +msgid "Yes, it is! On the other side, for legal reasons, your IP address will be stored when you send an image. Don't panic, it is normally the case of all sites on which you send files!" +msgstr "" +"Da, je! Međutim, iz pravnih razloga, tvoja IP adresa će se spremiti kada " +"pošalješ sliku. Bez panike, to je normalno za sve stranice na koje šalješ " +"datoteke!" + +#: themes/default/templates/about.html.ep:10 +msgid "Yes, it is! On the other side, if you want to support the developer, you can do it via Tipeee or via Liberapay." +msgstr "" +"Da, je! Međutim, ako želiš podržati programera, to možete učiniti putem " +"usluge Tipeee ili Liberapay." + +#: themes/default/templates/zip.html.ep:6 +msgid "You asked to download a zip archive for too much files." +msgstr "Zatražio/la si preuzimanje zip arhive za previše datoteka." + +#: themes/default/templates/about.html.ep:8 +msgid "You can, optionally, request that the image(s) posted on Lutim to be deleted at first view (or download) or after the delay selected from those proposed." +msgstr "" +"Opcionalno možeš zatražiti da se objavljene slike na Lutimu izbrišu pri " +"prvom pregledu (ili preuzimanju) ili nakon odabrane odgode od predloženih." + +#: lib/Lutim/Controller/Authent.pm:27 +msgid "You have been successfully logged in." +msgstr "Uspješno si prijavljan/a." + +#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3 +msgid "You have been successfully logged out." +msgstr "Uspješno si odjevljen/a." + +#: themes/default/templates/gallery.html.ep:31 +msgid "Zoom in/out" +msgstr "Uvećaj/Umanji prikaz" + +#: themes/default/templates/about.html.ep:27 +msgid "and on" +msgstr "i na" + +#: themes/default/templates/about.html.ep:40 +msgid "arabic translation" +msgstr "prijevod na arapski" + +#: themes/default/templates/about.html.ep:27 +msgid "core developer" +msgstr "izvorni programer" + +#: lib/Lutim.pm:340 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6 +msgid "no time limit" +msgstr "bez vremenskog ograničenja" + +#: themes/default/templates/about.html.ep:38 +msgid "occitan translation" +msgstr "prijevod na okcitanski" + +#: themes/default/templates/about.html.ep:27 +msgid "on" +msgstr "na" + +#: themes/default/templates/about.html.ep:39 +msgid "paste image to upload ability" +msgstr "umetni sliku za mogućnost prijenosa" + +#: themes/default/templates/about.html.ep:41 +msgid "russian translation" +msgstr "prijevod na ruski" + +#: themes/default/templates/about.html.ep:36 +msgid "spanish translation" +msgstr "prijevod na španjolski" + +#: themes/default/templates/about.html.ep:28 +msgid "webapp developer" +msgstr "programer web-aplikacije" diff --git a/themes/default/lib/Lutim/I18N/it.po b/themes/default/lib/Lutim/I18N/it.po index b627f4b..3665a4a 100644 --- a/themes/default/lib/Lutim/I18N/it.po +++ b/themes/default/lib/Lutim/I18N/it.po @@ -4,8 +4,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-03-09 16:23+0000\n" -"Last-Translator: Luc Didry \n" +"PO-Revision-Date: 2020-06-09 19:24+0000\n" +"Last-Translator: roberto marcolin \n" "Language-Team: Italian \n" "Language: it\n" @@ -691,3 +691,15 @@ msgid "For more details, see the homepage del progetto." + +#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +msgid "Tiling watermark" +msgstr "Filigrana ripetuta" + +#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +msgid "Single watermark" +msgstr "Filigrana semplice" + +#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +msgid "No watermark" +msgstr "Nessuna filigrana" diff --git a/themes/default/lib/Lutim/I18N/ru.po b/themes/default/lib/Lutim/I18N/ru.po index 90b1fc2..7b5a765 100644 --- a/themes/default/lib/Lutim/I18N/ru.po +++ b/themes/default/lib/Lutim/I18N/ru.po @@ -4,17 +4,17 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-03-09 16:23+0000\n" -"Last-Translator: Luc Didry \n" +"PO-Revision-Date: 2022-12-15 21:38+0000\n" +"Last-Translator: Дмитрий Кузнецов \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" -"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.11.2\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.14.1\n" #. (7) #. (30) @@ -43,11 +43,11 @@ msgstr "24 часа" #: themes/default/templates/partial/myfiles.js.ep:180 msgid ": Error while trying to get the counter." -msgstr ": Error while trying to get the counter." +msgstr ": Ошибка при подсчете количества ." #: themes/default/templates/partial/navbar.html.ep:77 msgid "About" -msgstr "О Lutim" +msgstr "Подробнее" #: lib/Lutim/Command/cron/stats.pm:154 themes/default/templates/raw.html.ep:3 msgid "Active images" @@ -55,11 +55,11 @@ msgstr "Активные изображения" #: lib/Lutim/Controller/Image.pm:328 msgid "An error occured while downloading the image." -msgstr "Произошла ошибка при скачивании изображения." +msgstr "Ошибка при загрузке изображения." #: themes/default/templates/zip.html.ep:2 msgid "Archives download" -msgstr "Archives download" +msgstr "Загрузить архив" #: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25 msgid "Back to homepage" @@ -83,7 +83,7 @@ msgstr "Участники" #: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93 msgid "Copied to clipboard" -msgstr "" +msgstr "Скопировано в буфер обмена" #: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364 msgid "Copy all view links to clipboard" @@ -163,11 +163,11 @@ msgstr "Общее количество файлов" #: themes/default/templates/myfiles.html.ep:126 msgid "Expires at" -msgstr "Истекает в" +msgstr "Исчезнет через" #: themes/default/templates/myfiles.html.ep:112 msgid "Export localStorage data" -msgstr "" +msgstr "Сохранить данные в хранилище" #: themes/default/templates/myfiles.html.ep:121 msgid "File name" @@ -227,7 +227,7 @@ msgstr "Срок хранения" #: themes/default/templates/partial/common.js.ep:157 msgid "Image deleted" -msgstr "" +msgstr "Изображение удалено" #: lib/Lutim/Controller/Image.pm:756 msgid "Image not found." @@ -235,7 +235,7 @@ msgstr "Изображение не найдено." #: themes/default/templates/myfiles.html.ep:113 msgid "Import localStorage data" -msgstr "" +msgstr "Загрузить данные с хранилища" #: themes/default/templates/partial/navbar.html.ep:69 msgid "Informations" @@ -287,11 +287,11 @@ msgstr "Ссылка для того, чтоб поделиться в соци #: themes/default/templates/login.html.ep:8 msgid "Login" -msgstr "" +msgstr "Имя пользователя" #: themes/default/templates/partial/navbar.html.ep:33 msgid "Logout" -msgstr "" +msgstr "Выйти" #: themes/default/templates/zip.html.ep:7 msgid "" @@ -321,7 +321,7 @@ msgstr "Синтаксис Маркдауна" #: themes/default/templates/partial/myfiles.js.ep:149 msgid "Modify expiration delay" -msgstr "" +msgstr "Изменить время на удление" #: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18 msgid "My images" @@ -373,7 +373,7 @@ msgstr "Пожалуйста, свяжитесь с администраторо #: lib/Lutim/Controller/Authent.pm:36 msgid "Please, check your credentials: unable to authenticate." -msgstr "" +msgstr "Пожалуйста проверьте свои данные: не удалось идентифицировать." #: themes/default/templates/gallery.html.ep:43 msgid "Previous (arrow left)" @@ -381,7 +381,7 @@ msgstr "Предыдущий (стрелка влево)" #: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99 msgid "Random image link" -msgstr "" +msgstr "Случайная ссылка на изображение" #: themes/default/templates/stats.html.ep:22 msgid "Raw stats" @@ -389,7 +389,7 @@ msgstr "Сырые статистические данные" #: themes/default/templates/myfiles.html.ep:52 msgid "Save changes" -msgstr "" +msgstr "Сохранить изменения" #: themes/default/templates/index.html.ep:176 msgid "Send an image" @@ -397,7 +397,7 @@ msgstr "Послать изображение" #: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37 msgid "Signin" -msgstr "" +msgstr "Регистрация" #: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176 msgid "Something bad happened" @@ -460,7 +460,7 @@ msgstr "" #: themes/default/templates/partial/myfiles.js.ep:32 msgid "The data has been successfully imported." -msgstr "" +msgstr "Данные были успешно импортированы." #: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228 msgid "The delete token is invalid." @@ -511,7 +511,7 @@ msgstr "Срок хранения изображения успешно изме #: themes/default/templates/partial/gallery.js.ep:277 msgid "There is XXXX image(s) in the gallery" -msgstr "" +msgstr "В галерее есть изображения для взрослых" #. ($c->config->{contact}) #: lib/Lutim/Controller/Image.pm:485 @@ -538,7 +538,7 @@ msgstr "Твитнуть!" #: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90 msgid "Unable to copy to clipboard" -msgstr "" +msgstr "Не удается скопировать в буфер обмена" #. ($short) #: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273 @@ -633,11 +633,11 @@ msgstr "" #: lib/Lutim/Controller/Authent.pm:27 msgid "You have been successfully logged in." -msgstr "" +msgstr "Вы успешно вошли в учетную запись." #: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3 msgid "You have been successfully logged out." -msgstr "" +msgstr "Вы успешно вышли из учетной записи." #: themes/default/templates/gallery.html.ep:31 msgid "Zoom in/out" @@ -688,3 +688,15 @@ msgid "For more details, see the главную страницу проекта." + +#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +msgid "No watermark" +msgstr "Без водного знака" + +#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +msgid "Tiling watermark" +msgstr "Размещение водяного знака" + +#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +msgid "Single watermark" +msgstr "Единственный водяной знак" diff --git a/themes/default/lib/Lutim/I18N/sv.po b/themes/default/lib/Lutim/I18N/sv.po index c2c51a6..e949630 100644 --- a/themes/default/lib/Lutim/I18N/sv.po +++ b/themes/default/lib/Lutim/I18N/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-03-09 16:23+0000\n" -"Last-Translator: Luc Didry \n" +"PO-Revision-Date: 2020-09-20 09:51+0000\n" +"Last-Translator: Filip Bengtsson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11.2\n" +"X-Generator: Weblate 4.1\n" #. (7) #. (30) @@ -567,6 +567,8 @@ msgstr "Du försökte ladda ner en zip-fil som innehöll för många filer." #: themes/default/templates/about.html.ep:8 msgid "You can, optionally, request that the image(s) posted on Lutim to be deleted at first view (or download) or after the delay selected from those proposed." msgstr "" +"Om du vill, kan bilden raderas en viss tid efter att den har publicerats på " +"Lutim, eller omedelbart efter den första visningen eller nerladdningen." #: lib/Lutim/Controller/Authent.pm:27 msgid "You have been successfully logged in." @@ -606,7 +608,7 @@ msgstr "på" #: themes/default/templates/about.html.ep:39 msgid "paste image to upload ability" -msgstr "" +msgstr "infoga en bild för att skicka den" #: themes/default/templates/about.html.ep:41 msgid "russian translation" @@ -625,3 +627,15 @@ msgid "For more details, see the projektets " "hemsida för mer information." + +#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +msgid "No watermark" +msgstr "Ingen vattenstämpling" + +#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +msgid "Tiling watermark" +msgstr "Flera vatenstämplingar" + +#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +msgid "Single watermark" +msgstr "En vattenstämpel" diff --git a/themes/default/public/gallery/images/button-close.png b/themes/default/public/gallery/images/button-close.png index 67097ab..51dc0ca 100644 Binary files a/themes/default/public/gallery/images/button-close.png and b/themes/default/public/gallery/images/button-close.png differ diff --git a/themes/default/public/gallery/images/icon-link32.png b/themes/default/public/gallery/images/icon-link32.png index 95fc503..9911ec6 100644 Binary files a/themes/default/public/gallery/images/icon-link32.png and b/themes/default/public/gallery/images/icon-link32.png differ diff --git a/themes/default/public/gallery/images/lightbox-arrow-left.png b/themes/default/public/gallery/images/lightbox-arrow-left.png index 85a98c4..ab3ab77 100644 Binary files a/themes/default/public/gallery/images/lightbox-arrow-left.png and b/themes/default/public/gallery/images/lightbox-arrow-left.png differ diff --git a/themes/default/public/gallery/images/lightbox-icon-close-compact.png b/themes/default/public/gallery/images/lightbox-icon-close-compact.png index 6831a28..975dc41 100644 Binary files a/themes/default/public/gallery/images/lightbox-icon-close-compact.png and b/themes/default/public/gallery/images/lightbox-icon-close-compact.png differ diff --git a/themes/default/public/gallery/images/lightbox-icon-close-compact2.png b/themes/default/public/gallery/images/lightbox-icon-close-compact2.png index 35472e2..f24cfff 100644 Binary files a/themes/default/public/gallery/images/lightbox-icon-close-compact2.png and b/themes/default/public/gallery/images/lightbox-icon-close-compact2.png differ diff --git a/themes/default/public/gallery/images/lightbox-icon-close.png b/themes/default/public/gallery/images/lightbox-icon-close.png index 373f1d7..17eab9b 100644 Binary files a/themes/default/public/gallery/images/lightbox-icon-close.png and b/themes/default/public/gallery/images/lightbox-icon-close.png differ diff --git a/themes/default/public/gallery/images/not_loaded.png b/themes/default/public/gallery/images/not_loaded.png index 356a129..cb553f2 100644 Binary files a/themes/default/public/gallery/images/not_loaded.png and b/themes/default/public/gallery/images/not_loaded.png differ diff --git a/themes/default/public/gallery/images/play-button-round.png b/themes/default/public/gallery/images/play-button-round.png index 3a57eb8..929055c 100644 Binary files a/themes/default/public/gallery/images/play-button-round.png and b/themes/default/public/gallery/images/play-button-round.png differ diff --git a/themes/default/public/gallery/images/play-button-square.png b/themes/default/public/gallery/images/play-button-square.png index bbc3c20..1594184 100644 Binary files a/themes/default/public/gallery/images/play-button-square.png and b/themes/default/public/gallery/images/play-button-square.png differ diff --git a/themes/default/public/gallery/images/transparent.png b/themes/default/public/gallery/images/transparent.png index bf12d12..32a3a7c 100644 Binary files a/themes/default/public/gallery/images/transparent.png and b/themes/default/public/gallery/images/transparent.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/arrows_strip_left.png b/themes/default/public/gallery/skins/alexis/images/arrows_strip_left.png index 790f057..1b05410 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/arrows_strip_left.png and b/themes/default/public/gallery/skins/alexis/images/arrows_strip_left.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/arrows_strip_right.png b/themes/default/public/gallery/skins/alexis/images/arrows_strip_right.png index 6790499..1121419 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/arrows_strip_right.png and b/themes/default/public/gallery/skins/alexis/images/arrows_strip_right.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/button_fullscreen.png b/themes/default/public/gallery/skins/alexis/images/button_fullscreen.png index c72341e..5910829 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/button_fullscreen.png and b/themes/default/public/gallery/skins/alexis/images/button_fullscreen.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/button_playpause.png b/themes/default/public/gallery/skins/alexis/images/button_playpause.png index ed0689c..93c0c56 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/button_playpause.png and b/themes/default/public/gallery/skins/alexis/images/button_playpause.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/button_zoom_back.png b/themes/default/public/gallery/skins/alexis/images/button_zoom_back.png index 7cd51ce..b967b18 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/button_zoom_back.png and b/themes/default/public/gallery/skins/alexis/images/button_zoom_back.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/button_zoom_minus.png b/themes/default/public/gallery/skins/alexis/images/button_zoom_minus.png index 25a56fd..c47e7d4 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/button_zoom_minus.png and b/themes/default/public/gallery/skins/alexis/images/button_zoom_minus.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/button_zoom_plus.png b/themes/default/public/gallery/skins/alexis/images/button_zoom_plus.png index bd1319a..2a5ecdc 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/button_zoom_plus.png and b/themes/default/public/gallery/skins/alexis/images/button_zoom_plus.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/grid_arrow_left.png b/themes/default/public/gallery/skins/alexis/images/grid_arrow_left.png index fcf7226..28e2315 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/grid_arrow_left.png and b/themes/default/public/gallery/skins/alexis/images/grid_arrow_left.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/grid_arrow_left_hortype.png b/themes/default/public/gallery/skins/alexis/images/grid_arrow_left_hortype.png index d192fb4..2ec572f 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/grid_arrow_left_hortype.png and b/themes/default/public/gallery/skins/alexis/images/grid_arrow_left_hortype.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/grid_arrow_right.png b/themes/default/public/gallery/skins/alexis/images/grid_arrow_right.png index 8f0d11e..0a80992 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/grid_arrow_right.png and b/themes/default/public/gallery/skins/alexis/images/grid_arrow_right.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/grid_arrow_right_hortype.png b/themes/default/public/gallery/skins/alexis/images/grid_arrow_right_hortype.png index 361d405..e768988 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/grid_arrow_right_hortype.png and b/themes/default/public/gallery/skins/alexis/images/grid_arrow_right_hortype.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/grid_handle_down.png b/themes/default/public/gallery/skins/alexis/images/grid_handle_down.png index 6470fdb..13fa2c1 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/grid_handle_down.png and b/themes/default/public/gallery/skins/alexis/images/grid_handle_down.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/grid_handle_up.png b/themes/default/public/gallery/skins/alexis/images/grid_handle_up.png index c85c56e..72f8537 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/grid_handle_up.png and b/themes/default/public/gallery/skins/alexis/images/grid_handle_up.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/slider_arrow_left.png b/themes/default/public/gallery/skins/alexis/images/slider_arrow_left.png index 8782cb3..fe40fa4 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/slider_arrow_left.png and b/themes/default/public/gallery/skins/alexis/images/slider_arrow_left.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/slider_arrow_right.png b/themes/default/public/gallery/skins/alexis/images/slider_arrow_right.png index bfc55a6..1b04bc7 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/slider_arrow_right.png and b/themes/default/public/gallery/skins/alexis/images/slider_arrow_right.png differ diff --git a/themes/default/public/gallery/skins/alexis/images/slider_bullets.png b/themes/default/public/gallery/skins/alexis/images/slider_bullets.png index 134079e..080044d 100644 Binary files a/themes/default/public/gallery/skins/alexis/images/slider_bullets.png and b/themes/default/public/gallery/skins/alexis/images/slider_bullets.png differ diff --git a/themes/default/public/gallery/skins/default/arrow_grid_down.png b/themes/default/public/gallery/skins/default/arrow_grid_down.png index 6cb9e53..6bb8057 100644 Binary files a/themes/default/public/gallery/skins/default/arrow_grid_down.png and b/themes/default/public/gallery/skins/default/arrow_grid_down.png differ diff --git a/themes/default/public/gallery/skins/default/arrow_grid_up.png b/themes/default/public/gallery/skins/default/arrow_grid_up.png index 631f56a..de4ac07 100644 Binary files a/themes/default/public/gallery/skins/default/arrow_grid_up.png and b/themes/default/public/gallery/skins/default/arrow_grid_up.png differ diff --git a/themes/default/public/gallery/skins/default/arrows_strip_down.png b/themes/default/public/gallery/skins/default/arrows_strip_down.png index 0faf9b9..dbf643c 100644 Binary files a/themes/default/public/gallery/skins/default/arrows_strip_down.png and b/themes/default/public/gallery/skins/default/arrows_strip_down.png differ diff --git a/themes/default/public/gallery/skins/default/arrows_strip_left.png b/themes/default/public/gallery/skins/default/arrows_strip_left.png index 790f057..1b05410 100644 Binary files a/themes/default/public/gallery/skins/default/arrows_strip_left.png and b/themes/default/public/gallery/skins/default/arrows_strip_left.png differ diff --git a/themes/default/public/gallery/skins/default/arrows_strip_right.png b/themes/default/public/gallery/skins/default/arrows_strip_right.png index 6790499..1121419 100644 Binary files a/themes/default/public/gallery/skins/default/arrows_strip_right.png and b/themes/default/public/gallery/skins/default/arrows_strip_right.png differ diff --git a/themes/default/public/gallery/skins/default/arrows_strip_up.png b/themes/default/public/gallery/skins/default/arrows_strip_up.png index 609b682..a5a5a7b 100644 Binary files a/themes/default/public/gallery/skins/default/arrows_strip_up.png and b/themes/default/public/gallery/skins/default/arrows_strip_up.png differ diff --git a/themes/default/public/gallery/skins/default/button_fullscreen.png b/themes/default/public/gallery/skins/default/button_fullscreen.png index b19398f..f4b9d5f 100644 Binary files a/themes/default/public/gallery/skins/default/button_fullscreen.png and b/themes/default/public/gallery/skins/default/button_fullscreen.png differ diff --git a/themes/default/public/gallery/skins/default/grid_arrow_left.png b/themes/default/public/gallery/skins/default/grid_arrow_left.png index db101d6..1f694fe 100644 Binary files a/themes/default/public/gallery/skins/default/grid_arrow_left.png and b/themes/default/public/gallery/skins/default/grid_arrow_left.png differ diff --git a/themes/default/public/gallery/skins/default/grid_arrow_right.png b/themes/default/public/gallery/skins/default/grid_arrow_right.png index 036b9a2..d4f5917 100644 Binary files a/themes/default/public/gallery/skins/default/grid_arrow_right.png and b/themes/default/public/gallery/skins/default/grid_arrow_right.png differ diff --git a/themes/default/public/gallery/skins/default/grid_handle_black_bottom.png b/themes/default/public/gallery/skins/default/grid_handle_black_bottom.png index f0b07ee..3359807 100644 Binary files a/themes/default/public/gallery/skins/default/grid_handle_black_bottom.png and b/themes/default/public/gallery/skins/default/grid_handle_black_bottom.png differ diff --git a/themes/default/public/gallery/skins/default/grid_handle_black_left.png b/themes/default/public/gallery/skins/default/grid_handle_black_left.png index 95f6c2b..a130c76 100644 Binary files a/themes/default/public/gallery/skins/default/grid_handle_black_left.png and b/themes/default/public/gallery/skins/default/grid_handle_black_left.png differ diff --git a/themes/default/public/gallery/skins/default/grid_handle_black_right.png b/themes/default/public/gallery/skins/default/grid_handle_black_right.png index 75a6253..2118f31 100644 Binary files a/themes/default/public/gallery/skins/default/grid_handle_black_right.png and b/themes/default/public/gallery/skins/default/grid_handle_black_right.png differ diff --git a/themes/default/public/gallery/skins/default/grid_handle_black_top.png b/themes/default/public/gallery/skins/default/grid_handle_black_top.png index a687369..718943b 100644 Binary files a/themes/default/public/gallery/skins/default/grid_handle_black_top.png and b/themes/default/public/gallery/skins/default/grid_handle_black_top.png differ diff --git a/themes/default/public/gallery/skins/default/icon_zoom_back.png b/themes/default/public/gallery/skins/default/icon_zoom_back.png index e0d4c89..ad659fe 100644 Binary files a/themes/default/public/gallery/skins/default/icon_zoom_back.png and b/themes/default/public/gallery/skins/default/icon_zoom_back.png differ diff --git a/themes/default/public/gallery/skins/default/icon_zoom_minus.png b/themes/default/public/gallery/skins/default/icon_zoom_minus.png index 93f5f05..def8e94 100644 Binary files a/themes/default/public/gallery/skins/default/icon_zoom_minus.png and b/themes/default/public/gallery/skins/default/icon_zoom_minus.png differ diff --git a/themes/default/public/gallery/skins/default/icon_zoom_plus.png b/themes/default/public/gallery/skins/default/icon_zoom_plus.png index ab233e0..e3a0651 100644 Binary files a/themes/default/public/gallery/skins/default/icon_zoom_plus.png and b/themes/default/public/gallery/skins/default/icon_zoom_plus.png differ diff --git a/themes/default/public/gallery/skins/default/slider_arrow_left.png b/themes/default/public/gallery/skins/default/slider_arrow_left.png index d192fb4..2ec572f 100644 Binary files a/themes/default/public/gallery/skins/default/slider_arrow_left.png and b/themes/default/public/gallery/skins/default/slider_arrow_left.png differ diff --git a/themes/default/public/gallery/skins/default/slider_arrow_right.png b/themes/default/public/gallery/skins/default/slider_arrow_right.png index 361d405..e768988 100644 Binary files a/themes/default/public/gallery/skins/default/slider_arrow_right.png and b/themes/default/public/gallery/skins/default/slider_arrow_right.png differ diff --git a/themes/default/public/gallery/skins/default/slider_bullets.png b/themes/default/public/gallery/skins/default/slider_bullets.png index 33a27db..401f851 100644 Binary files a/themes/default/public/gallery/skins/default/slider_bullets.png and b/themes/default/public/gallery/skins/default/slider_bullets.png differ diff --git a/themes/default/public/gallery/skins/default/tile_bullets_blue.png b/themes/default/public/gallery/skins/default/tile_bullets_blue.png index 2a2385b..7762823 100644 Binary files a/themes/default/public/gallery/skins/default/tile_bullets_blue.png and b/themes/default/public/gallery/skins/default/tile_bullets_blue.png differ diff --git a/themes/default/public/gallery/skins/default/tile_bullets_brown.png b/themes/default/public/gallery/skins/default/tile_bullets_brown.png index 193cf2d..eb7ce3c 100644 Binary files a/themes/default/public/gallery/skins/default/tile_bullets_brown.png and b/themes/default/public/gallery/skins/default/tile_bullets_brown.png differ diff --git a/themes/default/public/gallery/skins/default/tile_bullets_gray.png b/themes/default/public/gallery/skins/default/tile_bullets_gray.png index 29c21d9..d1eba89 100644 Binary files a/themes/default/public/gallery/skins/default/tile_bullets_gray.png and b/themes/default/public/gallery/skins/default/tile_bullets_gray.png differ diff --git a/themes/default/public/gallery/skins/default/tile_bullets_green.png b/themes/default/public/gallery/skins/default/tile_bullets_green.png index 855ddbe..aab5da2 100644 Binary files a/themes/default/public/gallery/skins/default/tile_bullets_green.png and b/themes/default/public/gallery/skins/default/tile_bullets_green.png differ diff --git a/themes/default/public/gallery/skins/default/tile_bullets_red.png b/themes/default/public/gallery/skins/default/tile_bullets_red.png index fe39fb8..17a9009 100644 Binary files a/themes/default/public/gallery/skins/default/tile_bullets_red.png and b/themes/default/public/gallery/skins/default/tile_bullets_red.png differ diff --git a/themes/default/public/gallery/skins/default/tile_button_left.png b/themes/default/public/gallery/skins/default/tile_button_left.png index 71c3d65..cc2f69c 100644 Binary files a/themes/default/public/gallery/skins/default/tile_button_left.png and b/themes/default/public/gallery/skins/default/tile_button_left.png differ diff --git a/themes/default/public/gallery/skins/default/tile_button_play_pause.png b/themes/default/public/gallery/skins/default/tile_button_play_pause.png index cb9092f..db13f80 100644 Binary files a/themes/default/public/gallery/skins/default/tile_button_play_pause.png and b/themes/default/public/gallery/skins/default/tile_button_play_pause.png differ diff --git a/themes/default/public/gallery/skins/default/tile_button_right.png b/themes/default/public/gallery/skins/default/tile_button_right.png index 806aa67..9e7553d 100644 Binary files a/themes/default/public/gallery/skins/default/tile_button_right.png and b/themes/default/public/gallery/skins/default/tile_button_right.png differ diff --git a/themes/default/public/gallery/themes/default/images/arrow_down_up.png b/themes/default/public/gallery/themes/default/images/arrow_down_up.png index 8bf0476..e0ef338 100644 Binary files a/themes/default/public/gallery/themes/default/images/arrow_down_up.png and b/themes/default/public/gallery/themes/default/images/arrow_down_up.png differ diff --git a/themes/default/public/gallery/themes/default/images/arrows_strip_left.png b/themes/default/public/gallery/themes/default/images/arrows_strip_left.png index 790f057..1b05410 100644 Binary files a/themes/default/public/gallery/themes/default/images/arrows_strip_left.png and b/themes/default/public/gallery/themes/default/images/arrows_strip_left.png differ diff --git a/themes/default/public/gallery/themes/default/images/arrows_strip_right.png b/themes/default/public/gallery/themes/default/images/arrows_strip_right.png index 6790499..1121419 100644 Binary files a/themes/default/public/gallery/themes/default/images/arrows_strip_right.png and b/themes/default/public/gallery/themes/default/images/arrows_strip_right.png differ diff --git a/themes/default/public/gallery/themes/default/images/button_fullscreen.png b/themes/default/public/gallery/themes/default/images/button_fullscreen.png index 3a3bc6c..2f574e7 100644 Binary files a/themes/default/public/gallery/themes/default/images/button_fullscreen.png and b/themes/default/public/gallery/themes/default/images/button_fullscreen.png differ diff --git a/themes/default/public/gallery/themes/default/images/button_fullscreen_single.png b/themes/default/public/gallery/themes/default/images/button_fullscreen_single.png index e5c7587..873328a 100644 Binary files a/themes/default/public/gallery/themes/default/images/button_fullscreen_single.png and b/themes/default/public/gallery/themes/default/images/button_fullscreen_single.png differ diff --git a/themes/default/public/gallery/themes/default/images/button_playpause.png b/themes/default/public/gallery/themes/default/images/button_playpause.png index 39320b1..faa2025 100644 Binary files a/themes/default/public/gallery/themes/default/images/button_playpause.png and b/themes/default/public/gallery/themes/default/images/button_playpause.png differ diff --git a/themes/default/public/gallery/themes/default/images/button_playpause_single.png b/themes/default/public/gallery/themes/default/images/button_playpause_single.png index 23c0a0a..132cb98 100644 Binary files a/themes/default/public/gallery/themes/default/images/button_playpause_single.png and b/themes/default/public/gallery/themes/default/images/button_playpause_single.png differ diff --git a/themes/default/public/gallery/themes/video/images/arrow_left.png b/themes/default/public/gallery/themes/video/images/arrow_left.png index a960c77..76d0001 100644 Binary files a/themes/default/public/gallery/themes/video/images/arrow_left.png and b/themes/default/public/gallery/themes/video/images/arrow_left.png differ diff --git a/themes/default/public/gallery/themes/video/images/arrow_right.png b/themes/default/public/gallery/themes/video/images/arrow_right.png index 3a5aa16..fb1341b 100644 Binary files a/themes/default/public/gallery/themes/video/images/arrow_right.png and b/themes/default/public/gallery/themes/video/images/arrow_right.png differ diff --git a/themes/default/public/img/Lutim.png b/themes/default/public/img/Lutim.png index 872f336..50e2b2b 100644 Binary files a/themes/default/public/img/Lutim.png and b/themes/default/public/img/Lutim.png differ diff --git a/themes/default/public/img/Lutim_small.png b/themes/default/public/img/Lutim_small.png index 0da6481..71bd1b2 100644 Binary files a/themes/default/public/img/Lutim_small.png and b/themes/default/public/img/Lutim_small.png differ diff --git a/themes/default/public/img/Lutim_sticker.png b/themes/default/public/img/Lutim_sticker.png index db96631..5a654e2 100644 Binary files a/themes/default/public/img/Lutim_sticker.png and b/themes/default/public/img/Lutim_sticker.png differ diff --git a/themes/default/public/img/favicon.png b/themes/default/public/img/favicon.png index 02604d7..4a2fd52 100644 Binary files a/themes/default/public/img/favicon.png and b/themes/default/public/img/favicon.png differ diff --git a/themes/default/public/img/lutim120.png b/themes/default/public/img/lutim120.png index 54df56d..53d7b2f 100644 Binary files a/themes/default/public/img/lutim120.png and b/themes/default/public/img/lutim120.png differ diff --git a/themes/default/public/img/lutim128.png b/themes/default/public/img/lutim128.png index 392d446..b5a29cf 100644 Binary files a/themes/default/public/img/lutim128.png and b/themes/default/public/img/lutim128.png differ diff --git a/themes/default/public/img/lutim152.png b/themes/default/public/img/lutim152.png index 2ba4e4d..9a510c6 100644 Binary files a/themes/default/public/img/lutim152.png and b/themes/default/public/img/lutim152.png differ diff --git a/themes/default/public/img/lutim196.png b/themes/default/public/img/lutim196.png index 120206b..f5b69cf 100644 Binary files a/themes/default/public/img/lutim196.png and b/themes/default/public/img/lutim196.png differ diff --git a/themes/default/public/img/lutim256.png b/themes/default/public/img/lutim256.png index ec628eb..ddccbeb 100644 Binary files a/themes/default/public/img/lutim256.png and b/themes/default/public/img/lutim256.png differ diff --git a/themes/default/public/img/lutim32.png b/themes/default/public/img/lutim32.png index b65abec..47b3f6c 100644 Binary files a/themes/default/public/img/lutim32.png and b/themes/default/public/img/lutim32.png differ diff --git a/themes/default/public/img/lutim60.png b/themes/default/public/img/lutim60.png index c74a99c..d37a88f 100644 Binary files a/themes/default/public/img/lutim60.png and b/themes/default/public/img/lutim60.png differ diff --git a/themes/default/public/img/lutim76.png b/themes/default/public/img/lutim76.png index b395e02..38c4b0c 100644 Binary files a/themes/default/public/img/lutim76.png and b/themes/default/public/img/lutim76.png differ diff --git a/themes/default/public/img/lutim90.png b/themes/default/public/img/lutim90.png index 6bdaf3d..69b03c7 100644 Binary files a/themes/default/public/img/lutim90.png and b/themes/default/public/img/lutim90.png differ diff --git a/themes/default/public/img/tipeee-tip-btn.png b/themes/default/public/img/tipeee-tip-btn.png index 221237a..a1037cb 100644 Binary files a/themes/default/public/img/tipeee-tip-btn.png and b/themes/default/public/img/tipeee-tip-btn.png differ diff --git a/themes/default/public/js/moment-with-locales.min.js b/themes/default/public/js/moment-with-locales.min.js index 90eb91b..a16cb9b 100644 --- a/themes/default/public/js/moment-with-locales.min.js +++ b/themes/default/public/js/moment-with-locales.min.js @@ -1,80 +1,2 @@ -!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Md.apply(null,arguments)}function b(a){Md=a}function c(a){return"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in Od)d=Od[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(b){m(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),Pd===!1&&(Pd=!0,a.updateOffset(this),Pd=!1)}function o(a){return a instanceof n||null!=a&&null!=a._isAMomentObject}function p(a){return 0>a?Math.ceil(a):Math.floor(a)}function q(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=p(b)),c}function r(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&q(a[d])!==q(b[d]))&&g++;return g+f}function s(){}function t(a){return a?a.toLowerCase().replace("_","-"):a}function u(a){for(var b,c,d,e,f=0;f0;){if(d=v(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&r(e,c,!0)>=b-1)break;b--}f++}return null}function v(a){var b=null;if(!Qd[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Nd._abbr,require("./locale/"+a),w(b)}catch(c){}return Qd[a]}function w(a,b){var c;return a&&(c="undefined"==typeof b?y(a):x(a,b),c&&(Nd=c)),Nd._abbr}function x(a,b){return null!==b?(b.abbr=a,Qd[a]=Qd[a]||new s,Qd[a].set(b),w(a),Qd[a]):(delete Qd[a],null)}function y(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Nd;if(!c(a)){if(b=v(a))return b;a=[a]}return u(a)}function z(a,b){var c=a.toLowerCase();Rd[c]=Rd[c+"s"]=Rd[b]=a}function A(a){return"string"==typeof a?Rd[a]||Rd[a.toLowerCase()]:void 0}function B(a){var b,c,d={};for(c in a)f(a,c)&&(b=A(c),b&&(d[b]=a[c]));return d}function C(b,c){return function(d){return null!=d?(E(this,b,d),a.updateOffset(this,c),this):D(this,b)}}function D(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function E(a,b,c){return a._d["set"+(a._isUTC?"UTC":"")+b](c)}function F(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=A(a),"function"==typeof this[a])return this[a](b);return this}function G(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function H(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Vd[a]=e),b&&(Vd[b[0]]=function(){return G(e.apply(this,arguments),b[1],b[2])}),c&&(Vd[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function I(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function J(a){var b,c,d=a.match(Sd);for(b=0,c=d.length;c>b;b++)Vd[d[b]]?d[b]=Vd[d[b]]:d[b]=I(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function K(a,b){return a.isValid()?(b=L(b,a.localeData()),Ud[b]=Ud[b]||J(b),Ud[b](a)):a.localeData().invalidDate()}function L(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Td.lastIndex=0;d>=0&&Td.test(a);)a=a.replace(Td,c),Td.lastIndex=0,d-=1;return a}function M(a){return"function"==typeof a&&"[object Function]"===Object.prototype.toString.call(a)}function N(a,b,c){ie[a]=M(b)?b:function(a){return a&&c?c:b}}function O(a,b){return f(ie,a)?ie[a](b._strict,b._locale):new RegExp(P(a))}function P(a){return a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Q(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=q(a)}),c=0;cd;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function X(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),T(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function Y(b){return null!=b?(X(this,b),a.updateOffset(this,!0),this):D(this,"Month")}function Z(){return T(this.year(),this.month())}function $(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[le]<0||c[le]>11?le:c[me]<1||c[me]>T(c[ke],c[le])?me:c[ne]<0||c[ne]>24||24===c[ne]&&(0!==c[oe]||0!==c[pe]||0!==c[qe])?ne:c[oe]<0||c[oe]>59?oe:c[pe]<0||c[pe]>59?pe:c[qe]<0||c[qe]>999?qe:-1,j(a)._overflowDayOfYear&&(ke>b||b>me)&&(b=me),j(a).overflow=b),a}function _(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function aa(a,b){var c=!0;return g(function(){return c&&(_(a+"\n"+(new Error).stack),c=!1),b.apply(this,arguments)},b)}function ba(a,b){te[a]||(_(b),te[a]=!0)}function ca(a){var b,c,d=a._i,e=ue.exec(d);if(e){for(j(a).iso=!0,b=0,c=ve.length;c>b;b++)if(ve[b][1].exec(d)){a._f=ve[b][0];break}for(b=0,c=we.length;c>b;b++)if(we[b][1].exec(d)){a._f+=(e[6]||" ")+we[b][0];break}d.match(fe)&&(a._f+="Z"),va(a)}else a._isValid=!1}function da(b){var c=xe.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(ca(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function ea(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function fa(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function ga(a){return ha(a)?366:365}function ha(a){return a%4===0&&a%100!==0||a%400===0}function ia(){return ha(this.year())}function ja(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=Da(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ka(a){return ja(a,this._week.dow,this._week.doy).week}function la(){return this._week.dow}function ma(){return this._week.doy}function na(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function oa(a){var b=ja(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function pa(a,b,c,d,e){var f,g=6+e-d,h=fa(a,0,1+g),i=h.getUTCDay();return e>i&&(i+=7),c=null!=c?1*c:e,f=1+g+7*(b-1)-i+c,{year:f>0?a:a-1,dayOfYear:f>0?f:ga(a-1)+f}}function qa(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function ra(a,b,c){return null!=a?a:null!=b?b:c}function sa(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function ta(a){var b,c,d,e,f=[];if(!a._d){for(d=sa(a),a._w&&null==a._a[me]&&null==a._a[le]&&ua(a),a._dayOfYear&&(e=ra(a._a[ke],d[ke]),a._dayOfYear>ga(e)&&(j(a)._overflowDayOfYear=!0),c=fa(e,0,a._dayOfYear),a._a[le]=c.getUTCMonth(),a._a[me]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[ne]&&0===a._a[oe]&&0===a._a[pe]&&0===a._a[qe]&&(a._nextDay=!0,a._a[ne]=0),a._d=(a._useUTC?fa:ea).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[ne]=24)}}function ua(a){var b,c,d,e,f,g,h;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=ra(b.GG,a._a[ke],ja(Da(),1,4).year),d=ra(b.W,1),e=ra(b.E,1)):(f=a._locale._week.dow,g=a._locale._week.doy,c=ra(b.gg,a._a[ke],ja(Da(),f,g).year),d=ra(b.w,1),null!=b.d?(e=b.d,f>e&&++d):e=null!=b.e?b.e+f:f),h=pa(c,d,e,g,f),a._a[ke]=h.year,a._dayOfYear=h.dayOfYear}function va(b){if(b._f===a.ISO_8601)return void ca(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=L(b._f,b._locale).match(Sd)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),Vd[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),S(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[ne]<=12&&b._a[ne]>0&&(j(b).bigHour=void 0),b._a[ne]=wa(b._locale,b._a[ne],b._meridiem),ta(b),$(b)}function wa(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function xa(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function ya(a){if(!a._d){var b=B(a._i);a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],ta(a)}}function za(a){var b=new n($(Aa(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function Aa(a){var b=a._i,e=a._f;return a._locale=a._locale||y(a._l),null===b||void 0===e&&""===b?l({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),o(b)?new n($(b)):(c(e)?xa(a):e?va(a):d(b)?a._d=b:Ba(a),a))}function Ba(b){var f=b._i;void 0===f?b._d=new Date:d(f)?b._d=new Date(+f):"string"==typeof f?da(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),ta(b)):"object"==typeof f?ya(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ca(a,b,c,d,e){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,za(f)}function Da(a,b,c,d){return Ca(a,b,c,d,!1)}function Ea(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Da();for(d=b[0],e=1;ea&&(a=-a,c="-"),c+G(~~(a/60),2)+b+G(~~a%60,2)})}function Ka(a){var b=(a||"").match(fe)||[],c=b[b.length-1]||[],d=(c+"").match(Ce)||["-",0,0],e=+(60*d[1])+q(d[2]);return"+"===d[0]?e:-e}function La(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(o(b)||d(b)?+b:+Da(b))-+e,e._d.setTime(+e._d+f),a.updateOffset(e,!1),e):Da(b).local()}function Ma(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Na(b,c){var d,e=this._offset||0;return null!=b?("string"==typeof b&&(b=Ka(b)),Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ma(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?bb(this,Ya(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ma(this)}function Oa(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Pa(a){return this.utcOffset(0,a)}function Qa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ma(this),"m")),this}function Ra(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ka(this._i)),this}function Sa(a){return a=a?Da(a).utcOffset():0,(this.utcOffset()-a)%60===0}function Ta(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ua(){if("undefined"!=typeof this._isDSTShifted)return this._isDSTShifted;var a={};if(m(a,this),a=Aa(a),a._a){var b=a._isUTC?h(a._a):Da(a._a);this._isDSTShifted=this.isValid()&&r(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Va(){return!this._isUTC}function Wa(){return this._isUTC}function Xa(){return this._isUTC&&0===this._offset}function Ya(a,b){var c,d,e,g=a,h=null;return Ia(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=De.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:q(h[me])*c,h:q(h[ne])*c,m:q(h[oe])*c,s:q(h[pe])*c,ms:q(h[qe])*c}):(h=Ee.exec(a))?(c="-"===h[1]?-1:1,g={y:Za(h[2],c),M:Za(h[3],c),d:Za(h[4],c),h:Za(h[5],c),m:Za(h[6],c),s:Za(h[7],c),w:Za(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=_a(Da(g.from),Da(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Ha(g),Ia(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function Za(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function $a(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function _a(a,b){var c;return b=La(b,a),a.isBefore(b)?c=$a(a,b):(c=$a(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function ab(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(ba(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ya(c,d),bb(this,e,a),this}}function bb(b,c,d,e){var f=c._milliseconds,g=c._days,h=c._months;e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&E(b,"Date",D(b,"Date")+g*d),h&&X(b,D(b,"Month")+h*d),e&&a.updateOffset(b,g||h)}function cb(a,b){var c=a||Da(),d=La(c,this).startOf("day"),e=this.diff(d,"days",!0),f=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse";return this.format(b&&b[f]||this.localeData().calendar(f,this,Da(c)))}function db(){return new n(this)}function eb(a,b){var c;return b=A("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Da(a),+this>+a):(c=o(a)?+a:+Da(a),c<+this.clone().startOf(b))}function fb(a,b){var c;return b=A("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Da(a),+a>+this):(c=o(a)?+a:+Da(a),+this.clone().endOf(b)b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function kb(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function lb(){var a=this.clone().utc();return 0b;b++)if(this._weekdaysParse[b]||(c=Da([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b}function Pb(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Kb(a,this.localeData()),this.add(a-b,"d")):b}function Qb(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Rb(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)}function Sb(a,b){H(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Tb(a,b){return b._meridiemParse}function Ub(a){return"p"===(a+"").toLowerCase().charAt(0)}function Vb(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Wb(a,b){b[qe]=q(1e3*("0."+a))}function Xb(){return this._isUTC?"UTC":""}function Yb(){return this._isUTC?"Coordinated Universal Time":""}function Zb(a){return Da(1e3*a)}function $b(){return Da.apply(null,arguments).parseZone()}function _b(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.call(b,c):d}function ac(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function bc(){return this._invalidDate}function cc(a){return this._ordinal.replace("%d",a)}function dc(a){return a}function ec(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)}function fc(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)}function gc(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function hc(a,b,c,d){var e=y(),f=h().set(d,b);return e[c](f,a)}function ic(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return hc(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=hc(a,f,c,e);return g}function jc(a,b){return ic(a,b,"months",12,"month")}function kc(a,b){return ic(a,b,"monthsShort",12,"month")}function lc(a,b){return ic(a,b,"weekdays",7,"day")}function mc(a,b){return ic(a,b,"weekdaysShort",7,"day")}function nc(a,b){return ic(a,b,"weekdaysMin",7,"day")}function oc(){var a=this._data;return this._milliseconds=_e(this._milliseconds),this._days=_e(this._days),this._months=_e(this._months),a.milliseconds=_e(a.milliseconds),a.seconds=_e(a.seconds),a.minutes=_e(a.minutes),a.hours=_e(a.hours),a.months=_e(a.months),a.years=_e(a.years),this}function pc(a,b,c,d){var e=Ya(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function qc(a,b){return pc(this,a,b,1)}function rc(a,b){return pc(this,a,b,-1)}function sc(a){return 0>a?Math.floor(a):Math.ceil(a)}function tc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*sc(vc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=p(f/1e3),i.seconds=a%60,b=p(a/60),i.minutes=b%60,c=p(b/60),i.hours=c%24,g+=p(c/24),e=p(uc(g)),h+=e,g-=sc(vc(e)),d=p(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function uc(a){return 4800*a/146097}function vc(a){return 146097*a/4800}function wc(a){var b,c,d=this._milliseconds;if(a=A(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+uc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(vc(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function xc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*q(this._months/12)}function yc(a){return function(){return this.as(a)}}function zc(a){return a=A(a),this[a+"s"]()}function Ac(a){return function(){return this._data[a]}}function Bc(){return p(this.days()/7)}function Cc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function Dc(a,b,c){var d=Ya(a).abs(),e=qf(d.as("s")),f=qf(d.as("m")),g=qf(d.as("h")),h=qf(d.as("d")),i=qf(d.as("M")),j=qf(d.as("y")),k=e0,k[4]=c,Cc.apply(null,k)}function Ec(a,b){return void 0===rf[a]?!1:void 0===b?rf[a]:(rf[a]=b,!0)}function Fc(a){var b=this.localeData(),c=Dc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function Gc(){var a,b,c,d=sf(this._milliseconds)/1e3,e=sf(this._days),f=sf(this._months);a=p(d/60),b=p(a/60),d%=60,a%=60,c=p(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"} -//! moment.js locale configuration -//! locale : belarusian (be) -//! author : Dmitry Demidov : https://github.com/demidov91 -//! author: Praleska: http://praleska.pro/ -//! Author : Menelion Elensúle : https://github.com/Oire -function Hc(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function Ic(a,b,c){var d={mm:b?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:b?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===c?b?"хвіліна":"хвіліну":"h"===c?b?"гадзіна":"гадзіну":a+" "+Hc(d[c],+a)}function Jc(a,b){var c={nominative:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_"),accusative:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function Kc(a,b){var c={nominative:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),accusative:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_")},d=/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]} -//! moment.js locale configuration -//! locale : breton (br) -//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou -function Lc(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+Oc(d[c],a)}function Mc(a){switch(Nc(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function Nc(a){return a>9?Nc(a%10):a}function Oc(a,b){return 2===b?Pc(a):a}function Pc(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)} -//! moment.js locale configuration -//! locale : bosnian (bs) -//! author : Nedim Cholich : https://github.com/frontyard -//! based on (hr) translation by Bojan Marković -function Qc(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Rc(a){return a>1&&5>a&&1!==~~(a/10)}function Sc(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekund":"pár sekundami";case"m":return b?"minuta":d?"minutu":"minutou";case"mm":return b||d?e+(Rc(a)?"minuty":"minut"):e+"minutami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(Rc(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":return b||d?"den":"dnem";case"dd":return b||d?e+(Rc(a)?"dny":"dní"):e+"dny";break;case"M":return b||d?"měsíc":"měsícem";case"MM":return b||d?e+(Rc(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":return b||d?"rok":"rokem";case"yy":return b||d?e+(Rc(a)?"roky":"let"):e+"lety"}} -//! moment.js locale configuration -//! locale : austrian german (de-at) -//! author : lluchs : https://github.com/lluchs -//! author: Menelion Elensúle: https://github.com/Oire -//! author : Martin Groller : https://github.com/MadMG -function Tc(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} -//! moment.js locale configuration -//! locale : german (de) -//! author : lluchs : https://github.com/lluchs -//! author: Menelion Elensúle: https://github.com/Oire -function Uc(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} -//! moment.js locale configuration -//! locale : estonian (et) -//! author : Henry Kehlmann : https://github.com/madhenry -//! improvements : Illimar Tambek : https://github.com/ragulka -function Vc(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function Wc(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=Xc(a,d)+" "+e}function Xc(a,b){return 10>a?b?Pf[a]:Of[a]:a} -//! moment.js locale configuration -//! locale : hrvatski (hr) -//! author : Bojan Marković : https://github.com/bmarkovic -function Yc(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Zc(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function $c(a){return(a?"":"[múlt] ")+"["+Uf[this.day()]+"] LT[-kor]"} -//! moment.js locale configuration -//! locale : Armenian (hy-am) -//! author : Armendarabyan : https://github.com/armendarabyan -function _c(a,b){var c={nominative:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_"),accusative:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function ad(a,b){var c="հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_");return c[a.month()]}function bd(a,b){var c="կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_");return c[a.day()]} -//! moment.js locale configuration -//! locale : icelandic (is) -//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik -function cd(a){return a%100===11?!0:a%10===1?!1:!0}function dd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return cd(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return cd(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return cd(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return cd(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return cd(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}} -//! moment.js locale configuration -//! locale : Georgian (ka) -//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili -function ed(a,b){var c={nominative:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),accusative:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},d=/D[oD] *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function fd(a,b){var c={nominative:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),accusative:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_")},d=/(წინა|შემდეგ)/.test(b)?"accusative":"nominative";return c[d][a.day()]} -//! moment.js locale configuration -//! locale : Luxembourgish (lb) -//! author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz -function gd(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function hd(a){var b=a.substr(0,a.indexOf(" "));return jd(b)?"a "+a:"an "+a}function id(a){var b=a.substr(0,a.indexOf(" "));return jd(b)?"viru "+a:"virun "+a}function jd(a){if(a=parseInt(a,10),isNaN(a))return!1;if(0>a)return!0;if(10>a)return a>=4&&7>=a?!0:!1;if(100>a){var b=a%10,c=a/10;return jd(0===b?c:b)}if(1e4>a){for(;a>=10;)a/=10;return jd(a)}return a/=1e3,jd(a)}function kd(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function ld(a,b){var c={nominative:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),accusative:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function md(a,b,c,d){return b?od(c)[0]:d?od(c)[1]:od(c)[2]}function nd(a){return a%10===0||a>10&&20>a}function od(a){return Vf[a].split("_")}function pd(a,b,c,d){var e=a+" ";return 1===a?e+md(a,b,c[0],d):b?e+(nd(a)?od(c)[1]:od(c)[0]):d?e+od(c)[1]:e+(nd(a)?od(c)[1]:od(c)[2])}function qd(a,b){var c=-1===b.indexOf("dddd HH:mm"),d=Wf[a.day()];return c?d:d.substring(0,d.length-2)+"į"}function rd(a,b,c){return c?b%10===1&&11!==b?a[2]:a[3]:b%10===1&&11!==b?a[0]:a[1]}function sd(a,b,c){return a+" "+rd(Xf[c],a,b)}function td(a,b,c){return rd(Xf[c],a,b)}function ud(a,b){return b?"dažas sekundes":"dažām sekundēm"}function vd(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function wd(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(vd(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(vd(a)?"godziny":"godzin");case"MM":return d+(vd(a)?"miesiące":"miesięcy");case"yy":return d+(vd(a)?"lata":"lat")}} -//! moment.js locale configuration -//! locale : romanian (ro) -//! author : Vlad Gurdiga : https://github.com/gurdiga -//! author : Valentin Agachi : https://github.com/avaly -function xd(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]} -//! moment.js locale configuration -//! locale : russian (ru) -//! author : Viktorminator : https://github.com/Viktorminator -//! Author : Menelion Elensúle : https://github.com/Oire -function yd(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function zd(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+yd(d[c],+a)}function Ad(a,b){var c={nominative:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),accusative:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function Bd(a,b){var c={nominative:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),accusative:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_")},d=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function Cd(a,b){var c={nominative:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),accusative:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_")},d=/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/.test(b)?"accusative":"nominative";return c[d][a.day()]}function Dd(a){return a>1&&5>a}function Ed(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekúnd":"pár sekundami";case"m":return b?"minúta":d?"minútu":"minútou";case"mm":return b||d?e+(Dd(a)?"minúty":"minút"):e+"minútami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(Dd(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":return b||d?"deň":"dňom";case"dd":return b||d?e+(Dd(a)?"dni":"dní"):e+"dňami";break;case"M":return b||d?"mesiac":"mesiacom";case"MM":return b||d?e+(Dd(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":return b||d?"rok":"rokom";case"yy":return b||d?e+(Dd(a)?"roky":"rokov"):e+"rokmi"}} -//! moment.js locale configuration -//! locale : slovenian (sl) -//! author : Robert Sedovšek : https://github.com/sedovsek -function Fd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":5>a?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":5>a?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":5>a?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":5>a?b||d?"leta":"leti":b||d?"let":"leti"}}function Gd(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts"," "+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras"," "+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas"," "+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen"," "+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars"," "+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1].trim()} -//! moment.js locale configuration -//! locale : ukrainian (uk) -//! author : zemlanin : https://github.com/zemlanin -//! Author : Menelion Elensúle : https://github.com/Oire -function Hd(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function Id(a,b,c){var d={mm:"хвилина_хвилини_хвилин",hh:"година_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+Hd(d[c],+a)}function Jd(a,b){var c={nominative:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),accusative:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_")},d=/D[oD]? *MMMM?/.test(b)?"accusative":"nominative";return c[d][a.month()]}function Kd(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function Ld(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var Md,Nd,Od=a.momentProperties=[],Pd=!1,Qd={},Rd={},Sd=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Td=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ud={},Vd={},Wd=/\d/,Xd=/\d\d/,Yd=/\d{3}/,Zd=/\d{4}/,$d=/[+-]?\d{6}/,_d=/\d\d?/,ae=/\d{1,3}/,be=/\d{1,4}/,ce=/[+-]?\d{1,6}/,de=/\d+/,ee=/[+-]?\d+/,fe=/Z|[+-]\d\d:?\d\d/gi,ge=/[+-]?\d+(\.\d{1,3})?/,he=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ie={},je={},ke=0,le=1,me=2,ne=3,oe=4,pe=5,qe=6;H("M",["MM",2],"Mo",function(){return this.month()+1}),H("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),H("MMMM",0,0,function(a){return this.localeData().months(this,a)}),z("month","M"),N("M",_d),N("MM",_d,Xd),N("MMM",he),N("MMMM",he),Q(["M","MM"],function(a,b){b[le]=q(a)-1}),Q(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[le]=e:j(c).invalidMonth=a});var re="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),se="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),te={};a.suppressDeprecationWarnings=!1;var ue=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ve=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],we=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],xe=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=aa("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),H(0,["YY",2],0,function(){return this.year()%100}),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),z("year","y"),N("Y",ee),N("YY",_d,Xd),N("YYYY",be,Zd),N("YYYYY",ce,$d),N("YYYYYY",ce,$d),Q(["YYYYY","YYYYYY"],ke),Q("YYYY",function(b,c){c[ke]=2===b.length?a.parseTwoDigitYear(b):q(b)}),Q("YY",function(b,c){c[ke]=a.parseTwoDigitYear(b)}),a.parseTwoDigitYear=function(a){return q(a)+(q(a)>68?1900:2e3)};var ye=C("FullYear",!1);H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),N("w",_d),N("ww",_d,Xd),N("W",_d),N("WW",_d,Xd),R(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=q(a)});var ze={dow:0,doy:6};H("DDD",["DDDD",3],"DDDo","dayOfYear"),z("dayOfYear","DDD"),N("DDD",ae),N("DDDD",Yd),Q(["DDD","DDDD"],function(a,b,c){c._dayOfYear=q(a)}),a.ISO_8601=function(){};var Ae=aa("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=Da.apply(null,arguments);return this>a?this:a}),Be=aa("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Da.apply(null,arguments);return a>this?this:a});Ja("Z",":"),Ja("ZZ",""),N("Z",fe),N("ZZ",fe),Q(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ka(a)});var Ce=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var De=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Ee=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ya.fn=Ha.prototype;var Fe=ab(1,"add"),Ge=ab(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var He=aa("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Db("gggg","weekYear"),Db("ggggg","weekYear"),Db("GGGG","isoWeekYear"),Db("GGGGG","isoWeekYear"),z("weekYear","gg"),z("isoWeekYear","GG"),N("G",ee),N("g",ee),N("GG",_d,Xd),N("gg",_d,Xd),N("GGGG",be,Zd),N("gggg",be,Zd),N("GGGGG",ce,$d),N("ggggg",ce,$d),R(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=q(a)}),R(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),H("Q",0,0,"quarter"),z("quarter","Q"),N("Q",Wd),Q("Q",function(a,b){b[le]=3*(q(a)-1)}),H("D",["DD",2],"Do","date"),z("date","D"),N("D",_d),N("DD",_d,Xd),N("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),Q(["D","DD"],me),Q("Do",function(a,b){b[me]=q(a.match(_d)[0],10)});var Ie=C("Date",!0);H("d",0,"do","day"),H("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),H("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),H("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),N("d",_d),N("e",_d),N("E",_d),N("dd",he),N("ddd",he),N("dddd",he),R(["dd","ddd","dddd"],function(a,b,c){var d=c._locale.weekdaysParse(a);null!=d?b.d=d:j(c).invalidWeekday=a}),R(["d","e","E"],function(a,b,c,d){b[d]=q(a)});var Je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ke="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Le="Su_Mo_Tu_We_Th_Fr_Sa".split("_");H("H",["HH",2],0,"hour"),H("h",["hh",2],0,function(){return this.hours()%12||12}),Sb("a",!0),Sb("A",!1),z("hour","h"),N("a",Tb),N("A",Tb),N("H",_d),N("h",_d),N("HH",_d,Xd),N("hh",_d,Xd),Q(["H","HH"],ne),Q(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),Q(["h","hh"],function(a,b,c){b[ne]=q(a),j(c).bigHour=!0});var Me=/[ap]\.?m?\.?/i,Ne=C("Hours",!0);H("m",["mm",2],0,"minute"),z("minute","m"),N("m",_d),N("mm",_d,Xd),Q(["m","mm"],oe);var Oe=C("Minutes",!1);H("s",["ss",2],0,"second"),z("second","s"),N("s",_d),N("ss",_d,Xd),Q(["s","ss"],pe);var Pe=C("Seconds",!1);H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),z("millisecond","ms"),N("S",ae,Wd),N("SS",ae,Xd),N("SSS",ae,Yd);var Qe;for(Qe="SSSS";Qe.length<=9;Qe+="S")N(Qe,de);for(Qe="S";Qe.length<=9;Qe+="S")Q(Qe,Wb);var Re=C("Milliseconds",!1);H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var Se=n.prototype;Se.add=Fe,Se.calendar=cb,Se.clone=db,Se.diff=ib,Se.endOf=ub,Se.format=mb,Se.from=nb,Se.fromNow=ob,Se.to=pb,Se.toNow=qb,Se.get=F,Se.invalidAt=Cb,Se.isAfter=eb,Se.isBefore=fb,Se.isBetween=gb,Se.isSame=hb,Se.isValid=Ab,Se.lang=He,Se.locale=rb,Se.localeData=sb,Se.max=Be,Se.min=Ae,Se.parsingFlags=Bb,Se.set=F,Se.startOf=tb,Se.subtract=Ge,Se.toArray=yb,Se.toObject=zb,Se.toDate=xb,Se.toISOString=lb,Se.toJSON=lb,Se.toString=kb,Se.unix=wb,Se.valueOf=vb,Se.year=ye,Se.isLeapYear=ia,Se.weekYear=Fb,Se.isoWeekYear=Gb,Se.quarter=Se.quarters=Jb,Se.month=Y,Se.daysInMonth=Z,Se.week=Se.weeks=na,Se.isoWeek=Se.isoWeeks=oa,Se.weeksInYear=Ib,Se.isoWeeksInYear=Hb,Se.date=Ie,Se.day=Se.days=Pb,Se.weekday=Qb,Se.isoWeekday=Rb,Se.dayOfYear=qa,Se.hour=Se.hours=Ne,Se.minute=Se.minutes=Oe,Se.second=Se.seconds=Pe,Se.millisecond=Se.milliseconds=Re,Se.utcOffset=Na,Se.utc=Pa,Se.local=Qa,Se.parseZone=Ra,Se.hasAlignedHourOffset=Sa,Se.isDST=Ta,Se.isDSTShifted=Ua,Se.isLocal=Va,Se.isUtcOffset=Wa,Se.isUtc=Xa,Se.isUTC=Xa,Se.zoneAbbr=Xb,Se.zoneName=Yb,Se.dates=aa("dates accessor is deprecated. Use date instead.",Ie),Se.months=aa("months accessor is deprecated. Use month instead",Y),Se.years=aa("years accessor is deprecated. Use year instead",ye),Se.zone=aa("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Oa);var Te=Se,Ue={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ve={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},We="Invalid date",Xe="%d",Ye=/\d{1,2}/,Ze={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},$e=s.prototype;$e._calendar=Ue,$e.calendar=_b,$e._longDateFormat=Ve,$e.longDateFormat=ac,$e._invalidDate=We,$e.invalidDate=bc,$e._ordinal=Xe,$e.ordinal=cc,$e._ordinalParse=Ye,$e.preparse=dc,$e.postformat=dc,$e._relativeTime=Ze,$e.relativeTime=ec,$e.pastFuture=fc,$e.set=gc,$e.months=U,$e._months=re,$e.monthsShort=V,$e._monthsShort=se,$e.monthsParse=W,$e.week=ka,$e._week=ze,$e.firstDayOfYear=ma,$e.firstDayOfWeek=la,$e.weekdays=Lb,$e._weekdays=Je,$e.weekdaysMin=Nb,$e._weekdaysMin=Le,$e.weekdaysShort=Mb,$e._weekdaysShort=Ke,$e.weekdaysParse=Ob,$e.isPM=Ub,$e._meridiemParse=Me,$e.meridiem=Vb,w("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===q(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=aa("moment.lang is deprecated. Use moment.locale instead.",w),a.langData=aa("moment.langData is deprecated. Use moment.localeData instead.",y);var _e=Math.abs,af=yc("ms"),bf=yc("s"),cf=yc("m"),df=yc("h"),ef=yc("d"),ff=yc("w"),gf=yc("M"),hf=yc("y"),jf=Ac("milliseconds"),kf=Ac("seconds"),lf=Ac("minutes"),mf=Ac("hours"),nf=Ac("days"),of=Ac("months"),pf=Ac("years"),qf=Math.round,rf={s:45,m:45,h:22,d:26,M:11},sf=Math.abs,tf=Ha.prototype;tf.abs=oc,tf.add=qc,tf.subtract=rc,tf.as=wc,tf.asMilliseconds=af,tf.asSeconds=bf,tf.asMinutes=cf,tf.asHours=df,tf.asDays=ef,tf.asWeeks=ff,tf.asMonths=gf,tf.asYears=hf,tf.valueOf=xc,tf._bubble=tc,tf.get=zc,tf.milliseconds=jf,tf.seconds=kf,tf.minutes=lf,tf.hours=mf,tf.days=nf,tf.weeks=Bc,tf.months=of,tf.years=pf,tf.humanize=Fc,tf.toISOString=Gc,tf.toString=Gc,tf.toJSON=Gc,tf.locale=rb,tf.localeData=sb,tf.toIsoString=aa("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Gc),tf.lang=He,H("X",0,0,"unix"),H("x",0,0,"valueOf"),N("x",ee),N("X",ge),Q("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),Q("x",function(a,b,c){c._d=new Date(q(a))}), -//! moment.js -//! version : 2.10.6 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -a.version="2.10.6",b(Da),a.fn=Te,a.min=Fa,a.max=Ga,a.utc=h,a.unix=Zb,a.months=jc,a.isDate=d,a.locale=w,a.invalid=l,a.duration=Ya,a.isMoment=o,a.weekdays=lc,a.parseZone=$b,a.localeData=y,a.isDuration=Ia,a.monthsShort=kc,a.weekdaysMin=nc,a.defineLocale=x,a.weekdaysShort=mc,a.normalizeUnits=A,a.relativeTimeThreshold=Ec;var uf=a,vf=(uf.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return 12>a?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),uf.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}}),{1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"}),wf={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},xf=(uf.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return wf[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return vf[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}),uf.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}}),{1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"}),yf={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},zf=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5},Af={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Bf=function(a){return function(b,c,d,e){var f=zf(b),g=Af[a][zf(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Cf=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"],Df=(uf.defineLocale("ar",{months:Cf,monthsShort:Cf,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Bf("s"),m:Bf("m"),mm:Bf("m"),h:Bf("h"),hh:Bf("h"),d:Bf("d"),dd:Bf("d"),M:Bf("M"),MM:Bf("M"),y:Bf("y"),yy:Bf("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return yf[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return xf[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}),{1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"}),Ef=(uf.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return 4>a?"gecə":12>a?"səhər":17>a?"gündüz":"axşam"},ordinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Df[b]||Df[c]||Df[d])},week:{dow:1,doy:7}}),uf.defineLocale("be",{months:Jc,monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:Kc,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:Ic,mm:Ic,h:Ic,hh:Ic,d:"дзень",dd:Ic,M:"месяц",MM:Ic,y:"год",yy:Ic},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночы":12>a?"раніцы":17>a?"дня":"вечара"},ordinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}}),uf.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}),{1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"}),Ff={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},Gf=(uf.defineLocale("bn",{months:"জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি".split("_"),weekdaysMin:"রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কএক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return Ff[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ef[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকেল|রাত/,isPM:function(a){return/^(দুপুর|বিকেল|রাত)$/.test(a)},meridiem:function(a,b,c){return 4>a?"রাত":10>a?"সকাল":17>a?"দুপুর":20>a?"বিকেল":"রাত"},week:{dow:0,doy:6}}),{1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"}),Hf={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"},If=(uf.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return Hf[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Gf[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,isPM:function(a){return/^(ཉིན་གུང|དགོང་དག|མཚན་མོ)$/.test(a)},meridiem:function(a,b,c){return 4>a?"མཚན་མོ":10>a?"ཞོགས་ཀས":17>a?"ཉིན་གུང":20>a?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}}),uf.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:Lc,h:"un eur",hh:"%d eur",d:"un devezh",dd:Lc,M:"ur miz",MM:Lc,y:"ur bloaz",yy:Mc},ordinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}}),uf.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Qc,mm:Qc,h:Qc,hh:Qc,d:"dan",dd:Qc,M:"mjesec",MM:Qc,y:"godinu",yy:Qc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),uf.defineLocale("ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",LTS:"LT:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return("w"===b||"W"===b)&&(c="a"),a+c},week:{dow:1,doy:4}}),"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_")),Jf="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),Kf=(uf.defineLocale("cs",{months:If,monthsShort:Jf,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(If,Jf),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:Sc,m:Sc,mm:Sc,h:Sc,hh:Sc,d:Sc,dd:Sc,M:Sc,MM:Sc,y:Sc,yy:Sc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},ordinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}}),uf.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}}),uf.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[Heute um] LT [Uhr]",sameElse:"L",nextDay:"[Morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[Gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Tc,mm:"%d Minuten",h:Tc,hh:"%d Stunden",d:Tc,dd:Tc,M:Tc,MM:Tc,y:Tc,yy:Tc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[Heute um] LT [Uhr]",sameElse:"L",nextDay:"[Morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[Gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Uc,mm:"%d Minuten",h:Uc,hh:"%d Stunden",d:Uc,dd:Uc,M:Uc,MM:Uc,y:Uc,yy:Uc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return"function"==typeof c&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}}),uf.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),uf.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"D MMMM, YYYY",LLL:"D MMMM, YYYY h:mm A",LLLL:"dddd, D MMMM, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),uf.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),uf.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-an de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}}),"Ene._Feb._Mar._Abr._May._Jun._Jul._Ago._Sep._Oct._Nov._Dic.".split("_")),Lf="Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic".split("_"),Mf=(uf.defineLocale("es",{months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Lf[a.month()]:Kf[a.month()]},weekdays:"Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado".split("_"),weekdaysShort:"Dom._Lun._Mar._Mié._Jue._Vie._Sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mi_Ju_Vi_Sá".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),uf.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:Vc,m:Vc,mm:Vc,h:Vc,hh:Vc,d:Vc,dd:"%d päeva",M:Vc,MM:Vc,y:Vc,yy:Vc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]", -lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),{1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"}),Nf={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"},Of=(uf.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return Nf[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Mf[a]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}}),"nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" ")),Pf=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",Of[7],Of[8],Of[9]],Qf=(uf.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:Wc,m:Wc,mm:Wc,h:Wc,hh:Wc,d:Wc,dd:Wc,M:Wc,MM:Wc,y:Wc,yy:Wc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}}),uf.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}}),"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_")),Rf="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),Sf=(uf.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Rf[a.month()]:Qf[a.month()]},weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),uf.defineLocale("gl",{months:"Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro".split("_"),monthsShort:"Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.".split("_"),weekdays:"Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado".split("_"),weekdaysShort:"Dom._Lun._Mar._Mér._Xov._Ven._Sáb.".split("_"),weekdaysMin:"Do_Lu_Ma_Mé_Xo_Ve_Sá".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return"uns segundos"===a?"nuns segundos":"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:7}}),uf.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}}}),{1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"}),Tf={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},Uf=(uf.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Tf[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Sf[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?4>a?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}}),uf.defineLocale("hr",{months:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Yc,mm:Yc,h:Yc,hh:Yc,d:"dan",dd:Yc,M:"mjesec",MM:Yc,y:"godinu",yy:Yc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),"vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ")),Vf=(uf.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return $c.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return $c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:Zc,m:Zc,mm:Zc,h:Zc,hh:Zc,d:Zc,dd:Zc,M:Zc,MM:Zc,y:Zc,yy:Zc},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),uf.defineLocale("hy-am",{months:_c,monthsShort:ad,weekdays:bd,weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return 4>a?"գիշերվա":12>a?"առավոտվա":17>a?"ցերեկվա":"երեկոյան"},ordinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}}),uf.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),uf.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:dd,m:dd,mm:dd,h:"klukkustund",hh:dd,d:dd,dd:dd,M:dd,MM:dd,y:dd,yy:dd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"D_L_Ma_Me_G_V_S".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),uf.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah時m分",LLLL:"YYYY年M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}),uf.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"enjing":15>a?"siyang":19>a?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),uf.defineLocale("ka",{months:ed,monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:fd,weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":20>a||100>=a&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}}),uf.defineLocale("km",{months:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនៈ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}}),uf.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return 12>a?"오전":"오후"}}),uf.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:hd,past:id,s:"e puer Sekonnen",m:gd,mm:"%d Minutten",h:gd,hh:"%d Stonnen",d:gd,dd:"%d Deeg",M:gd,MM:"%d Méint",y:gd,yy:"%d Joer"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"}),Wf="sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),Xf=(uf.defineLocale("lt",{months:ld,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:qd,weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:kd,m:md,mm:pd,h:md,hh:pd,d:md,dd:pd,M:md,MM:pd,y:md,yy:pd},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}}),{m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")}),Yf=(uf.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:ud,m:td,mm:sd,h:td,hh:sd,d:td,dd:sd,M:td,MM:sd,y:td,yy:sd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=Yf.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Yf.correctGrammaticalCase(a,d)}}),Zf=(uf.defineLocale("me",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedjelja","ponedjeljak","utorak","srijeda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sri.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:Yf.translate,mm:Yf.translate,h:Yf.translate,hh:Yf.translate,d:"dan",dd:Yf.translate,M:"mjesec",MM:Yf.translate,y:"godinu",yy:Yf.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),uf.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Во изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Во изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}),uf.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,isPM:function(a){return/^(ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി)$/.test(a)},meridiem:function(a,b,c){return 4>a?"രാത്രി":12>a?"രാവിലെ":17>a?"ഉച്ച കഴിഞ്ഞ്":20>a?"വൈകുന്നേരം":"രാത്രി"}}),{1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"}),$f={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},_f=(uf.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%s नंतर",past:"%s पूर्वी",s:"सेकंद",m:"एक मिनिट",mm:"%d मिनिटे",h:"एक तास",hh:"%d तास",d:"एक दिवस",dd:"%d दिवस",M:"एक महिना",MM:"%d महिने",y:"एक वर्ष",yy:"%d वर्षे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return $f[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Zf[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?4>a?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात्री":10>a?"सकाळी":17>a?"दुपारी":20>a?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}}),uf.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT", -lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),uf.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"tengahari":19>a?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),{1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"}),ag={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"},bg=(uf.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return ag[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return _f[a]})},week:{dow:1,doy:4}}),uf.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tirs_ons_tors_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"H.mm",LTS:"H.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H.mm",LLLL:"dddd D. MMMM YYYY [kl.] H.mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"}),cg={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},dg=(uf.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आइ._सो._मङ्_बु._बि._शु._श.".split("_"),longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return cg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return bg[a]})},meridiemParse:/राती|बिहान|दिउँसो|बेलुका|साँझ|राती/,meridiemHour:function(a,b){return 12===a&&(a=0),"राती"===b?3>a?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"बेलुका"===b||"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return 3>a?"राती":10>a?"बिहान":15>a?"दिउँसो":18>a?"बेलुका":20>a?"साँझ":"राती"},calendar:{sameDay:"[आज] LT",nextDay:"[भोली] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडी",s:"केही समय",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:1,doy:7}}),"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_")),eg="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),fg=(uf.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?eg[a.month()]:dg[a.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}),uf.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),"styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_")),gg="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),hg=(uf.defineLocale("pl",{months:function(a,b){return""===b?"("+gg[a.month()]+"|"+fg[a.month()]+")":/D MMMM/.test(b)?gg[a.month()]:fg[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"N_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:wd,mm:wd,h:wd,hh:wd,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:wd,y:"rok",yy:wd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"}),uf.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),uf.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:xd,h:"o oră",hh:xd,d:"o zi",dd:xd,M:"o lună",MM:xd,y:"un an",yy:xd},week:{dow:1,doy:7}}),uf.defineLocale("ru",{months:Ad,monthsShort:Bd,weekdays:Cd,weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[й|я]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(){return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT"},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:zd,mm:zd,h:"час",hh:zd,d:"день",dd:zd,M:"месяц",MM:zd,y:"год",yy:zd},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}}),uf.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},ordinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}}),"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_")),ig="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),jg=(uf.defineLocale("sk",{months:hg,monthsShort:ig,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(hg,ig),weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:Ed,m:Ed,mm:Ed,h:Ed,hh:Ed,d:Ed,dd:Ed,M:Ed,MM:Ed,y:Ed,yy:Ed},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:Fd,m:Fd,mm:Fd,h:Fd,hh:Fd,d:Fd,dd:Fd,M:Fd,MM:Fd,y:Fd,yy:Fd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),uf.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return 12>a?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=jg.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+jg.correctGrammaticalCase(a,d)}}),kg=(uf.defineLocale("sr-cyrl",{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","мар.","апр.","мај","јун","јул","авг.","сеп.","окт.","нов.","дец."],weekdays:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","уто.","сре.","чет.","пет.","суб."],weekdaysMin:["не","по","ут","ср","че","пе","су"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:jg.translate,mm:jg.translate,h:jg.translate,hh:jg.translate,d:"дан",dd:jg.translate,M:"месец",MM:jg.translate,y:"годину",yy:jg.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),{words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(a,b,c){var d=kg.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+kg.correctGrammaticalCase(a,d)}}),lg=(uf.defineLocale("sr",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sre.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:kg.translate,mm:kg.translate,h:kg.translate,hh:kg.translate,d:"dan",dd:kg.translate,M:"mesec",MM:kg.translate,y:"godinu",yy:kg.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),uf.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}}),uf.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return 2>a?" யாமம்":6>a?" வைகறை":10>a?" காலை":14>a?" நண்பகல்":18>a?" எற்பாடு":22>a?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?2>a?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,doy:6}}),uf.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",LTS:"H นาฬิกา m นาที s วินาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H นาฬิกา m นาที",LLLL:"วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}),uf.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"[Ngayon sa] LT",nextDay:"[Bukas sa] LT",nextWeek:"dddd [sa] LT",lastDay:"[Kahapon sa] LT",lastWeek:"dddd [huling linggo] LT",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),{1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"}),mg=(uf.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(lg[b]||lg[c]||lg[d])},week:{dow:1,doy:7}}),uf.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"LT.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY LT",LLLL:"dddd, [li] D. MMMM [dallas] YYYY LT"},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Gd,m:Gd,mm:Gd,h:Gd,hh:Gd,d:Gd,dd:Gd,M:Gd,MM:Gd,y:Gd,yy:Gd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),uf.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),uf.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}}),uf.defineLocale("uk",{months:Jd,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:Kd,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:Ld("[Сьогодні "),nextDay:Ld("[Завтра "),lastDay:Ld("[Вчора "),nextWeek:Ld("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return Ld("[Минулої] dddd [").call(this);case 1:case 2:case 4:return Ld("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:Id,mm:Id,h:"годину",hh:Id,d:"день",dd:Id,M:"місяць",MM:Id,y:"рік",yy:Id},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}}),uf.defineLocale("uz",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),uf.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm", -llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),uf.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah点mm分",llll:"YYYY年MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var a,b;return a=uf().startOf("week"),b=this.unix()-a.unix()>=604800?"[下]":"[本]",0===this.minutes()?b+"dddAh点整":b+"dddAh点mm"},lastWeek:function(){var a,b;return a=uf().startOf("week"),b=this.unix()=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return 900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}}),uf);return mg.locale("en"),mg}); \ No newline at end of file +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function M(){return e.apply(null,arguments)}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function _(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(h(e,a))return;return 1}function r(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,a){for(var t=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,d-Fe(e)):(r=e,d);return{year:r,dayOfYear:i}}function Ce(e,a,t){var s,n,r=Je(e.year(),a,t),d=Math.floor((e.dayOfYear()-r-1)/7)+1;return d<1?s=d+Ie(n=e.year()-1,a,t):d>Ie(e.year(),a,t)?(s=d-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=d),{week:s,year:n}}function Ie(e,a,t){var s=Je(e,a,t),n=Je(e+1,a,t);return(Fe(e)-s+n)/7}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),C("week",5),C("isoWeek",5),le("w",ae),le("ww",ae,$),le("W",ae),le("WW",ae,$),Ye(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=G(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}W("d",0,"do","day"),W("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),W("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),W("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),C("day",11),C("weekday",11),C("isoWeekday",11),le("d",ae),le("e",ae),le("E",ae),le("dd",function(e,a){return a.weekdaysMinRegex(e)}),le("ddd",function(e,a){return a.weekdaysShortRegex(e)}),le("dddd",function(e,a){return a.weekdaysRegex(e)}),Ye(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:L(t).invalidWeekday=e}),Ye(["d","e","E"],function(e,a,t,s){a[s]=G(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Be="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=ue,qe=ue,Ze=ue;function $e(){function e(e,a){return a.length-e.length}for(var a,t,s,n,r=[],d=[],i=[],_=[],o=0;o<7;o++)a=c([2e3,1]).day(o),t=he(this.weekdaysMin(a,"")),s=he(this.weekdaysShort(a,"")),n=he(this.weekdays(a,"")),r.push(t),d.push(s),i.push(n),_.push(t),_.push(s),_.push(n);r.sort(e),d.sort(e),i.sort(e),_.sort(e),this._weekdaysRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){W(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Qe),W("k",["kk",2],0,function(){return this.hours()||24}),W("hmm",0,0,function(){return""+Qe.apply(this)+H(this.minutes(),2)}),W("hmmss",0,0,function(){return""+Qe.apply(this)+H(this.minutes(),2)+H(this.seconds(),2)}),W("Hmm",0,0,function(){return""+this.hours()+H(this.minutes(),2)}),W("Hmmss",0,0,function(){return""+this.hours()+H(this.minutes(),2)+H(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),z("hour","h"),C("hour",13),le("a",ea),le("A",ea),le("H",ae),le("h",ae),le("k",ae),le("HH",ae,$),le("hh",ae,$),le("kk",ae,$),le("hmm",te),le("hmmss",se),le("Hmm",te),le("Hmmss",se),Le(["H","HH"],De),Le(["k","kk"],function(e,a,t){var s=G(e);a[De]=24===s?0:s}),Le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),Le(["h","hh"],function(e,a,t){a[De]=G(e),L(t).bigHour=!0}),Le("hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s)),L(t).bigHour=!0}),Le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n)),L(t).bigHour=!0}),Le("Hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s))}),Le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n))});var aa=V("Hours",!0);var ta,sa={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:je,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Be,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},ra={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function ia(e){for(var a,t,s,n,r=0;r=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s=a-1)break;a--}r++}return ta}function _a(a){var e;if(void 0===na[a]&&"undefined"!=typeof module&&module&&module.exports)try{e=ta._abbr,require("./locale/"+a),oa(e)}catch(e){na[a]=null}return na[a]}function oa(e,a){var t;return e&&((t=r(a)?ua(e):ma(e,a))?ta=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ta._abbr}function ma(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])w("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=na[e]._config;else if(null!=a.parentLocale)if(null!=na[a.parentLocale])s=na[a.parentLocale]._config;else{if(null==(t=_a(a.parentLocale)))return ra[a.parentLocale]||(ra[a.parentLocale]=[]),ra[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new S(b(s,a)),ra[e]&&ra[e].forEach(function(e){ma(e.name,e.config)}),oa(e),na[e]}function ua(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ta;if(!i(e)){if(a=_a(e))return a;e=[e]}return ia(e)}function la(e){var a,t=e._a;return t&&-2===L(e).overflow&&(a=t[pe]<0||11Se(t[fe],t[pe])?ke:t[De]<0||24Ie(t,r,d)?L(e)._overflowWeeks=!0:null!=_?L(e)._overflowWeekday=!0:(i=Re(t,s,n,r,d),e._a[fe]=i.year,e._dayOfYear=i.dayOfYear)}(e),null!=e._dayOfYear&&(r=ga(e._a[fe],s[fe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(L(e)._overflowDayOfYear=!0),t=Ne(r,0,e._dayOfYear),e._a[pe]=t.getUTCMonth(),e._a[ke]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=_[a]=s[a];for(;a<7;a++)e._a[a]=_[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[De]&&0===e._a[Te]&&0===e._a[ge]&&0===e._a[we]&&(e._nextDay=!0,e._a[De]=0),e._d=(e._useUTC?Ne:function(e,a,t,s,n,r,d){var i;return e<100&&0<=e?(i=new Date(e+400,a,t,s,n,r,d),isFinite(i.getFullYear())&&i.setFullYear(e)):i=new Date(e,a,t,s,n,r,d),i}).apply(null,_),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[De]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(L(e).weekdayMismatch=!0)}}function va(e){if(e._f!==M.ISO_8601)if(e._f!==M.RFC_2822){e._a=[],L(e).empty=!0;for(var a,t,s,n,r,d,i,_=""+e._i,o=_.length,m=0,u=E(e._f,e._locale).match(j)||[],l=0;lt.valueOf():t.valueOf()"}),yt.toJSON=function(){return this.isValid()?this.toISOString():null},yt.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},yt.unix=function(){return Math.floor(this.valueOf()/1e3)},yt.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},yt.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},yt.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;tthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},yt.isLocal=function(){return!!this.isValid()&&!this._isUTC},yt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},yt.isUtc=Ca,yt.isUTC=Ca,yt.zoneAbbr=function(){return this._isUTC?"UTC":""},yt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},yt.dates=t("dates accessor is deprecated. Use date instead.",lt),yt.months=t("months accessor is deprecated. Use month instead",Ae),yt.years=t("years accessor is deprecated. Use year instead",ze),yt.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),yt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,a={};return p(a,this),(a=ba(a))._a?(e=(a._isUTC?c:Ha)(a._a),this._isDSTShifted=this.isValid()&&0/dev/null + $(XGETTEXT) -D templates -D ../default/templates -o $(FR) 2>/dev/null + $(XGETTEXT) -D templates -D ../default/templates -o $(DE) 2>/dev/null + $(XGETTEXT) -D templates -D ../default/templates -o $(ES) 2>/dev/null + $(XGETTEXT) -D templates -D ../default/templates -o $(OC) 2>/dev/null + $(XGETTEXT) -D templates -D ../default/templates -o $(AR) 2>/dev/null + sed $(SEDOPTS) -i $(EN) + sed $(SEDOPTS2) -i $(EN) + sed $(SEDOPTS) -i $(FR) + sed $(SEDOPTS2) -i $(FR) + sed $(SEDOPTS) -i $(DE) + sed $(SEDOPTS2) -i $(DE) + sed $(SEDOPTS) -i $(ES) + sed $(SEDOPTS2) -i $(ES) + sed $(SEDOPTS) -i $(OC) + sed $(SEDOPTS) -i $(OC) + sed $(SEDOPTS2) -i $(AR) + sed $(SEDOPTS2) -i $(AR) diff --git a/themes/korrigan/Readme.md b/themes/korrigan/Readme.md new file mode 100644 index 0000000..5b0b6b2 --- /dev/null +++ b/themes/korrigan/Readme.md @@ -0,0 +1,17 @@ +I know there is a lot to work on but this fits my needs for now and don't have much time to rework the theme from beginning. + +Feel free to open a merge request for improvements. + +![preview of the theme](./preview.png) + +# Credits: + +* Triskel image comes from https://upload.wikimedia.org/wikipedia/commons/0/07/Triskele-Symbol-spiral-five-thirds-turns.svg + +# License: + +[MIT](https://opensource.org/licenses/MIT) + +# Author: + +[nicofrand](https://nicofrand.eu) ([Twitter](https://twitter.com/@nicofrand), [Mastodon](https://mastodon.social/@nicofrand)) diff --git a/themes/korrigan/lib/Lutim/I18N.pm b/themes/korrigan/lib/Lutim/I18N.pm new file mode 100644 index 0000000..59160f7 --- /dev/null +++ b/themes/korrigan/lib/Lutim/I18N.pm @@ -0,0 +1,22 @@ +# vim:set sw=4 ts=4 sts=4 ft=perl expandtab: +package Lutim::I18N; + +use base 'Locale::Maketext'; +use File::Basename qw/dirname/; +use Locale::Maketext::Lexicon { + _auto => 1, + _decode => 1, + _style => 'gettext', + '*' => [ + Gettext => dirname(__FILE__) . '/I18N/*.po', + Gettext => $app_dir . 'themes/default/lib/Lutim/I18N/*.po', + ] +}; + +use vars qw($app_dir); +BEGIN { + use Cwd; + my $app_dir = getcwd; +} + +1; diff --git a/themes/korrigan/preview.png b/themes/korrigan/preview.png new file mode 100644 index 0000000..4da0374 Binary files /dev/null and b/themes/korrigan/preview.png differ diff --git a/themes/korrigan/public/css/korrigan.css b/themes/korrigan/public/css/korrigan.css new file mode 100644 index 0000000..f213c15 --- /dev/null +++ b/themes/korrigan/public/css/korrigan.css @@ -0,0 +1,178 @@ + +/* Yeched'mad CSS */ +:root { + --theme-blue: #0060DF; + --theme-blue-hover: #45A1FF; +} + +body { + position: relative; + background-color: #EEEEEE; + + background-size: cover; + + min-height: 100vh; + display: flex; + flex-direction: column; +} + +body::before, +body::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + z-index: -1; +} + +body::before { + background-size: cover; + background-image: url("../img/background.svg"); +} + +body::after { + background: linear-gradient(to bottom, rgba(255, 255, 255, 0.75) 4em, transparent 4em); +} + +body .navbar-default { + background-color: transparent; + border-color: transparent; +} + +body .navbar-default .open > a, +body .navbar-default .open > a:focus, +body .navbar-default .open > a:hover, +body .navbar-default .open > a:active { + background-color: rgba(11, 103, 183, 0.5); +} + +body > .container { + flex-grow: 1; + background-color: #FFFFFF; + padding: 3em; + border-radius: 5px; + box-shadow: 1px 1px 5px #333333; + display: flex; + justify-content: space-between; + font-size: 1.15em; + + /* SVG coming from https://upload.wikimedia.org/wikipedia/commons/0/07/Triskele-Symbol-spiral-five-thirds-turns.svg */ + background-image: url('../img/triskel.svg'); + background-size: 500px; + background-repeat: no-repeat; + background-position: -125px calc(100% + 150px); +} + +body > .container .upload-info { + width: 100%; +} + +body > .container::before, +body > .container::after { + display: none; +} + +body.index > .container > * { + background-color: rgba(255, 255, 255, 0.8); + width: calc(50% - 2em); + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} + +body .logo { + display: none; +} + +body .header { + margin-bottom: 2em; +} + +body .hennypenny { + color: var(--theme-blue); + margin-top: 0; + font-family: sans-serif; +} + +body label { + font-weight: normal; + display: block; + margin: 1em 0; +} + +body input[type='checkbox'] { + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + + position: static; + margin: 0; + cursor: pointer; + vertical-align: middle; + display: inline-flex; + justify-content: flex-start; + align-items: center; + + background-color: #555555; + width: 3rem; + height: 1.5rem; + margin-top: 0.25em; + margin-bottom: 0.25em; + border: none; + border-radius: 1em; +} + +body input[type='checkbox']:checked { + color: #FFFFFF; + background-color: var(--theme-blue); + justify-content: flex-end; +} + +body input[type='checkbox']::after { + content: ''; + margin: 0 0.15rem; + width: 1.2rem; + height: 1.2rem; + border-radius: 50%; + background-color: white; +} + +body .uploader-container { + display: flex; + flex-direction: column; +} + +body .uploader { + display: flex; + flex-direction: column; + justify-content: center; + flex-grow: 1; + border: 2px dashed #DDDDDD; + border-radius: 5px; + color: #6F7986; +} + +body .uploader:hover { + background-color: #FDFEFF; +} + +body .uploader div.browser label { + background-color: var(--theme-blue); +} + +body .uploader-container form .label { + display: block; +} + +body .btn { + background-color: var(--theme-blue); + color: white; + padding: 0.5em; +} + +body .btn:hover, +body .btn:focus, +body .btn:active { + background-color: var(--theme-blue-hover); +} diff --git a/themes/korrigan/public/img/background.svg b/themes/korrigan/public/img/background.svg new file mode 100644 index 0000000..8c78d0f --- /dev/null +++ b/themes/korrigan/public/img/background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/korrigan/public/img/triskel.svg b/themes/korrigan/public/img/triskel.svg new file mode 100644 index 0000000..e001497 --- /dev/null +++ b/themes/korrigan/public/img/triskel.svg @@ -0,0 +1,63 @@ + + + + + + image/svg+xml + + + + + + + Triple Spiral symbol -- three filled Archimedean spirals (triskelion), less tightly wound + + + + diff --git a/themes/korrigan/templates/index.html.ep b/themes/korrigan/templates/index.html.ep new file mode 100644 index 0000000..439650c --- /dev/null +++ b/themes/korrigan/templates/index.html.ep @@ -0,0 +1,251 @@ +% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab: +% my %d = ( +% delay_0 => l('no time limit'), +% delay_1 => l('24 hours'), +% delay_365 => l('1 year') +% ); + + + + +
+ % if (config('always_encrypt')) { +

<%= l('The images are encrypted on the server (Lutim does not keep the key).') %>

+ % } + % if (defined(stash('short'))) { + % my $url = url_for('/'.stash('short'))->to_abs(); +
+
+ % if (defined(stash('thumb'))) { +
+ <%= stash('filename') %> thumbnail +
+ % } +
+ % # Display image informations +

+ <%= stash('filename') %> +     +

+ % my $delete_url = url_for('delete', {short => stash('real_short'), token => stash('token')})->to_abs(); +
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+
+
+ +
+
+ + +
+
+
+
+ <%= link_to $delete_url => ( class => "btn btn-default col-xs-12 text-left", title => l('Deletion link') ) => begin %> <%= $delete_url %> <%= end %> +
+
+
+
+
+
+ % # Delay modification form + % my $modify_url = url_for('modify', {short => stash('real_short'), token => stash('token')})->to_abs(); +
+
+ + +
+ +
+ <%= submit_button l('Let\'s go!'), class => 'btn btn-sm btn-default btn-primary', id => 'submitmodbutton' %> +
+
+
+
+ % } + % if (defined(flash('success'))) { +
+ +

<%== flash('success') %>

+
+ % } + % if (defined(flash('msg'))) { +
+ + <%= l('Something bad happened') %>
+ <%= flash('filename') %> <%= flash('msg') %> +
+ % } +
+ + + + +
+ +
+ + + +
+ % if ($c->config('watermark_path') && $c->config('watermark_enforce') eq 'none') { + + % } +
+ + +
+
+
<%= l('Drag & drop images here') %>
+
<%= l('-or-') %>
+
+ +
+
+

<%= l('Only images are allowed') %>

+
+

+ + + + +

+ <%= l('Let\'s go!') %> +
+
+ + diff --git a/themes/korrigan/templates/layouts/default.html.ep b/themes/korrigan/templates/layouts/default.html.ep new file mode 100644 index 0000000..a9b98a4 --- /dev/null +++ b/themes/korrigan/templates/layouts/default.html.ep @@ -0,0 +1,98 @@ +% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab: +% use Mojo::Util qw(url_escape); +% my $twitter_url = 'https://twitter.com/share'; +% my $url = url_for('/')->to_abs(); +% $twitter_url .= '?url='.url_escape("$url") +% .'&text=Check out this %23Lutim instance! '; + + + + Lutim + + + + + + + + + + + + + + %= stylesheet '/css/common.min.css' +% if (current_route 'stats') { + %= stylesheet '/css/morris-0.5.1.min.css' +% } else { + %= stylesheet '/css/not_stats.min.css' +% } +% if (current_route 'gallery') { + %= stylesheet '/css/gallery.min.css' +% } + %= stylesheet '/css/korrigan.css' + + + %= include 'partial/navbar', twitter_url => $twitter_url +
+
+
+% if (defined(config('hosted_by'))) { +
+ <%== config('hosted_by') %> +
+% } + +
+% if (defined(config('broadcast_message'))) { +
+ <%== config('broadcast_message') %> +
+% } +% if (defined(stash('stop_upload'))) { +
+ <%= stash('stop_upload') %> +
+% } + <%= content %> +
+% if (defined(config('piwik_img'))) { + +% } + %= javascript '/js/jquery-3.2.1.min.js' + %= javascript '/partial/manifest.js' + %= javascript '/js/toastify.js' + %= javascript '/js/bootstrap.min.js' + %= javascript '/partial/common.js' +% if (current_route 'stats') { + %= javascript '/js/lutim.js' + %= javascript '/js/raphael-min.js' + %= javascript '/js/morris-0.5.1.min.js' + %= javascript '/js/stats.js' + %= javascript '/partial/raw.js' +% } elsif (!(current_route 'about')) { + %= javascript '/js/lutim.js' + %= javascript '/js/dmuploader.min.js' +% } +% if (current_route 'index') { + %= javascript '/partial/lutim.js' +% } +% if (current_route 'gallery') { + %= javascript '/js/photoswipe.min.js' + %= javascript '/js/photoswipe-ui-default.min.js' + %= javascript '/js/jszip.min.js' + %= javascript '/js/FileSaver.min.js' + %= javascript '/partial/gallery.js' + %= javascript '/partial/lutim.js' +% } +% if (current_route 'myfiles') { + %= javascript '/js/moment-with-locales.min.js' + %= javascript '/partial/myfiles.js' +% } + + diff --git a/themes/korrigan/templates/partial/lutim.js.ep b/themes/korrigan/templates/partial/lutim.js.ep new file mode 100644 index 0000000..fb8a8f7 --- /dev/null +++ b/themes/korrigan/templates/partial/lutim.js.ep @@ -0,0 +1,494 @@ +% # vim:set sw=4 ts=4 sts=4 ft=javascript expandtab: +function selectInput() { + $(this).select(); +} +function cleanName(name, empty) { + if (typeof(name) === 'undefined') { + return name; + } + if (empty !== undefined && empty !== null && empty) { + return name.replace(/&(l|g)t;/g, '').replace(/"/g, '\''); + } else { + return name.replace(//g, '>'); + } +} +function tw_url(url) { + return btn = [ + '', + '', + '' + ].join(''); +} +function modifyImage(e) { + e.preventDefault(); + var url = $(this).data('modlink'); + var short = $(this).data('modshort'); + modify(url, short); +} +function modify(url, short) { + var limit = $('#day-'+short).val(); + var del_at_view = ($('#first-view-'+short).prop('checked')) ? 1 : 0; + $.ajax({ + url : url, + type : 'POST', + data : { + 'image_url' : '<%== url_for('/')->to_abs() %>'+short, + 'format' : 'json', + 'delete-day' : limit, + 'first-view' : del_at_view + }, + success: function(data) { + updateItem(short, limit, del_at_view); + goodToast(data.msg); + }, + error: function() { + badToast('<%= l('Error while trying to modify the image.') %>'); + } + }); +} + +function buildMessage(success, msg) { + if(success) { + var s_url = link([msg.short, '.', msg.ext].join(''), ''); + var thumb = (msg.thumb !== null) ? [ + '
', + '', + '', cleanName(msg.filename, true), ' thumbnail', + '', + '
' + ].join('') : '' + return [ + '
', + '', + '
', thumb, + '
', + '

', + '', + msg.filename, + '', + '

', + '
', + '
', + '', + '
', + '
', + '', + '', + '', + '
', + '', + '', + '', + '', + '
', + '
', + '
', + '', + '
', + '
', + '', + '
', + '', + '', + '', + '', + '
', + '
', + '
', + '', + '
', + '
', + '', + '', + '', + '
', + '', + '', + '', + '', + '
', + '
', + '
', + '', + '
', + '
', + '', + '', + '', + tw_url(msg.short), + '
', + '', + '', + '', + '', + '
', + '
', + '
', + '
', + '', link(msg.real_short, '', msg.token), '', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + ' ', + '
', + '', + '
 ', + '', + '<%= l('Let\'s go!') %>', + '', + '
', + '
', + '
', + '
' + ].join(''); + } else { + return [ + '
', + '', + '<%= l('Something bad happened') %>
', + cleanName(msg.filename, false), + '
', + cleanName(msg.msg, false), + '
' + ].join(''); + } +} +function bindddz(firstview, deleteday) { + $('#drag-and-drop-zone').dmUploader({ + url: '<%== url_for('/') %>', + dataType: 'json', + allowedTypes: 'image/*', + maxFileSize: <%= config('max_file_size') %>, + onNewFile: function(id, file){ + $('.messages').append([ + '
', + cleanName(file.name), '
', + '
', + '
', + ' 0%', + '
', + '
', + '
' + ].join('')); + }, + onUploadProgress: function(id, percent){ + var percentStr = ' '+percent+'%'; + $('#'+id).prop('aria-valuenow', percent); + $('#'+id).css('width', percent+'%'); + $('#'+id+'-text').html(percentStr); + }, + onUploadSuccess: function(id, data){ + data.msg.filename = cleanName(data.msg.filename); + $('#'+id+'-div').remove(); + if ($('#copy-all').length === 0 && data.success) { + $('.messages').prepend([ + '' + ].join('')); + } + $('.messages').append(buildMessage(data.success, data.msg)); + $('#del-'+data.msg.real_short).on('click', function(e) { + e.preventDefault(); + rmFromShortHash(data.msg.short+'.'+data.msg.ext) + rmFromZipHash(data.msg.short); + rmFromRandomHash(data.msg.short); + }); + $('#del-'+data.msg.real_short).on('click', delImage); + if (data.success) { + addToShortHash(data.msg.short+'.'+data.msg.ext); + addToZipHash(data.msg.short); + addToRandomHash(data.msg.short); + $('.close').unbind('click', evaluateCopyAll); + $('.close').on('click', evaluateCopyAll); + $('input[type=\'text\']').unbind("click", selectInput); + $('input[type=\'text\']').on("click", selectInput); + $('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard); + $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard); + $('.modify-image').unbind('click', modifyImage); + $('.modify-image').on('click', modifyImage); + $('.copy-to-clipboard-link').unbind('click', clickOnCopyLink); + $('.copy-to-clipboard-link').on('click', clickOnCopyLink); + addItem(data.msg); + } + }, + onUploadError: function(id, message){ + $('.messages').append(buildMessage(false, '')); + }, + onFileSizeError: function(file){ + $('.messages').append(buildMessage(false, { filename: file.name, msg: '<%= l('The file exceed the size limit (%1)', config('max_file_size')) %>'})); + } + }); +} + +function upload_url(e) { + e.preventDefault(); + var val = $('#lutim-file-url').val(); + if (val !== undefined && val !== '') { + $('#lutim-file-url').prop('disabled', 'disabled'); + $('.hidden-spin').css('display', 'block'); + $.ajax({ + url : '<%== url_for('/') %>', + type : 'POST', + data : { + 'lutim-file-url' : val, + 'format' : 'json', + 'first-view' : ($('#first-view').prop('checked')) ? 1 : 0, + 'crypt' : ($('#crypt').prop('checked')) ? 1 : 0, + 'delete-day' : $('#delete-day').val() + }, + success: function(data) { + data.msg.filename = cleanName(data.msg.filename); + $('.messages').append(buildMessage(data.success, data.msg)); + if (data.success) { + if ($('#copy-all').length === 0) { + $('.messages').prepend([ + '' + ].join('')); + } + $('#lutim-file-url').val(''); + addToShortHash(data.msg.short+'.'+data.msg.ext); + addToZipHash(data.msg.short); + addToRandomHash(data.msg.short); + $('#del-'+data.msg.real_short).on('click', delImage); + $('.close').unbind('click', evaluateCopyAll); + $('.close').on('click', evaluateCopyAll); + addItem(data.msg); + } + }, + error: function() { + $('.messages').append(buildMessage(false, '')); + }, + complete: function() { + $('#lutim-file-url').prop('disabled', ''); + $('.hidden-spin').css('display', 'none'); + $('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard); + $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard); + $('.modify-image').unbind('click', modifyImage); + $('.modify-image').on('click', modifyImage); + $('.copy-to-clipboard-link').unbind('click', clickOnCopyLink); + $('.copy-to-clipboard-link').on('click', clickOnCopyLink); + } + }); + } +} + +function fileUpload(file) { + var fd = new FormData(); + fd.append('file', file); + + fd.append('format', 'json'); + fd.append('first-view', ($('#first-view').prop('checked')) ? 1 : 0); + fd.append('crypt', ($('#crypt').prop('checked')) ? 1 : 0); + fd.append('delete-day', ($('#delete-day').val())); + + $('.messages').append([ + '
', cleanName(file.name), '
', + '
', + '
', + ' 0%', + '
', + '
', + '
' + ].join('')); + // Ajax Submit + $.ajax({ + url: '<%== url_for('/') %>', + type: 'POST', + dataType: 'json', + data: fd, + cache: false, + contentType: false, + processData: false, + forceSync: false, + xhr: function(){ + var xhrobj = $.ajaxSettings.xhr(); + if(xhrobj.upload){ + xhrobj.upload.addEventListener('progress', function(event) { + var percent = 0; + var position = event.loaded || event.position; + var total = event.total || e.totalSize; + if(event.lengthComputable){ + percent = Math.ceil(position / total * 100); + } + + var percentStr = ' '+percent+'%'; + $('#1').prop('aria-valuenow', percent); + $('#1').css('width', percent+'%'); + $('#1-text').html(percentStr); + }, false); + } + + return xhrobj; + }, + success: function (data, message, xhr){ + $('#1-div').remove(); + if ($('#copy-all').length === 0 && data.success) { + $('.messages').prepend([ + '' + ].join('')); + } + data.msg.filename = cleanName(data.msg.filename); + $('.messages').append(buildMessage(data.success, data.msg)); + if (data.success) { + $('.close').unbind('click', evaluateCopyAll); + $('.close').on('click', evaluateCopyAll); + addItem(data.msg); + } + }, + error: function (xhr, status, errMsg){ + $('.messages').append(buildMessage(false, '')); + }, + complete: function () { + $('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard); + $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard); + $('.modify-image').unbind('click', modifyImage); + $('.modify-image').on('click', modifyImage); + $('.copy-to-clipboard-link').unbind('click', clickOnCopyLink); + $('.copy-to-clipboard-link').on('click', clickOnCopyLink); + } + }); +} + +function initPaste() { + /* + actually FF and Chrome doesn't handle paste events the same way... + for ff we need to create a editable div and register an event to it. + When user paste, the image is "really" pasted in the div. Then, we need to iterate throught + the div childs to get images. Previsouly FF didn't have the paste event so it was esay to figure on wich browser we were. + But firefox now have a paste event so I test it... + + on Chrome the file object is directlyt in the clipboard. + */ + var b = 'FF'; + try { + //FF + var cbe = new ClipboardEvent('hop'); + } catch(hop) { + //under webkkit Clipboard doesn't have arguments... + b = 'WK' + } + if (b === 'FF') { + var pasteDiv = document.createElement('div'); + pasteDiv.addEventListener('paste', onPasteFF); + pasteDiv.setAttribute('class', 'pasteZone'); + pasteDiv.setAttribute('contenteditable', true); + + document.getElementsByTagName('body')[0].appendChild(pasteDiv); + pasteDiv.focus(); + + document.addEventListener('click', function(event) { + var t = $(event.target); + + switch (t[0].nodeName.toUpperCase()) { + case 'A': + case 'BUTTON': + case 'INPUT': + case 'SELECT': + case 'SPAN': + case 'LABEL': + break; + default: + if (t[0].parentNode.nodeName.toUpperCase() !== 'SELECT') { + pasteDiv.focus(); + } + } + }); + } else { + document.addEventListener('paste', onPaste); + } +} + +function waitforpastedata(elem, savedcontent) { + if (elem.childNodes && elem.childNodes.length > 0) { + processpaste(elem, savedcontent); + } else { + var that = { + e: elem, + s: savedcontent + }; + that.callself = function () { + waitforpastedata(that.e, that.s); + } + setTimeout(that.callself, 20); + } +} + +function processpaste(elem, savedcontent) { + var pasteZone = document.getElementsByClassName('pasteZone')[0]; + var f = new Image(); + + f.onload = function(){ + var canvas = document.createElement('canvas'); + canvas.width = f.width; + canvas.height = f.height; + + var ctx = canvas.getContext('2d'); + ctx.drawImage(f, 0, 0, canvas.width, canvas.height); + + canvas.toBlob(function(blob) { + var url = window.URL.createObjectURL(blob); + fileUpload(blob); + }); + } + + f.src = pasteZone.childNodes[0].src; + + pasteZone.innerHTML = ''; +} + +function onPasteFF(e) { + var pasteZone = document.getElementsByClassName('pasteZone')[0]; + waitforpastedata(pasteZone, 'savedcontent'); +} + +function onPaste(e) { + var items = e.clipboardData.items; + for(var i = 0; i < items.length; i++) { + var item = items[i]; + if (/image/.test(item.type)) { + var file = item.getAsFile(); + fileUpload(file); + } else { + //not image.. + } + } +}