Compare commits

...

3 commits

Author SHA1 Message Date
b487698693
Fix some issues with mail 2024-10-19 00:11:40 +05:00
304b9c3601
Enable openid connect for mastodon 2024-10-19 00:11:30 +05:00
4c696bdff2
Run peertube 2024-10-19 00:10:46 +05:00
14 changed files with 2289 additions and 158 deletions

View file

@ -5,3 +5,4 @@
postgresql_password: "{{ postgresql_users.comfycamp }}" postgresql_password: "{{ postgresql_users.comfycamp }}"
jwt_secret: "{{ comfycamp_jwt_secret }}" jwt_secret: "{{ comfycamp_jwt_secret }}"
secret_key_base: "{{ comfycamp_secret_key_base }}" secret_key_base: "{{ comfycamp_secret_key_base }}"
smtp_password: "{{ mail_users['comfycamp@comfycamp.space'] }}"

View file

@ -12,3 +12,5 @@
active_record_encryption_deterministic_key: "{{ mastodon.active_record_encryption_deterministic_key }}" active_record_encryption_deterministic_key: "{{ mastodon.active_record_encryption_deterministic_key }}"
active_record_encryption_key_derivation_salt: "{{ mastodon.active_record_encryption_key_derivation_salt }}" active_record_encryption_key_derivation_salt: "{{ mastodon.active_record_encryption_key_derivation_salt }}"
active_record_encryption_primary_key: "{{ mastodon.active_record_encryption_primary_key }}" active_record_encryption_primary_key: "{{ mastodon.active_record_encryption_primary_key }}"
oidc_client_id: "oD2Vg5shQju164gYmju8"
oidc_client_secret: "{{ mastodon.oidc_client_secret }}"

9
peertube.yml Normal file
View file

@ -0,0 +1,9 @@
---
- hosts: webservers
become: true
roles:
- name: peertube
secret: "{{ peertube.secret }}"
postgresql_password: "{{ postgresql_users.peertube }}"
smtp_password: "{{ mail_users['peertube@comfycamp.space'] }}"
s3_secret_key: "{{ peertube.s3_secret_key }}"

View file

@ -5,7 +5,7 @@
state: directory state: directory
owner: root owner: root
group: root group: root
mode: 1770 mode: "1700"
- name: Copy comfycamp config - name: Copy comfycamp config
become: true become: true
ansible.builtin.template: ansible.builtin.template:
@ -13,16 +13,14 @@
dest: /etc/comfycamp/.env dest: /etc/comfycamp/.env
owner: root owner: root
group: root group: root
mode: '0660' mode: "0600"
- name: Create comfycamp container - name: Create comfycamp container
become: true become: true
community.docker.docker_container: community.docker.docker_container:
name: comfycamp name: comfycamp
image: git.comfycamp.space/lumin/comfycamp:v1.1.7 image: git.comfycamp.space/lumin/comfycamp:v1.1.16
env_file: /etc/comfycamp/.env env_file: /etc/comfycamp/.env
networks: networks:
- name: postgresql - name: postgresql
- name: haproxy - name: haproxy
ports:
- 127.0.0.1:3006:4000
restart_policy: unless-stopped restart_policy: unless-stopped

View file

@ -2,9 +2,8 @@ PHX_HOST=comfycamp.space
DATABASE_URL=postgres://{{ postgresql_user }}:{{ postgresql_password }}@postgresql:5432/comfycamp DATABASE_URL=postgres://{{ postgresql_user }}:{{ postgresql_password }}@postgresql:5432/comfycamp
SECRET_KEY_BASE={{ secret_key_base }} SECRET_KEY_BASE={{ secret_key_base }}
SMTP_RELAY=comfycamp.space SMTP_RELAY=comfycamp.space
SMTP_USERNAME=admin@comfycamp.space SMTP_FROM=comfycamp@comfycamp.space
SMTP_USERNAME=comfycamp@comfycamp.space
SMTP_PASSWORD={{ smtp_password }} SMTP_PASSWORD={{ smtp_password }}
SMTP_SSL=true SMTP_PORT=587
SMTP_TLS=always
SMTP_PORT=465
JWT_SECRET={{ jwt_secret }} JWT_SECRET={{ jwt_secret }}

View file

@ -50,6 +50,9 @@ frontend www
acl host_s3 hdr(host) -i s3.comfycamp.space acl host_s3 hdr(host) -i s3.comfycamp.space
use_backend minio if host_s3 use_backend minio if host_s3
acl host_peertube hdr(host) -i v.comfycamp.space
use_backend peertube if host_peertube
acl host_comfycamp hdr(host) -i comfycamp.space acl host_comfycamp hdr(host) -i comfycamp.space
use_backend comfycamp if host_comfycamp use_backend comfycamp if host_comfycamp
@ -119,3 +122,8 @@ backend matrix
backend grafana backend grafana
mode http mode http
server grafana grafana:3000 server grafana grafana:3000
backend peertube
mode http
option forwardfor
server s1 peertube:9000

View file

@ -24,6 +24,7 @@ SMTP_PORT={{ smtp_port }}
SMTP_LOGIN={{ smtp_login }} SMTP_LOGIN={{ smtp_login }}
SMTP_PASSWORD={{ smtp_password }} SMTP_PASSWORD={{ smtp_password }}
SMTP_FROM_ADDRESS={{ smtp_from_address }} SMTP_FROM_ADDRESS={{ smtp_from_address }}
SMTP_TLS=true
S3_ENABLED=true S3_ENABLED=true
S3_ENDPOINT={{ s3_endpoint }} S3_ENDPOINT={{ s3_endpoint }}
@ -37,3 +38,13 @@ S3_HOSTNAME={{ s3_hostname }}
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY={{ active_record_encryption_deterministic_key }} ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY={{ active_record_encryption_deterministic_key }}
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT={{ active_record_encryption_key_derivation_salt }} ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT={{ active_record_encryption_key_derivation_salt }}
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY={{ active_record_encryption_primary_key }} ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY={{ active_record_encryption_primary_key }}
OIDC_ENABLED=true
OIDC_DISPLAY_NAME=comfycamp.space
OIDC_ISSUER=https://comfycamp.space
OIDC_DISCOVERY=true
OIDC_SCOPE=openid,profile,email
OIDC_UID_FIELD=preferred_username
OIDC_REDIRECT_URI=https://m.comfycamp.space/auth/auth/openid_connect/callback
OIDC_CLIENT_ID={{ oidc_client_id }}
OIDC_CLIENT_SECRET={{ oidc_client_secret }}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1 @@
save 60 1000

View file

@ -0,0 +1,3 @@
---
- import_tasks: redis.yml
- import_tasks: peertube.yml

View file

@ -0,0 +1,41 @@
---
- name: Create peertube config dir
become: true
ansible.builtin.file:
path: /etc/peertube
state: directory
mode: '1700'
owner: root
group: root
- name: Copy default config
become: true
ansible.builtin.copy:
src: default.yaml
dest: /etc/peertube/default.yaml
- name: Copy production config
become: true
ansible.builtin.template:
src: production.yaml.j2
dest: /etc/peertube/production.yaml
register: cfg
- name: Create peertube-data volume
become: true
community.docker.docker_volume:
name: peertube-data
- name: Run peertube container
become: true
community.docker.docker_container:
name: peertube
image: chocobozzz/peertube:v6.3.2-bookworm
networks:
- name: peertube
- name: haproxy
- name: postgresql
volumes:
- /mnt/hdd/peertube:/data
- /etc/peertube:/config
mounts:
- type: tmpfs
target: /data/tmp
tmpfs_size: "4G"
recreate: "{{ cfg.changed }}"

View file

@ -0,0 +1,34 @@
---
- name: Create peertube network
become: true
community.docker.docker_network:
name: peertube
- name: Create peertube-redis docker volume
become: true
community.docker.docker_volume:
name: peertube-redis
- name: Create /etc/redis/peertube dir
become: true
ansible.builtin.file:
path: /etc/redis/peertube
state: directory
mode: '1755'
owner: root
group: root
- name: Copy redis config
become: true
ansible.builtin.copy:
src: redis.conf
dest: /etc/redis/peertube/redis.conf
- name: Run peertube-redis container
become: true
community.docker.docker_container:
name: peertube-redis
image: redis:7.4-bookworm
command: ["redis-server", "/etc/redis/redis.conf"]
networks:
- name: peertube
volumes:
- peertube-redis:/data
- /etc/redis/peertube:/etc/redis:ro
restart_policy: unless-stopped

View file

@ -0,0 +1,967 @@
listen:
hostname: '0.0.0.0'
port: 9000
# Correspond to your reverse proxy server_name/listen configuration (i.e., your public PeerTube instance URL)
webserver:
https: true
hostname: v.comfycamp.space
port: 443
# Secrets you need to generate the first time you run PeerTube
secrets:
peertube: {{ secret }}
rates_limit:
api:
# 50 attempts in 10 seconds
window: 10 seconds
max: 50
login:
# 15 attempts in 5 min
window: 5 minutes
max: 15
signup:
# 2 attempts in 5 min (only succeeded attempts are taken into account)
window: 5 minutes
max: 2
ask_send_email:
# 3 attempts in 5 min
window: 5 minutes
max: 3
receive_client_log:
# 1 attempt every 2 seconds
window: 1 minute
max: 30
plugins:
# 500 attempts in 10 seconds (we also serve plugin static files)
window: 10 seconds
max: 500
well_known:
# 200 attempts in 10 seconds
window: 10 seconds
max: 200
feeds:
# 50 attempts in 10 seconds
window: 10 seconds
max: 50
activity_pub:
# 500 attempts in 10 seconds (we can have many AP requests)
window: 10 seconds
max: 500
client: # HTML files generated by PeerTube
# 500 attempts in 10 seconds (to not break crawlers)
window: 10 seconds
max: 500
download_generate_video: # A light FFmpeg process is used to generate videos (to merge audio and video streams for example)
# 5 attempts in 5 seconds
window: 5 seconds
max: 5
oauth2:
token_lifetime:
access_token: '1 day'
refresh_token: '2 weeks'
# Proxies to trust to get real client IP
# If you run PeerTube just behind a local proxy (nginx), keep 'loopback'
# If you run PeerTube behind a remote proxy, add the proxy IP address (or subnet)
trust_proxy:
- 'loopback'
- '172.24.0.0/16'
# Your database name will be database.name OR 'peertube'+database.suffix
database:
hostname: postgresql
port: 5432
ssl: false
name: peertube
username: peertube
password: {{ postgresql_password }}
pool:
max: 5
# Redis server for short time storage
redis:
hostname: peertube-redis
port: 6379
auth: null
db: 0
# SMTP server to send emails
smtp:
# smtp or sendmail
transport: smtp
hostname: comfycamp.space
port: 465
username: peertube@comfycamp.space
password: {{ smtp_password }}
tls: true
disable_starttls: true
from_address: 'peertube@comfycamp.space'
email:
body:
signature: 'PeerTube'
subject:
prefix: '[PeerTube]'
# Update default PeerTube values
# Set by API when the field is not provided and put as default value in client
defaults:
# Change default values when publishing a video (upload/import/go Live)
publish:
download_enabled: true
# enabled = 1, disabled = 2, requires_approval = 3
comments_policy: 1
# public = 1, unlisted = 2, private = 3, internal = 4
privacy: 1
# CC-BY = 1, CC-SA = 2, CC-ND = 3, CC-NC = 4, CC-NC-SA = 5, CC-NC-ND = 6, Public Domain = 7
# You can also choose a custom licence value added by a plugin
# No licence by default
licence: 1
p2p:
# Enable P2P by default in PeerTube client
# Can be enabled/disabled by anonymous users and logged in users
webapp:
enabled: true
# Enable P2P by default in PeerTube embed
# Can be enabled/disabled by URL option
embed:
enabled: true
# From the project root directory
storage:
tmp: '../data/tmp/' # Use to download data (imports etc), store uploaded files before and during processing...
tmp_persistent: '../data/tmp-persistent/' # As tmp but the directory is not cleaned up between PeerTube restarts
bin: '../data/bin/'
avatars: '../data/avatars/'
web_videos: '../data/web-videos/'
streaming_playlists: '../data/streaming-playlists/'
original_video_files: '../data/original-video-files/'
redundancy: '../data/redundancy/'
logs: '../data/logs/'
previews: '../data/previews/'
thumbnails: '../data/thumbnails/'
storyboards: '../data/storyboards/'
torrents: '../data/torrents/'
captions: '../data/captions/'
cache: '../data/cache/'
plugins: '../data/plugins/'
well_known: '../data/well-known/'
# Overridable client files in client/dist/assets/images:
# - logo.svg
# - favicon.png
# - default-playlist.jpg
# - default-avatar-account.png
# - default-avatar-video-channel.png
# - and icons/*.png (PWA)
# Could contain for example assets/images/favicon.png.
# If the file exists, peertube will serve it.
client_overrides: '../data/client-overrides/'
static_files:
# Require and check user authentication when accessing private files (internal/private video files)
private_files_require_auth: true
object_storage:
enabled: false
log:
level: warn # 'debug' | 'info' | 'warn' | 'error'
rotation:
enabled: true # Enabled by default, if disabled make sure that 'storage.logs' is pointing to a folder handled by logrotate
max_file_size: 12MB
max_files: 20
anonymize_ip: false
log_ping_requests: false
log_tracker_unknown_infohash: true
# If you have many concurrent requests, you can disable HTTP requests logging to reduce PeerTube CPU load
log_http_requests: false
prettify_sql: false
# Accept warn/error logs coming from the client
accept_client_log: true
# Support of Open Telemetry metrics and tracing
# For more information: https://docs.joinpeertube.org/maintain/observability
open_telemetry:
metrics:
enabled: false
# How often viewers send playback stats to server
playback_stats_interval: '15 seconds'
http_request_duration:
# You can disable HTTP request duration metric that can have a high tag cardinality
enabled: false
# Create a prometheus exporter server on this port so prometheus server can scrape PeerTube metrics
prometheus_exporter:
hostname: '127.0.0.1'
port: 9091
tracing:
# If tracing is enabled, you must provide --experimental-loader=@opentelemetry/instrumentation/hook.mjs flag to the node binary
enabled: false
# Send traces to a Jaeger compatible endpoint
jaeger_exporter:
endpoint: ''
trending:
videos:
interval_days: 7 # Compute trending videos for the last x days for 'most-viewed' algorithm
algorithms:
enabled:
- 'hot' # Adaptation of Reddit's 'Hot' algorithm
- 'most-viewed' # Number of views in the last x days
- 'most-liked' # Global views since the upload of the video
default: 'most-viewed'
# Cache remote videos on your server, to help other instances to broadcast the video
# You can define multiple caches using different sizes/strategies
# Once you have defined your strategies, choose which instances you want to cache in admin -> manage follows -> following
redundancy:
videos:
check_interval: '1 hour' # How often you want to check new videos to cache
strategies: # Just uncomment strategies you want
- size: '50GB'
# Minimum time the video must remain in the cache. Only accept values > 10 hours (to not overload remote instances)
min_lifetime: '72 hours'
strategy: 'most-views' # Cache videos that have the most views
# - size: '10GB'
# # Minimum time the video must remain in the cache. Only accept values > 10 hours (to not overload remote instances)
# min_lifetime: '48 hours'
# strategy: 'trending' # Cache trending videos
# - size: '10GB'
# # Minimum time the video must remain in the cache. Only accept values > 10 hours (to not overload remote instances)
# min_lifetime: '48 hours'
# strategy: 'recently-added' # Cache recently added videos
# min_views: 10 # Having at least x views
# Other instances that duplicate your content
remote_redundancy:
videos:
# 'nobody': Do not accept remote redundancies
# 'anybody': Accept remote redundancies from anybody
# 'followings': Accept redundancies from instance followings
accept_from: 'anybody'
csp:
enabled: false
report_only: true # CSP directives are still being tested, so disable the report only mode at your own risk!
report_uri:
security:
# Set the X-Frame-Options header to help to mitigate clickjacking attacks
frameguard:
enabled: true
# Set x-powered-by HTTP header to "PeerTube"
# Can help remote software to know this is a PeerTube instance
powered_by_header:
enabled: true
tracker:
# If you disable the tracker, you disable the P2P on your PeerTube instance
enabled: true
# Only handle requests on your videos
# If you set this to false it means you have a public tracker
# Then, it is possible that clients overload your instance with external torrents
private: true
# Reject peers that do a lot of announces (could improve privacy of TCP/UDP peers)
reject_too_many_announces: false
history:
videos:
# If you want to limit users videos history
# -1 means there is no limitations
# Other values could be '6 months' or '30 days' etc (PeerTube will periodically delete old entries from database)
max_age: -1
views:
videos:
# PeerTube creates a database entry every hour for each video to track views over a period of time
# This is used in particular by the Trending page
# PeerTube could remove old remote video views if you want to reduce your database size (video view counter will not be altered)
# -1 means no cleanup
# Other values could be '6 months' or '30 days' etc (PeerTube will periodically delete old entries from database)
remote:
max_age: '30 days'
# PeerTube buffers local video views before updating and federating the video
local_buffer_update_interval: '30 minutes'
# How long does it take to count again a view from the same user
view_expiration: '1 hour'
# Minimum amount of time the viewer has to watch the video before PeerTube adds a view
count_view_after: '10 seconds'
# Player can send a session id string to track the user
# Since this can be spoofed by users to create fake views, you have the option to disable this feature
# If disabled, PeerTube will use the IP address to track the same user (default behavior before PeerTube 6.1)
trust_viewer_session_id: true
# How often the web browser sends "is watching" information to the server
# Increase the value or set null to disable it if you plan to have many viewers
watching_interval:
# Non logged-in viewers
anonymous: '5 seconds'
# Logged-in users of your instance
# Unlike anonymous viewers, this endpoint is also used to store the "last watched video timecode" for your users
# Increasing this value reduces the accuracy of the video resume
users: '5 seconds'
# Used to get country location of views of local videos
geo_ip:
enabled: true
country:
database_url: 'https://dbip.mirror.framasoft.org/files/dbip-country-lite-latest.mmdb'
city:
database_url: 'https://dbip.mirror.framasoft.org/files/dbip-city-lite-latest.mmdb'
plugins:
# The website PeerTube will ask for available PeerTube plugins and themes
# This is an unmoderated plugin index, so only install plugins/themes you trust
index:
enabled: true
check_latest_versions_interval: '4 hours' # How often you want to check new plugins/themes versions
url: 'https://packages.joinpeertube.org'
federation:
# Enable ActivityPub endpoints (inbox/outbox)
enabled: true
# Prevent SSRF requests (requests to your internal network for example) by checking the request IP address
# More information about SSRF: https://portswigger.net/web-security/ssrf
prevent_ssrf: true
# Some federated software such as Mastodon may require an HTTP signature to access content
sign_federated_fetches: true
videos:
federate_unlisted: false
# Add a weekly job that cleans up remote AP interactions on local videos (shares, rates and comments)
# It removes objects that do not exist anymore, and potentially fix their URLs
cleanup_remote_interactions: true
peertube:
check_latest_version:
# Check and notify admins of new PeerTube versions
enabled: true
# You can use a custom URL if your want, that respect the format behind https://joinpeertube.org/api/v1/versions.json
url: 'https://joinpeertube.org/api/v1/versions.json'
webadmin:
configuration:
edition:
# Set this to false if you don't want to allow config edition in the web interface by instance admins
allowed: true
# XML, Atom or JSON feeds
feeds:
videos:
# Default number of videos displayed in feeds
count: 20
comments:
# Default number of comments displayed in feeds
count: 20
remote_runners:
# Consider jobs that are processed by a remote runner as stalled after this period of time without any update
stalled_jobs:
live: '30 seconds'
vod: '2 minutes'
thumbnails:
# When automatically generating a thumbnail from the video
generation_from_video:
# How many frames to analyze at the middle of the video to select the most appropriate one
# Increasing this value will increase CPU and memory usage when generating the thumbnail, especially for high video resolution
# Minimum value is 2
frames_to_analyze: 50
# Only two sizes are currently supported for now (not less, not more)
# 1 size for the thumbnail (displayed in video miniatures)
# 1 size for the preview (displayed in the video player)
sizes:
-
width: 280
height: 157
-
width: 850
height: 480
stats:
# Display registration requests stats (average response time, total requests...)
registration_requests:
enabled: true
# Display abuses stats (average response time, total abuses...)
abuses:
enabled: true
total_moderators:
enabled: true
total_admins:
enabled: true
###############################################################################
#
# From this point, almost all following keys can be overridden by the web interface
# (local-production.json file). If you need to change some values, prefer to
# use the web interface because the configuration will be automatically
# reloaded without any need to restart PeerTube
#
# /!\ If you already have a local-production.json file, modification of some of
# the following keys will have no effect /!\
#
###############################################################################
cache:
previews:
size: 500 # Max number of previews you want to cache
captions:
size: 500 # Max number of video captions/subtitles you want to cache
torrents:
size: 500 # Max number of video torrents you want to cache
storyboards:
size: 500 # Max number of video storyboards you want to cache
admin:
# Used to generate the root user at first startup
# And to receive emails from the contact form
email: 'admin@comfycamp.space'
contact_form:
enabled: true
signup:
enabled: false
limit: 10 # When the limit is reached, registrations are disabled. -1 == unlimited
minimum_age: 16 # Used to configure the signup form
# Users fill a form to register so moderators can accept/reject the registration
requires_approval: true
requires_email_verification: false
filters:
cidr: # You can specify CIDR ranges to whitelist (empty = no filtering) or blacklist
whitelist: []
blacklist: []
user:
history:
videos:
# Enable or disable video history by default for new users.
enabled: true
# Default value of maximum video bytes the user can upload
# Does not take into account transcoded files or account export archives (that can include user uploaded files)
# Byte format is supported ("1GB" etc)
# -1 == unlimited
video_quota: -1
video_quota_daily: -1
default_channel_name: 'Main $1 channel' # The placeholder $1 is used to represent the user's username
video_channels:
max_per_user: 20 # Allows each user to create up to 20 video channels.
# If enabled, the video will be transcoded to mp4 (x264) with `faststart` flag.
# In addition, if some resolutions are enabled the mp4 video file will be transcoded to these new resolutions.
# Please, do not disable transcoding since many uploaded videos will not work.
transcoding:
enabled: true
original_file:
# If false the uploaded file is deleted after transcoding.
# If true it is not deleted but moved in a dedicated folder or object storage.
keep: true
# Allow your users to upload .mkv, .mov, .avi, .wmv, .flv, .f4v, .3g2, .3gp, .mts, m2ts, .mxf, .nut videos
allow_additional_extensions: true
# If a user uploads an audio file, PeerTube will create a video by merging the preview file and the audio file
allow_audio_files: true
# Enable remote runners to transcode your videos
# If enabled, your instance won't transcode the videos itself
# At least 1 remote runner must be configured to transcode your videos
remote_runners:
enabled: false
# Amount of threads used by ffmpeg for 1 local transcoding job
threads: 12
# Amount of local transcoding jobs to execute in parallel
concurrency: 1
# Choose the local transcoding profile
# New profiles can be added by plugins
# Available in core PeerTube: 'default'
profile: 'default'
resolutions: # Only created if the original video has a higher resolution, uses more storage!
0p: false # audio-only (creates mp4 without video stream)
144p: false
240p: false
360p: false
480p: true
720p: false
1080p: true
1440p: false
2160p: false
# Transcode and keep original resolution, even if it's above your maximum enabled resolution
always_transcode_original_resolution: true
fps:
# Cap transcoded video FPS
# Max resolution file still keeps the original FPS
max: 60
# Generate videos in a web compatible format
# If you also enabled the hls format, it will multiply videos storage by 2
# If disabled, breaks federation with PeerTube instances < 2.1
web_videos:
enabled: false
# /!\ Requires ffmpeg >= 4.1
# Generate HLS playlists and fragmented MP4 files. Better playback than with Web Videos:
# * Resolution change is smoother
# * Faster playback in particular with long videos
# * More stable playback (less bugs/infinite loading)
# If you also enabled the web videos format, it will multiply videos storage by 2
hls:
enabled: true
# Store the audio stream in a separate file from the video
# This option adds the ability for the HLS player to propose the "Audio only" quality to users
# It also saves disk space by not duplicating the audio stream in each resolution file
# /!\ If enabled, remote PeerTube instances < 6.3.0 won't be able to play these videos
split_audio_and_video: true
live:
enabled: false
# Limit lives duration
# -1 == unlimited
max_duration: -1 # For example: '5 hours'
# Limit max number of live videos created on your instance
# -1 == unlimited
max_instance_lives: 20
# Limit max number of live videos created by a user on your instance
# -1 == unlimited
max_user_lives: 3
# Allow your users to save a replay of their live
# PeerTube will transcode segments in a video file
# If the user daily/total quota is reached, PeerTube will stop the live
# /!\ transcoding.enabled (and not live.transcoding.enabled) has to be true to create a replay
allow_replay: true
# Allow your users to change latency settings (small latency/default/high latency)
# Small latency live streams cannot use P2P
# High latency live streams can increase P2P ratio
latency_setting:
enabled: true
# Your firewall should accept traffic from this port in TCP if you enable live
rtmp:
enabled: true
# Listening hostname/port for RTMP server
# '::' to listen on IPv6 and IPv4, '0.0.0.0' to listen on IPv4
# Use null to automatically listen on '::' if IPv6 is available, or '0.0.0.0' otherwise
hostname: null
port: 1935
# Public hostname of your RTMP server
# Use null to use the same value than `webserver.hostname`
public_hostname: null
rtmps:
enabled: false
# Listening hostname/port for RTMPS server
# '::' to listen on IPv6 and IPv4, '0.0.0.0' to listen on IPv4
# Use null to automatically listen on '::' if IPv6 is available, or '0.0.0.0' otherwise
hostname: null
port: 1936
# Absolute paths
key_file: ''
cert_file: ''
# Public hostname of your RTMPS server
# Use null to use the same value than `webserver.hostname`
public_hostname: null
# Allow to transcode the live streaming in multiple live resolutions
transcoding:
enabled: true
# Enable remote runners to transcode your videos
# If enabled, your instance won't transcode the videos itself
# At least 1 remote runner must be configured to transcode your videos
remote_runners:
enabled: false
# Amount of threads used by ffmpeg per live when using local transcoding
threads: 2
# Choose the local transcoding profile
# New profiles can be added by plugins
# Available in core PeerTube: 'default'
profile: 'default'
resolutions:
0p: false # Audio only
144p: false
240p: false
360p: false
480p: false
720p: false
1080p: false
1440p: false
2160p: false
# Also transcode original resolution, even if it's above your maximum enabled resolution
always_transcode_original_resolution: true
fps:
# Cap transcoded live FPS
# Max resolution stream still keeps the original FPS
max: 60
video_studio:
# Enable video edition by users (cut, add intro/outro, add watermark etc)
# If enabled, users can create transcoding tasks as they wish
enabled: true
# Enable remote runners to transcode studio tasks
# If enabled, your instance won't transcode the videos itself
# At least 1 remote runner must be configured to transcode your videos
remote_runners:
enabled: false
video_transcription:
# Enable automatic transcription of videos
enabled: false
# Choose engine for local transcription
# Supported: 'openai-whisper' or 'whisper-ctranslate2'
engine: 'whisper-ctranslate2'
# You can set a custom engine path for local transcription
# If not provided, PeerTube will try to automatically install it in the PeerTube bin directory
engine_path: null
# Choose engine model for local transcription
# Available for 'openai-whisper' and 'whisper-ctranslate2': 'tiny', 'base', 'small', 'medium', 'large-v2' or 'large-v3'
model: 'small'
# Or specify the model path:
# * PyTorch model file path for 'openai-whisper'
# * CTranslate2 Whisper model directory path for 'whisper-ctranslate2'
# If not provided, PeerTube will automatically download the model
model_path: null
# Enable remote runners to transcribe videos
# If enabled, your instance won't transcribe the videos itself
# At least 1 remote runner must be configured to transcribe your videos
remote_runners:
enabled: false
video_file:
update:
# Add ability for users to replace the video file of an existing video
enabled: false
import:
# Add ability for your users to import remote videos (from YouTube, torrent...)
videos:
# Amount of import jobs to execute in parallel
concurrency: 1
# Set a custom video import timeout to not block import queue
timeout: '2 hours'
# Classic HTTP or all sites supported by youtube-dl https://rg3.github.io/youtube-dl/supportedsites.html
http:
# We recommend to use a HTTP proxy if you enable HTTP import to prevent private URL access from this server
# See https://docs.joinpeertube.org/maintain/configuration#security for more information
enabled: false
youtube_dl_release:
# Direct download URL to youtube-dl binary
# Github releases API is also supported
#
# Platform-independent examples:
# * https://api.github.com/repos/ytdl-org/youtube-dl/releases
# * https://api.github.com/repos/yt-dlp/yt-dlp/releases
# * https://yt-dl.org/downloads/latest/youtube-dl
#
# You can also use a youtube-dl standalone binary (requires python_path: null)
# GNU/Linux binaries with support for impersonating browser requests (required by some platforms such as Vimeo) examples:
# * https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux (x64)
# * https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_armv7l (ARMv7)
# * https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_armv7l (ARMv8/AArch64/ARM64)
url: 'https://api.github.com/repos/yt-dlp/yt-dlp/releases'
# Release binary name: 'yt-dlp' or 'youtube-dl'
name: 'yt-dlp'
# Path to the python binary to execute for youtube-dl or yt-dlp
# Set to null if you use a youtube-dl executable
python_path: '/usr/bin/python3'
# IPv6 is very strongly rate-limited on most sites supported by youtube-dl
force_ipv4: false
# By default PeerTube uses HTTP_PROXY and HTTPS_PROXY environment variables
# But you can specify custom proxies for youtube-dl because remote websites (like YouTube) may block your server IP address
# PeerTube will randomly select a proxy from the following list
# You may need to use a standalone youtube-dl binary (see `url` key comment above) to use this feature
proxies:
# - "https://username:password@example.com:8888"
# Magnet URI or torrent file (use classic TCP/UDP/WebSeed to download the file)
torrent:
# We recommend to only enable magnet URI/torrent import if you trust your users
# See https://docs.joinpeertube.org/maintain/configuration#security for more information
enabled: false
# Add ability for your users to synchronize their channels with external channels, playlists, etc
video_channel_synchronization:
enabled: false
max_per_user: 10
check_interval: 1 hour
# Number of latest published videos to check and to potentially import when syncing a channel
videos_limit_per_synchronization: 10
# Max number of videos to import when the user asks for full sync
full_sync_videos_limit: 1000
users:
# Video quota is checked on import so the user doesn't upload a too big archive file
# Video quota (daily quota is not taken into account) is also checked for each video when PeerTube is processing the import
enabled: true
export:
users:
# Allow users to export their PeerTube data in a .zip for backup or re-import
# Only one export at a time is allowed per user
enabled: true
# Max size of the current user quota to accept or not the export
# Goal of this setting is to not store too big archive file on your server disk
max_user_video_quota: 10GB
# How long PeerTube should keep the user export
export_expiration: '2 days'
auto_blacklist:
# New videos automatically blacklisted so moderators can review before publishing
videos:
of_users:
enabled: false
# Instance settings
instance:
name: 'PeerTube'
short_description: 'PeerTube, an ActivityPub-federated video streaming platform using P2P directly in your web browser.'
description: 'Welcome to this PeerTube instance!' # Support markdown
terms: 'No terms for now.' # Support markdown
code_of_conduct: '' # Supports markdown
# Who moderates the instance? What is the policy regarding NSFW videos? Political videos? etc
moderation_information: '' # Supports markdown
# Why did you create this instance?
creation_reason: '' # Supports Markdown
# Who is behind the instance? A single person? A non profit?
administrator: '' # Supports Markdown
# How long do you plan to maintain this instance?
maintenance_lifetime: '' # Supports Markdown
# How will you pay the PeerTube instance server? With your own funds? With users donations? Advertising?
business_model: '' # Supports Markdown
# If you want to explain on what type of hardware your PeerTube instance runs
# Example: '2 vCore, 2GB RAM...'
hardware_information: '' # Supports Markdown
# Describe the languages spoken on your instance, to interact with your users for example
# Uncomment or add the languages you want
# List of supported languages: https://peertube.cpy.re/api/v1/videos/languages
# PeerTube plugins can add additional languages to the official list of supported languages
languages:
- ru
- en
# Describe the main categories of your instance (to explain for example that your instance is dedicated to music, gaming, etc.)
# Uncomment categories you want
# List of supported categories: https://peertube.cpy.re/api/v1/videos/categories
# PeerTube plugins can add additional categories to the official list of supported categories
categories:
# - 1 # Music
# - 2 # Films
# - 3 # Vehicles
# - 4 # Art
# - 5 # Sports
# - 6 # Travels
# - 7 # Gaming
# - 8 # People
# - 9 # Comedy
# - 10 # Entertainment
# - 11 # News & Politics
# - 12 # How To
# - 13 # Education
# - 14 # Activism
# - 15 # Science & Technology
# - 16 # Animals
# - 17 # Kids
# - 18 # Food
default_client_route: '/videos/trending'
# Whether or not the instance is dedicated to NSFW content
# Enabling it will allow other administrators to know that you are mainly federating sensitive content
# Moreover, the NSFW checkbox on video upload will be automatically checked by default
is_nsfw: false
# By default, `do_not_list` or `blur` or `display` NSFW videos
# Could be overridden per user with a setting
default_nsfw_policy: 'do_not_list'
customizations:
javascript: '' # Directly your JavaScript code (without <script> tags). Will be eval at runtime
css: '' # Directly your CSS code (without <style> tags). Will be injected at runtime
# Robot.txt rules. To disallow robots to crawl your instance and disallow indexation of your site, add `/` to `Disallow:`
robots: |
User-agent: *
Disallow:
# /.well-known/security.txt rules. This endpoint is cached, so you may have to wait a few hours before viewing your changes
# To discourage researchers from testing your instance and disable security.txt integration, set this to an empty string
securitytxt: |
Contact: https://github.com/Chocobozzz/PeerTube/blob/develop/SECURITY.md
Expires: 2025-12-31T11:00:00.000Z'
services:
# Cards configuration to format video in Twitter/X
# All other social media (Facebook, Mastodon, etc.) are supported out of the box
twitter:
# Indicates the Twitter/X account for the website or platform where the content was published
# This is just an information injected in HTML that is required by Twitter/X
username: '@Chocobozzz'
followers:
instance:
# Allow or not other instances to follow yours
enabled: true
# Whether or not an administrator must manually validate a new follower
manual_approval: false
followings:
instance:
# If you want to automatically follow back new instance followers
# If this option is enabled, use the mute feature instead of deleting followings
# /!\ Don't enable this if you don't have a reactive moderation team /!\
auto_follow_back:
enabled: false
# If you want to automatically follow instances of the public index
# If this option is enabled, use the mute feature instead of deleting followings
# /!\ Don't enable this if you don't have a reactive moderation team /!\
auto_follow_index:
enabled: false
# Host your own using https://framagit.org/framasoft/peertube/instances-peertube#peertube-auto-follow
index_url: ''
theme:
default: 'default'
broadcast_message:
enabled: false
message: '' # Support markdown
level: 'info' # 'info' | 'warning' | 'error'
dismissable: false
search:
# Add ability to fetch remote videos/actors by their URI, that may not be federated with your instance
# If enabled, the associated group will be able to "escape" from the instance follows
# That means they will be able to follow channels, watch videos, list videos of non followed instances
remote_uri:
users: true
anonymous: false
# Use a third party index instead of your local index, only for search results
# Useful to discover content outside of your instance
# If you enable search_index, you must enable remote_uri search for users
# If you do not enable remote_uri search for anonymous user, your instance will redirect the user on the origin instance
# instead of loading the video locally
search_index:
enabled: false
# URL of the search index, that should use the same search API and routes
# than PeerTube: https://docs.joinpeertube.org/api-rest-reference.html
# You should deploy your own with https://framagit.org/framasoft/peertube/search-index,
# and can use https://search.joinpeertube.org/ for tests, but keep in mind the latter is an unmoderated search index
url: ''
# You can disable local search in the client, so users only use the search index
disable_local_search: false
# If you did not disable local search in the client, you can decide to use the search index by default
is_default_search: false
# PeerTube client/interface configuration
client:
videos:
miniature:
# By default PeerTube client displays author username
prefer_author_display_name: false
display_author_avatar: false
resumable_upload:
# Max size of upload chunks, e.g. '90MB'
# If null, it will be calculated based on network speed
max_chunk_size: null
menu:
login:
# If you enable only one external auth plugin
# You can automatically redirect your users on this external platform when they click on the login button
redirect_on_single_external_auth: false
storyboards:
# Generate storyboards of local videos using ffmpeg so users can see the video preview in the player while scrubbing the video
enabled: true

View file

@ -1,150 +1,165 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
66356362386334356632613431666630353533633061616161376239393965656136653231393835 64303163646665613436653936333936333930323961663039363765386536396433613963663364
6561333637366330613438643864353639643166316438340a623332346636663334373637646261 6333336135623536303462333733353339646530633763310a303933303933653233393065666336
37326261636136386434656637663032623838343962656530646535633836383932393666396138 30376533343264646362646139356430633063633231316433653463393866623965643336353932
3837343636356130610a363262363739336364363765636562303763373362326530396138353438 3739666463323464350a613837663136333932306231636535356537643634336466613764336633
34313431303461333633353566393335353566636135616365386130646530653263626438303631 61303065333430643461386434333663663832666130656632303361306662336562316265656332
30393561376463316566636235383433626131396136623730393366613166366364373665363438 32353738313761373034623766396235306434653133323664363665333232633238333765343039
66313130323834613435643735633766353031303632656237616165353139326137343730373165 32373135343065363563366138376265386562333361393738663261633534396531313432363837
38393537363139326163633261656538346363323530636130343138336234303532306534306533 38623935663937353739383533353432363031313236643830356232383931376363633864363930
34336434303361336238646630636130333164353039306338303461386432363832633365623261 39313939366435643836363636383039353561626335386266353239376264616462646264383334
36306264623066393564333163666432346230336334353866356434626335316562626538356531 66393762373564336534353963366234336263383532343038323032653234633636663632383061
33623434353963366566373436373034626132383562346634393062333361363431613333613764 35333335633466653231343737653333393539346664613561396161363061666231346134663763
35383739376234646661373130323338306235666232653838323438323632663162383961376161 66373465616164643135343334373465313465363565303165633635323035373165336435383531
62623666373365396630666435323736393531363434626362613139393834386339653536353438 33626431353430393930303339613035663836323735313733663338663734343966643636353932
38613135306165613932353635363666653035303330623565316430653237656336343039613066 64663964366433393232353031353635333263613738363536383534363637626639383035313231
36656562313634343533613235393237306533326262643931646264316365373439386339653731 63306234313735636163306638656535653234396463303865653663306362366636653536663065
34363037656438373335383935316135303033303633383632633532616435323966653233363037 38616535383331366565316163643237653166643539393931396363363836613766646161353431
65313231653231306366376333613035373138303866303132366539393762366662666537316135 31663630373236376537333766346263646231363330653762383533303834336436626165333361
38623037343534323564333063386336653630363137663561643961636464626330323334383035 35626562663666393462346265666164343064343731623238383534636562363732373866326138
65646635336563666432346530613930343935353735366338366538376138623836663062306561 64373439643236323265386533333331663936646463373131643737666531336165366366656163
30393437346535643139616336366464396439376131333733393763636166313665343763626162 31383231376130636231353062613132356638393163356533306236393461643161343136353734
62633135626333386265346662333137393561303534376332643338323864626430356562363831 35616163303433663036393534616234373038653235663836343731373661656366386239306534
31623032306537623136396162343534636565623632336636303930303532336439383731336230 63353039356561636535653335363965623165393436363639313238626335373461303164306262
32646166383764313535653336363130633035643738346137316261633366613437623864656463 37306365623033663865363332613030313837396434363963306231616231663032633834343532
31303939376266613963633263323733333263376161646332396163346537633764646437313462 38626435396231636433626533633662633035626562313762333131656439616138366161373265
65396437633333336466366266616161373934393439353537626531303863613131316163316365 65313532343065333662373665653638646334383666646539613830376664306263633930636463
63623534313466396461386666663336663034343535303063386561323231623832376435643532 39353135366434653535393961656466626234616465653336663130373930303134333134393339
31303463356535356434613736323766633264383466643736333433663832336264373864343734 64653162343063363530323038666361376439626437313431323938643161643763663232666230
65343734393633393236303731383438643230633162303134333335643331663966343030386633 66363662323931363762326539623566306234366238396261393166643335346436653065396138
61623233323033656466653266656530633438306335303139306565356361613633613864313735 32353435346665393966623862366237333435636461343765323436393961313634666432373436
37323635643566383238616338656338616135383162616662643831656239393633643736373561 35643735653531666664303833643531353838613430363239396337396235643134356535396466
34323562353737326334373762376433613639323033303565306564643163366163646336656163 61356663383165396463393663373463343466363934653836343330376536333261356138636535
61636530393661643139633239306339373335323464366433373038313135613034386635613261 64336331396234313937666235316133336462633936303235396234383638656466346135353634
30353663313036663937646232303761623333323063346334616464316664323038653130653238 61333464393364366666316134653066373231343133616435663239323561363237336634356532
30386235336433353166326137323530306564343366616438636237646535666130323138363438 39663839333561633131316238653035343363646236343137353965383637623261323338666632
64623562623433303030386133396366666264366265303833356166303564343463396331366631 30323431333038303635613965316162333332626661623231396634626665316335653265336130
33326530646133363435663136316361313964323235663364393566656632353236393362616134 37623235343165373939643731376333306237343034313335323235623436396233636331383037
34376666376164333633383563366133356164393833373431303532653965303061353362306664 64376261313530326163396261336539333833633138623331316637343637653262313833643266
62366335386364316434356136313930393764303637633463303762343732363961633937356130 65353530373832366430333631386166336432666236333363373133326237383238373065373239
61646138316434653837653031626135316539303663323238323935383739336663636664623739 32656637323865303539366463386435366239633664656637316562643334613139393131643838
33366336636530356235643665336265323564343339346634343038353036303636653164643366 31656662643263363665613664636663396534353966313536366361363936346536616365623639
33373161613865336533336138653263613734633431393063336634663931613733626135346133 63636635346134383032376139313131643535646264666435663931653866363235656438613933
32303961656630333934383766613136333130663938323832313532653039346131326630316231 32313764363332633038363166633731633130656664656135353666333266336639346565396366
38653664626530346136336166326562653466323137376162323766393761623338306437396664 34313631313832323733336438643433393934313335383266613033663136333363613362646535
38623964323739646639656164636366303864663937303666646465393434653930626632383565 62316630393438626431623939343463326333373333363337396235343031316461333335393962
37336430376334333934613831353931323737393838613762393463646533353939313439346464 37646633373830383566623539333962303961306263623361653738383533306262366135323962
62383163656465663732626337356233373566383031376435356333346237643261346563383732 66313761356463636435363466343966326634373364646432306330343161336463393733623164
38636536393336383237666139616436373265346338376562613134653737646262393637346262 65373236633237303037633839363662366138306163343666373938653138653431613166653366
34326334366532313837613833313235353731396333616538643233656533663666663963633963 63356664363866643731333333326537326566303864363533393239396165383938306432303865
63303133636331393463646235396664373930396266356464653734653431363031393839323965 66383662363936323462656330396631333531646139343938376331613630373235336465353065
30623661626334343066363831326536326537383330333436616263326430313632646633336632 65343832343135393033366133643438653762343736393037643531613430623737313438356535
38353131356236333864383835356465323731613932393866353261363265333662663438323931 36303838616635343833643165346464613564313131643863643835343230323136383732343665
35316332363762376565343266313031653263316566366335383766653161353461623236343563 36643966383331633739393364653936613138386331623161306564333138303266636166643030
62616233393237353130653861333334323730613562393436343834343330646462616330383963 32353634316333316661656231323231383430326134623866313639663763333665396166376365
34393366613430633263396265653231323537363066656533623033313037346633633730633033 35383336613830383963633264333633356663633265663962363334333636626438653962386363
35373763363332343333316163376335383434363932623964313663633032373661653630306135 65663036376439663337316266343664643430373466626332626263353533653330303135646130
35616264393338376166646634626439633663333939633737333264643764613635646537366561 36613333373865353038386238393036623866396132666265336465393463653737386138623166
31653738623561396539313434643435613166626638653365656364333536623130653734613164 38303261393739373931343432363033306436386531313166376630366163376665343265653735
35656566326437306162376364343732343630333737623133316439306335336261366366633335 64643132393962646332316330336434383532653435393064343038663036373932643839663535
36306437303763313265396231376231633464366263643434303030323437396137643435613930 61363735633432626535616237633261373663663365326461656131346239316463306466636665
65653839663663353466643233313563366162643162386130366338326163373637303533366361 34316330613866626138343436366530616564663737303632343738626135616533393139663335
63316330623664626430653061656238623537633464366363363130376134376365616432623462 30663362313130346438356533373834666331303762653732626465643436346336306635323230
66323265316265343166376564306665633336613163616262333230356535383064366262663937 64336664343333396636363935393536613861666366656632373336373332313861656665353362
35353864653334353631616464363732316435366665323365363362313939633966653237383563 66616134663565626338353836356432646234306531386138633833366630313834333265666538
61393262653430396461323537386266656534326437373665633233306230316664363332636562 38306338663765346561366539666537626332666666623964643831363034643864356635396366
33336661343733343365363262376261633739613033396135396337666536396538653139626435 39666639393735366464333361643966313962316638313235306563366562323066346634343235
39396135643739633563383932393066656637666362363233353132643761343239306363616530 62626361613533343639343764663836376439343633356266626464636539643431386265623634
38373062393632313439353666643030373538653836336261376161306434623134353632646136 36383735636434316138323161373533363630356433653230646565333036633966326235636561
39346339616131343839616139626364313532626639613434646165656131633138346461393664 64356563313263343766386638613530376562653233343432643238323838336234636533373534
66383839396561396235646564613632643035383934323265653033323336366530353931306538 66376537623139613265396663643366386134646339656465663439636331303633396639313139
31373330613439303535663334303531623264663130633264333530386534356431373530633639 38366263353732323835613964623538626162383838326635366263653032393366663738376165
66363433353864653836646137626533343861313365353766316437623438353338316231373665 36353366643731656364333739663765363362383133333532316164353837616263666338343665
66353732646630366230373832643932323762386164643338306239396239356336663261643638 39313034643236653230643430633065653132383130373437643733653164353864663937353765
61356665353864396264643463666564633061383034663662663230363763356436366264633161 32623962313237383233613331623261396466353038313365383465646463313138313735626661
64633964323531613738386464633936316136613630363464383866333135373562636131313235 30323461326263353532393066636231623631333537653561306434653061303536386533303431
30306430636665626639336365363236623865313836393734373066313138623036663839316433 34373761666562396332623763626634643563306363623362393031383363383237353032653038
39613939626435393439663930356234303830303231346666396362343032666431386665303662 36313338366332303962333434616163363230343039353036393263653439336664356364303761
65303361363636323832633063393662353934356563313935383534653433363532653163336261 36663638303938653236323739326636303466376438623437303334353666646461666536363338
31373465346237646433656531353964323534376135383861346635373134616434303838376463 36373831663732616634363738386532653931626239663838323534383961333262326462313930
30623637333831613131393736643061323330386262633036333633343363636362326161316633 66356637633338613932626463613762343634633934373136346461666533643334306237626236
33326631626638613464626534386264306439343162343436323537656332303837383964623566 36643735646465623464303262643065313162343065386634353064386135366233666563363963
38323966653361623837333361353164633363356130636262373266343139336163616566626538 31376136633938316361346332376632313132373235656365643664306361653937653033613164
65383461613965373433656362353865326434323166363935653966313631626639323433303639 39363765386335633561643632663339396565633936663266333764633861373865646431323338
34303631376662336336343161323432343864336533326637386265653138613661393636613234 31666236393961366138613238613537656135323965353033333337343836663036613338613862
36666136323034346339363031336635633164303231353465373964396138366562633261663661 39613537353833306233326664336232373763346566313134643464376564633766366130633139
38653034616237623332386239653333353164656166303337663261616333343166356462646238 31373232646565363636636137336464326431316134366330326432396637383230343865306239
39333334366661303133656562373531656165316464666634626466623736336335396432363066 35343766316338363166663731643166383766346239313736666237623635613761643664343733
33363762346233616335373663363931383962343135313834343432353930626234666465373666 62366137316539383239666535626431326261303565663061663666633838303139623832333632
65343230666532633561306561306234616161303030343236333066656630363233356538386233 65346235653236623131373463626132316535383330343135323563373633316432353339363931
62303932336162626362343938653131633236363535663735663336653664326234313061643361 32353166366530306133356362663661316565396236303639306432636464623237383664326631
61333561346661623463656338363032356138386339633263656531373139383136343237643965 30656466643435623431363835353038636134653531303734366562633536626633366164363666
30313462313138303030373730383232646139376236373930666661323538323762316433646235 64396335353462353831323332636633363263643032623364613633323130636232396337333032
34343363326135396539346239313232376438626131386539653465303961636530656463306665 66386563323962313338343631666362306339356338343462393535666564326633396662643533
61353739333235396537613237313431633164323061633734643766346138363739346336396166 62623463636337306234643838303133363338313232616563353463613566383432373234343661
64646261633137643166333630353530323763613934653863656530303664303439313038393433 66313731313435373034613930386162633536373834646164323365383261643763393562396538
30656165393261376437373538306133666537373332356639363666646165666431373136396635 34643366386663346433643966306662373265313563386535333438643863623265343162373731
34366165623761313162643264396634396364376265663637393731396365343234376163303166 36383264373837646565336362306666323664663433646633336335343536666137616239643833
64313537376565326631623038633234636163336663633239326466643837626531346131336337 37343530363462386536343639373561383936363661343535396261333134333139613864313130
33363731633932393766303165326166323062346562626237356664636531656365626639336436 39336538616565386565323035616162386130383761323738666137353630356365613764626335
61356230373365393933663231656562666535613137366666343834396662323934323236366237 66383562373533653666373236343532623665656262383464613761316563303833383239393461
39633738626435663136663437666533373865663236346433623535363135653532373661376335 35653538346530656163323233646134373836373233633635343432613937376537306165613863
34653534366565626436313232353335636265656238653434643230616638616232393664646262 32313561346239373030393566666561326662663035653433366561633737363831333262356164
30373731623830333862373530306333616464623464343534613634363137656665326432386539 38336531343562336166383536336264353964656433623330343939343239626338333834626339
31643734613433613135663137356663386466313466356637313738353065353433316236663835 65636331656334636533306138316363616365363564636233663638333432323333653366303765
62363163316532313162643831356362663965313064326338343938326365313439626463323837 34373637656134663464616366353266383263386136336663306565663563316566343639616263
32306533393531643464623566666462393963636263313735306462363536643538373963616336 32343230623164646237396230643630323932336566633666323533303037323135373236616166
32333462643166663530633239663636323037313833303134363565663837616232656231316430 62356138653364316165373735613135626135383739626132343239646133303439373439373131
38653132353661333862323335393831646634353564663037303738333366313431363064393830 61306366353731636136333438373764383330346132356139333437653037376633393839323761
35616133653939306666356232316638323730316232393537376338616636663134343536633230 35303730336662386435373731353837306263636437393063613162383134316631343865323530
63653162356130316437373634333735373233393333353963316361386161623333616139653964 39356234633238323435303164656362333336393733626162613863303335393666656235646531
37326432376432333461373831653565386362376336626235316461313064376435623932343037 30383932633034363463633861646466316464303934653837306465346630353964663464663838
35656630666663313362663061353630346338356162376361326261636165316234376633333336 61653362636136373366393434616262373833613561663165373532663062646164666133363139
34643261353839363031656565373639643663626437383965663261653537643238373564356665 36393764653032636431356532393932613535333966346564613636386335396561623835303835
65656630343435623937636130396431316130353531643534346439386564663866666266306330 33383965636132653332353665626634306335333061653631633431643263653165323565626434
62333932663533346632643031393433333735323435663666323235326339396339636361313134 66333964383464323031313538356135663931326538333930663365623132623931316231303330
65616565643339333032396333616562323838343733303565376363363736343336633935643364 39306537343237373639626166353333646565396537616562303431363935643438373461653739
38353463663334393134323962363638626331333034373765663431383664393262303166366262 66643464386631376462613938363262363865326533663937353232303138646535346665383165
39353961396264323966363264343131333533623466333631353431336636626632326134333234 61343466653437663639306165376233323964626166653235613963306235633163393864316463
62396433386135623261336632666639666536333430373363633835613039333032356334656635 30343863623063383931323337346232653534663930646435333031656566353138346231633463
37643037653935626466623835623364303730396239396530616665363036393563626437643237 39636464323231326365643938656237363133633234326661633834333939653066633932663830
66383637643763653336623434303539356639383431663336653830623065343532363931396632 35386263663063393464626438343332333933366432336232646564643862343966313831356633
35313835633463316639313432383934363665353939303965386165316337643036303363383532 30386262383837343765616338303665653865623939393832316338616132666232373339633264
30333134336238613961343832336238363830336563323037636236373964656438303964393335 62356235656565313438373565623736613365323730636563323261316434363638643639643833
35643336396539663739333665653230343035333435336563303965363537383337613733373635 36616434363835363836333764623966653838666439323161353232383334663931346136633265
63396565373863323432316663613930353865356566633734363235363363646161663137646431 31653834353261373431656666643336316161626135656664303731343337373562303237326530
66356462306565316336396266333964316236333536313031643936396538613265386431353463 65396665633664663434353366336466333938303937333165303130386133373332343339343336
37363933336364633838353264313761653764376134353063343062363166643839393935653031 64656537633861663532393138636664356639623531306538316233326636666563623634306630
64663330666434663263633739613864306162326636393337626665376236336437336563353561 38666163623464306532396333646330346533656266663862386264356339306235333265626462
62353261353334346134626462356564343737663639336662386631326437623365613032373036 63643162626263333864333761666566633335386263383034363235633434373538653938323136
38613933343563333330333937343666613966396234306137656665353030636231636464666438 66303638303535336365663832303937343231303636373533666533643331303065633864383533
61396531636138633662643230366462383834356633333933373736383662396534383230663535 36663638323961653537363039656431343939336131653664326231313035373864643637633931
36343533316430353632353064343337646136643231313930643830363137306636326335313838 38326438316335383238363163306436336338383937343438633365616432343035326538316665
35316666366639646539323430666265616435363530656532393135393831613864666332343866 33373365343561646662646162636539373061326461386566376633353061343033326561633664
30326162616561316331383665633738613964373661383661343534653833633136313436646233 65636262343566303836396436333737633937363661323766633837363936346561393735633236
65383830336463653063393361316462353932313062376631346637356336306439313539313135 36393633336262633561303066646235313563653163623462383565333637373830383538343033
63636565363838633336653761336332646165393434333162313830636366653332653935356139 64613063313565386362336664636631326336393666393631393661623762383733663835616432
62633435343162633837306564393362333830353662336464393535666466356165353235336261 37313661386130343232363063663135323263393264333033646161356236373433333733396439
37326439333964656366306332646639393164356661653933396136323939636137323665336465 63333136626264313634643238623562393463623163366339343234626333343839636438663730
31323734373937653836373532626438393137303563656663383833316535646337396231383163 37366633336263396461643136653762616262343532383562636263336662326563326230373633
65353133393431306465623139383066663132653866393735643133633864326136326464663633 35626164636631353035663339316631333332323233643361643531303834303939656632386164
31386637336139323937613438376361353665366636396435343864333831636438383762613735 61303235353766666138646434396134663662666564366235313139623231303630363236656162
34616638666331653936643265663030303637613161366336346331643065626665326633396266 36373338386231356564356537383437386266666431316365303937646130346332613036656138
33343362366363616338343739383163316532666162336361666532333336663965323239643936 62353166613333396230663434663938633130303165356137623430653039396265363162383931
31653562383366333833643262306631643632383665633333333630343164656634633331326236 39376435633737386463303966393331346538656535376266656462323061643263383765373930
34323237613763393239363837336234303234646437636665323739663837613237626663396130 34336363396236613630333130653336643538653465356564666131343164353862363637323938
36653631643637353236633735386435373137646664613335333366323734303031393238356262 61363561353734633636646334303034633031653938663866333535316236666231393265363934
64623930356261623935653933636435363337313533376461313633326537616638303933366533 61363664623834393230343563626531393866363537396430333734326534616335376565666237
38343064393333653466313966633764623964386330383162313236303237616531303536626535 39613836323862616533386364666563363431363861656466636636623464656365363530656135
35633761393832353663303666303866343263396431373039353936303164386438306438316265 66376463326132323637333138643163663635383161383362353565373335313935383836643834
61303432633730326238653763333362643866663031303832623736393865353334 62653732626637643934343935663738653231326138313137323034316130363137666532313765
32326662393161383062343762643235363836306434313735396663306266393463333134383564
38643334346631383430613830363164353339626363646633316564663562393164633031653538
38643637623037363164613635366161646164646561393235366265343539303562376166393939
30616533643730333062666432343235623437313037383463653165653733633362346131313263
32396163313630313338623239393565313264643230383463313535623664633563356335653231
31646636313363663731373439613637663165336264666131343937313438346632386265663732
63336166656333373263383735326665653964643835623830363761343864393838326133623234
64383866626634393239313438636631343262333534333138643934346235386334303432383962
34653039396638326164363264366139313865633034373433393561346363373332393634353766
64303665393338646537386434303961643063363235356533643436646637386138326238656564
39393334343165333738363137383933333263616636626538336566623831306333633133616139
65643062643861343533316332666662393232636338323734633435323539353237656130616362
33383437373265353465323439343437623062336236653364396437303366396635653036356561
34333662616538643832623633653963353335326562613931353532636238626538353034383961
38356164663161386433