Compare commits
7 Commits
main
...
31a8eafd65
| Author | SHA1 | Date | |
|---|---|---|---|
| 31a8eafd65 | |||
| f193ff4e6b | |||
| 65893c30f3 | |||
| fd30ee265f | |||
| 4c13b3d2cb | |||
| ed972509ce | |||
| d094a1b26b |
15
Taskfile.yml
@@ -1,26 +1,13 @@
|
|||||||
version: 3
|
version: 3
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
dev:
|
|
||||||
- docker compose down
|
|
||||||
- docker volume prune -f
|
|
||||||
- docker compose up --build --force-recreate
|
|
||||||
|
|
||||||
vault: ansible-vault edit vault.yml {{.CLI_ARGS}}
|
vault: ansible-vault edit vault.yml {{.CLI_ARGS}}
|
||||||
provision: ansible-playbook playbooks/provision.yml {{.CLI_ARGS}}
|
provision: ansible-playbook playbooks/provision.yml {{.CLI_ARGS}}
|
||||||
deploy: ansible-playbook playbooks/deploy.yml {{.CLI_ARGS}}
|
deploy: ansible-playbook playbooks/deploy.yml {{.CLI_ARGS}}
|
||||||
restore: ansible-playbook playbooks/restore.yml {{.CLI_ARGS}}
|
restore: ansible-playbook playbooks/restore.yml {{.CLI_ARGS}}
|
||||||
|
|
||||||
assets:
|
|
||||||
- cp ./assets/icon.png ./gitea/custom/public/assets/img/logo.png
|
|
||||||
- cp ./assets/icon.svg ./gitea/custom/public/assets/img/logo.svg
|
|
||||||
- cp ./assets/logo.png ./gitea/custom/public/assets/img/favicon.png
|
|
||||||
- cp ./assets/logo.svg ./gitea/custom/public/assets/img/favicon.svg
|
|
||||||
- cp ./assets/logo.png ./gitea/custom/public/assets/img/apple-touch-icon.png
|
|
||||||
|
|
||||||
|
|
||||||
enter:
|
enter:
|
||||||
cmd: ssh -i {{.KEY}} -p 2222 root@{{.IP}}
|
cmd: ssh -i {{.KEY}} -p 2222 root@{{.IP}}
|
||||||
vars:
|
vars:
|
||||||
KEY: { sh: ansible-vault view vault.yml | yq -r ".secret.private_ssh_key_path" }
|
KEY: { sh: ansible-vault view vault.yml | yq -r ".secret.private_ssh_key_path" }
|
||||||
IP: { sh: cat dist/terraform_outputs.yml | jq -r ".server_ip.value" }
|
IP: { sh: cat dist/terraform_outputs.yml | jq -r ".server_ip.value" }
|
||||||
BIN
assets/icon.png
|
Before Width: | Height: | Size: 15 KiB |
118
assets/icon.svg
|
Before Width: | Height: | Size: 22 KiB |
BIN
assets/logo.png
|
Before Width: | Height: | Size: 16 KiB |
127
assets/logo.svg
|
Before Width: | Height: | Size: 22 KiB |
@@ -3,6 +3,7 @@ services:
|
|||||||
# Gitea itself.
|
# Gitea itself.
|
||||||
gitea:
|
gitea:
|
||||||
container_name: web-git-instance
|
container_name: web-git-instance
|
||||||
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- backup
|
- backup
|
||||||
- bucket-script
|
- bucket-script
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
FROM gitea/gitea:latest-rootless
|
|
||||||
|
|
||||||
ADD --chown=git:git config /etc/gitea
|
|
||||||
ADD --chown=git:git custom /etc/gitea-custom
|
|
||||||
|
|
||||||
ENV GITEA_CUSTOM=/etc/gitea-custom
|
|
||||||
|
|
||||||
RUN rm /etc/gitea/app.ini
|
|
||||||
RUN mv /etc/gitea/dev.app.ini /etc/gitea/app.ini
|
|
||||||
|
|
||||||
WORKDIR /etc/gitea-custom
|
|
||||||
|
|
||||||
RUN gitea cert --host localhost --ca
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
APP_NAME = """Max's Code"""
|
|
||||||
RUN_USER = git
|
|
||||||
RUN_MODE = prod
|
|
||||||
WORK_PATH = /var/lib/gitea
|
|
||||||
|
|
||||||
[ui]
|
|
||||||
DEFAULT_THEME = gitea-light
|
|
||||||
|
|
||||||
[repository]
|
|
||||||
ROOT = /var/lib/gitea/git/repositories
|
|
||||||
|
|
||||||
[repository.local]
|
|
||||||
LOCAL_COPY_PATH = /tmp/gitea/local-repo
|
|
||||||
|
|
||||||
[repository.upload]
|
|
||||||
TEMP_PATH = /tmp/gitea/uploads
|
|
||||||
|
|
||||||
[server]
|
|
||||||
APP_DATA_PATH = /var/lib/gitea
|
|
||||||
LFS_START_SERVER = true
|
|
||||||
OFFLINE_MODE = true
|
|
||||||
LFS_JWT_SECRET = x-----------------------------------------x
|
|
||||||
|
|
||||||
DISABLE_SSH = false
|
|
||||||
START_SSH_SERVER = true
|
|
||||||
SSH_PORT = 2222
|
|
||||||
SSH_LISTEN_PORT = 2222
|
|
||||||
SSH_DOMAIN = localhost
|
|
||||||
BUILTIN_SSH_SERVER_USER = git
|
|
||||||
|
|
||||||
PROTOCOL = https
|
|
||||||
ROOT_URL = https://localhost:443/
|
|
||||||
DOMAIN = localhost
|
|
||||||
HTTP_PORT = 443
|
|
||||||
CERT_FILE = /etc/gitea-custom/cert.pem
|
|
||||||
KEY_FILE = /etc/gitea-custom/key.pem
|
|
||||||
|
|
||||||
[database]
|
|
||||||
DB_TYPE = sqlite3
|
|
||||||
|
|
||||||
[session]
|
|
||||||
PROVIDER_CONFIG = /var/lib/gitea/data/sessions
|
|
||||||
PROVIDER = file
|
|
||||||
|
|
||||||
[picture]
|
|
||||||
AVATAR_UPLOAD_PATH = /var/lib/gitea/data/avatars
|
|
||||||
REPOSITORY_AVATAR_UPLOAD_PATH = /var/lib/gitea/data/repo-avatars
|
|
||||||
|
|
||||||
[attachment]
|
|
||||||
PATH = /var/lib/gitea/data/attachments
|
|
||||||
|
|
||||||
[log]
|
|
||||||
ROOT_PATH = /var/lib/gitea/data/log
|
|
||||||
MODE = console
|
|
||||||
LEVEL = info
|
|
||||||
|
|
||||||
[security]
|
|
||||||
INSTALL_LOCK = true
|
|
||||||
SECRET_KEY =
|
|
||||||
REVERSE_PROXY_LIMIT = 1
|
|
||||||
REVERSE_PROXY_TRUSTED_PROXIES = *
|
|
||||||
PASSWORD_HASH_ALGO = pbkdf2
|
|
||||||
INTERNAL_TOKEN = x-----------------------------------------x
|
|
||||||
|
|
||||||
[service]
|
|
||||||
DISABLE_REGISTRATION = true
|
|
||||||
REQUIRE_SIGNIN_VIEW = false
|
|
||||||
REGISTER_EMAIL_CONFIRM = false
|
|
||||||
ENABLE_NOTIFY_MAIL = false
|
|
||||||
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
|
|
||||||
ENABLE_CAPTCHA = false
|
|
||||||
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
|
||||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
|
||||||
DEFAULT_ENABLE_TIMETRACKING = true
|
|
||||||
NO_REPLY_ADDRESS = noreply
|
|
||||||
|
|
||||||
[lfs]
|
|
||||||
PATH = /var/lib/gitea/git/lfs
|
|
||||||
|
|
||||||
[mailer]
|
|
||||||
ENABLED = false
|
|
||||||
|
|
||||||
[openid]
|
|
||||||
ENABLE_OPENID_SIGNIN = false
|
|
||||||
ENABLE_OPENID_SIGNUP = false
|
|
||||||
|
|
||||||
[cron.update_checker]
|
|
||||||
ENABLED = false
|
|
||||||
|
|
||||||
[repository.pull-request]
|
|
||||||
DEFAULT_MERGE_STYLE = merge
|
|
||||||
|
|
||||||
[repository.signing]
|
|
||||||
DEFAULT_TRUST_MODEL = committer
|
|
||||||
|
|
||||||
[oauth2]
|
|
||||||
JWT_SECRET = x-----------------------------------------x
|
|
||||||
|
|
||||||
[storage]
|
|
||||||
STORAGE_TYPE = minio
|
|
||||||
MINIO_ENDPOINT = localstack:4566
|
|
||||||
MINIO_ACCESS_KEY_ID = test
|
|
||||||
MINIO_SECRET_ACCESS_KEY = test
|
|
||||||
MINIO_BUCKET = storage
|
|
||||||
MINIO_USE_SSL = false
|
|
||||||
MINIO_INSECURE_SKIP_VERIFY = true
|
|
||||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 819 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 819 B |
@@ -2,7 +2,7 @@
|
|||||||
<div role="main"
|
<div role="main"
|
||||||
aria-label="{{if .IsSigned}}{{ctx.Locale.Tr "dashboard"}}{{else}}{{ctx.Locale.Tr "home"}}{{end}}" class="page-content home">
|
aria-label="{{if .IsSigned}}{{ctx.Locale.Tr "dashboard"}}{{else}}{{ctx.Locale.Tr "home"}}{{end}}" class="page-content home">
|
||||||
<div class="tw-mb-8 tw-px-8">
|
<div class="tw-mb-8 tw-px-8">
|
||||||
<div class="center tw-gap-4">
|
<div class="center">
|
||||||
<img class="logo" width="220" height="220" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
|
<img class="logo" width="220" height="220" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}">
|
||||||
<div class="hero">
|
<div class="hero">
|
||||||
<h1 class="ui icon header title">{{AppName}}</h1>
|
<h1 class="ui icon header title">{{AppName}}</h1>
|
||||||
|
|||||||
@@ -55,10 +55,9 @@
|
|||||||
tasks:
|
tasks:
|
||||||
- name: Install PIP.
|
- name: Install PIP.
|
||||||
ansible.builtin.apt:
|
ansible.builtin.apt:
|
||||||
state: present
|
|
||||||
update_cache: true
|
|
||||||
name:
|
name:
|
||||||
- python3-pip
|
- python3-pip
|
||||||
|
state: present
|
||||||
|
|
||||||
- name: Install needed packages.
|
- name: Install needed packages.
|
||||||
ansible.builtin.pip:
|
ansible.builtin.pip:
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
project_path: '../terraform'
|
project_path: '../terraform'
|
||||||
state: "planned"
|
state: "planned"
|
||||||
plan_file: plan.out
|
plan_file: plan.out
|
||||||
init_reconfigure: true
|
# init_reconfigure: true
|
||||||
force_init: true
|
|
||||||
backend_config: "{{ terraform.backend }}"
|
backend_config: "{{ terraform.backend }}"
|
||||||
variables: "{{ terraform.variables }}"
|
variables: "{{ terraform.variables }}"
|
||||||
complex_vars: true
|
complex_vars: true
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
region: "{{ secret.restore.region }}"
|
region: "{{ secret.restore.region }}"
|
||||||
access_key: "{{ secret.restore.access_key }}"
|
access_key: "{{ secret.restore.access_key }}"
|
||||||
secret_key: "{{ secret.restore.secret_key }}"
|
secret_key: "{{ secret.restore.secret_key }}"
|
||||||
endpoint_url: "{{ secret.restore.endpoint | mandatory(msg='You must specify the S3 URL.') }}"
|
|
||||||
ignore_nonexistent_bucket: true
|
ignore_nonexistent_bucket: true
|
||||||
|
|
||||||
- name: Ensure backup directory exists.
|
- name: Ensure backup directory exists.
|
||||||
|
|||||||
63
terraform/.terraform.lock.hcl
generated
@@ -2,44 +2,45 @@
|
|||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.terraform.io/hashicorp/aws" {
|
provider "registry.terraform.io/hashicorp/aws" {
|
||||||
version = "6.27.0"
|
version = "6.12.0"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:emgTfB1LXSFYh9uAwgsRMoMIN5Wz7jNNKq3rqC0EHWk=",
|
"h1:8u90EMle+I3Auh4f/LPP6fEfRsAF6xCFnUZF4b7ngEs=",
|
||||||
"zh:177a24b806c72e8484b5cabc93b2b38e3d770ae6f745a998b54d6619fd0e8129",
|
"zh:054bcbf13c6ac9ddd2247876f82f9b56493e2f71d8c88baeec142386a395165d",
|
||||||
"zh:4ac4a85c14fb868a3306b542e6a56c10bd6c6d5a67bc0c9b8f6a9060cf5f3be7",
|
"zh:195489f16ad5621db2cec80be997d33060462a3b8d442c890bef3eceba34fa4d",
|
||||||
"zh:552652185bc85c8ba1da1d65dea47c454728a5c6839c458b6dcd3ce71c19ccfc",
|
"zh:3461ef14904ab7de246296e44d24c042f3190e6bead3d7ce1d9fda63dcb0f047",
|
||||||
"zh:60284b8172d09aee91eae0856f09855eaf040ce3a58d6933602ae17c53f8ed04",
|
"zh:44517a0035996431e4127f45db5a84f53ce80730eae35629eda3101709df1e5c",
|
||||||
"zh:6be38d156756ca61fb8e7c752cc5d769cd709686700ac4b230f40a6e95b5dbc9",
|
"zh:4b0374abaa6b9a9debed563380cc944873e4f30771dd1da7b9e812a49bf485e3",
|
||||||
"zh:7a409138fae4ef42e3a637e37cb9efedf96459e28a3c764fc4e855e8db9a7485",
|
"zh:531468b99465bd98a89a4ce2f1a30168dfadf6edb57f7836df8a977a2c4f9804",
|
||||||
"zh:8070cf5224ed1ed3a3e9a59f7c30ff88bf071c7567165275d477c1738a56c064",
|
"zh:6a95ed7b4852174aa748d3412bff3d45e4d7420d12659f981c3d9f4a1a59a35f",
|
||||||
"zh:894439ef340a9a79f69cd759e27ad11c7826adeca27be1b1ca82b3c9702fa300",
|
"zh:88c2d21af1e64eed4a13dbb85590c66a519f3ecc54b72875d4bb6326f3ef84e7",
|
||||||
"zh:89d035eebf08a97c89374ff06040955ddc09f275ecca609d0c9d58d149bef5cf",
|
|
||||||
"zh:985b1145d724fc1f38369099e4a5087141885740fd6c0b1dbc492171e73c2e49",
|
|
||||||
"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
|
"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
|
||||||
"zh:a80b47ae8d1475201c86bd94a5dcb9dd4da5e8b73102a90820b68b66b76d50fd",
|
"zh:a8b648470bb5df098e56b1ec5c6a39e0bbb7b496b23a19ea9f494bf48d4a122a",
|
||||||
"zh:d3395be1556210f82199b9166a6b2e677cee9c4b67e96e63f6c3a98325ad7ab0",
|
"zh:b23fb13efdb527677db546bc92aeb2bdf64ff3f480188841f2bfdfa7d3d907c1",
|
||||||
"zh:db0b869d09657f6f1e4110b56093c5fcdf9dbdd97c020db1e577b239c0adcbce",
|
"zh:be5858a1951ae5f5a9c388949c3e3c66a3375f684fb79b06b1d1db7a9703b18e",
|
||||||
"zh:ffc72e680370ae7c21f9bd3082c6317730df805c6797427839a6b6b7e9a26a01",
|
"zh:c368e03a7c922493daf4c7348faafc45f455225815ef218b5491c46cea5f76b7",
|
||||||
|
"zh:e31e75d5d19b8ac08aa01be7e78207966e1faa3b82ed9fe3acfdc2d806be924c",
|
||||||
|
"zh:ea84182343b5fd9252a6fae41e844eed4fdc3311473a753b09f06e49ec0e7853",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
provider "registry.terraform.io/hetznercloud/hcloud" {
|
provider "registry.terraform.io/hetznercloud/hcloud" {
|
||||||
version = "1.57.0"
|
version = "1.52.0"
|
||||||
constraints = "~> 1.45"
|
constraints = "~> 1.45"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:xpAcuja19Ts7bCpmULKdBw4dEBJhF/eL6AjM4xDBEAI=",
|
"h1:LTjrLuC+4F1Kv4TxS9e7LVVkG8/S4QQ7X4ORblvKTbc=",
|
||||||
"zh:016ecc39328f34f6c0ffa413598f354824f7878c89cd031f123edb4bc8a687a2",
|
"zh:1e9bb6b6a2ea5f441638dbae2d60fbe04ff455f58a18c740b8b7913e2197d875",
|
||||||
"zh:10b362dc0847200c987214b129b5f85e2f7d8ad417261a1d2dd04ab74de15603",
|
"zh:29c122e404ba331cfbadacc7f1294de5a31c9dfd60bdfe3e1b402271fc8e419c",
|
||||||
"zh:194647d9a61dca4f411f44580316b88a11095d7a99679d445f9b0f2c1ba976c4",
|
"zh:2bd0ae2f0bb9f16b7753f59a08e57ac7230f9c471278d7882f81406b9426c8c7",
|
||||||
"zh:1d8aafe2ce7890696385bb3a0c3286e7ee3020416d337f59935406e4c6f91de6",
|
"zh:4383206971873f6b5d81580a9a36e0158924f5816ebb6206b0cf2430e4e6a609",
|
||||||
"zh:594585616210fb232fad4ebda2387ecd3f483931e00eff988fca83add6ce7cfc",
|
"zh:47e2ca1cfa18500e4952ab51dc357a0450d00a92da9ea03e452f1f3efe6bbf75",
|
||||||
"zh:65e50be33ffb85580546f119839e1293591cc6d4db729d809931d0408b6ae408",
|
"zh:8e9fe90e3cea29bb7892b64da737642fc22b0106402df76c228a3cbe99663278",
|
||||||
"zh:7d4ed5bd8c477ec304142e2160203a76a0d09c93d224950bda253172b2571038",
|
"zh:a2d69350a69c471ddb63bcc74e105e585319a0fc0f4d1b7f70569f6d2ece5824",
|
||||||
"zh:90a70a70a266b78c8216903e711904e6969b3957d182602b5d788602ec9ef323",
|
"zh:a97abcc254e21c294e2d6b0fc9068acfd63614b097dda365f1c56ea8b0fd5f6b",
|
||||||
"zh:abb8e28e96fb8de270995873de980896b7cb53cfc550f02c50eaa42884624ba9",
|
"zh:aba8d72d4fe2e89c922d5446d329e5c23d00b28227b4666e6486ba18ea2ec278",
|
||||||
"zh:bbf34dca2de6e105ca7204222162a0402d8e9e9a28e1de5ffbaa2c0d6270a059",
|
"zh:ad36c333978c2d9e4bc43dcadcbff42fe771a8c5ef53d028bcacec8287bf78a7",
|
||||||
"zh:c1a9edb693d632dcb5c3c9ee84c97138e08eadb9354e28592efd581f68ac0385",
|
"zh:cdb1e6903b9d2f0ad8845d4eb390fbe724ee2435fb045baeab38d4319e637682",
|
||||||
"zh:dadbf1368fae314fe8dcb99ebefbc78409f3fc0e3808cd92ea573b8eee1cae98",
|
"zh:df77b08757f3f36b8aadb33d73362320174047044414325c56a87983f48b5186",
|
||||||
"zh:e713e00ca27348abd18da2eeff861905e84050e3e7e008f14a0c63c70ab2ff84",
|
"zh:e07513d5ad387247092b5ae1c87e21a387fc51873b3f38eee616187e38b090a7",
|
||||||
|
"zh:e2be02bdc59343ff4b9e26c3b93db7680aaf3e6ed13c8c4c4b144c74c2689915",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
terraform {
|
terraform {
|
||||||
backend "s3" {
|
backend "s3" {
|
||||||
skip_credentials_validation = true
|
skip_credentials_validation = true
|
||||||
skip_region_validation = true
|
skip_region_validation = true
|
||||||
skip_requesting_account_id = true
|
skip_requesting_account_id = true
|
||||||
}
|
}
|
||||||
|
|
||||||
required_providers {
|
required_providers {
|
||||||
@@ -21,4 +21,4 @@ provider "aws" {
|
|||||||
region = var.aws_region
|
region = var.aws_region
|
||||||
access_key = var.aws_access_key
|
access_key = var.aws_access_key
|
||||||
secret_key = var.aws_secret_key
|
secret_key = var.aws_secret_key
|
||||||
}
|
}
|
||||||
13
terraform/routing.tf
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# The Route53 DNS zone.
|
||||||
|
data "aws_route53_zone" "main" {
|
||||||
|
name = local.domain
|
||||||
|
}
|
||||||
|
|
||||||
|
# Push all domain traffic through the reverse proxy.
|
||||||
|
resource "aws_route53_record" "domain" {
|
||||||
|
zone_id = data.aws_route53_zone.main.zone_id
|
||||||
|
name = "${local.subdomain}.${data.aws_route53_zone.main.name}"
|
||||||
|
type = "A"
|
||||||
|
ttl = "60"
|
||||||
|
records = [hcloud_primary_ip.public_ip.ip_address]
|
||||||
|
}
|
||||||
134
vault.yml
@@ -1,70 +1,66 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
38643539323537353461336432353537646361303835626434666463643836353464633461383533
|
62366236383830323331383264663835316237363032333766333730653939666236666261653162
|
||||||
3639353663323362666235373161306135396663323962610a376333313966346136616461393130
|
3938653635393063313566343261303338666363386661650a376637613563303238373965356134
|
||||||
31626537333832303433393338336631623635393730353165396166623632363561613538373931
|
30373861653832383462666231356163623231303637636539383166383039333562636434646334
|
||||||
3936366135623865620a623539306562653738663634363266346335343661333766663763643761
|
3433393163363562340a333962343636366234336239633032313166303163353165643762326464
|
||||||
66393937346664653462393766363563653430353038663439383861336230623861646233373365
|
34353062323863666666666132663364633336623430373033623761613035666332323739313833
|
||||||
38613461376166633730653463656535316265353361643431303433373631356138363036336665
|
38623639643539363639383339356231313431373437343430323237336539313939303139353534
|
||||||
62363066313531313064313633353837623338313761636431383832643433646562323531383336
|
63616331353464613963323864626663396637313139646461356165643233306530303062666332
|
||||||
33343837366635653632316539376162633834363964613138376636666465376234303332643336
|
36363636316335356434633439636434336666306466616231353135306538386334313937363765
|
||||||
36373539656532323264313431323364656438363562363962393135383733656562666635616265
|
34333833626634383734396638646530393233623937396335313637333764313736383032333734
|
||||||
66323637306662663464386235646335363432616437336332656162656337326535336335343432
|
64373966643030623331663139363034343536373830353338356335356338633638393862386230
|
||||||
39356338303430383034383030323737636265353534356130363837373236343262663361313737
|
39336533656465366534306465396536613334333632643937316130303338626331386537343331
|
||||||
37613839613432376532643962663538633231633837343962373233363830646332623237633930
|
64363966323561326262376631356261613231343335393233366231373631663635376234346164
|
||||||
37373066613436636639326334363364323834323931653738653837326363323230643161663762
|
38303432386336643566363731386664376239666530336232666532616264353537353738636464
|
||||||
65353366396666373666383530363861623833393764313865306465303631383664663730643066
|
64616364353730653831616335656532663336666339653337646133316661373038326164373235
|
||||||
66393736323763323538346131663263306566303334366234633864653561393434393562633539
|
30653836336338333932303539393632326164623538303066353934623831376533333964346561
|
||||||
32303034303566616632313737303333326365326564313132376364353466376635646131613065
|
61323137373837376161653730386637663336623130366639356130626338663764366661616163
|
||||||
30646563643239306133313163643032363830653338346335363333316232633164376335373639
|
38356235386461366362396337646239633663303261616536386134663866333132613166373162
|
||||||
33633837313736633735343835353663323165386238636262373937613731323833323634646531
|
33616663316566623665666464356135393932366663663932366235643336343434633731646665
|
||||||
30366134643162623666323331636235333635386262323231626261353938623662323936393731
|
63323963366662346436393933643032653330313430633339613262306430306332326364343135
|
||||||
32383735646631316431633035323933336134356363663732633230636535373238633632636566
|
37393764363338656639393333623835626135323434376338656663386662643339643135653938
|
||||||
38373136323862366333303737376337366438373231343339383163333661613530366362313738
|
37396133373436353566646437633630373931643533383133343266626431393761646633666161
|
||||||
38633736373530613032323431366239633236656432633936663939306265316638643163383064
|
66313365373537386332396562613531346634376266653631343934356134643463633566373162
|
||||||
63326666663865663966333730356435356234343562393630343466393164393466303561316536
|
30633933636136663339316136333036386237346163646638393533336362363735623130623862
|
||||||
63663630393234623961366639323030313739616235653830356364663731366537343866333831
|
38623666383461363564326462326239303838623533393034383831366631396530343037636532
|
||||||
33336639653535316632613236343033393930623464343838653436643234343332623539306331
|
38366162396663653930633866303538353232656330643966386134316364313538646564313565
|
||||||
65663663373333303931326330663664663330353539376530303838643264356164633135626335
|
61313732343330336436393963643164303139373036303437393336313738336138306438393364
|
||||||
61613739336237666330373138373132346631666366666235346662363839383263323939383138
|
65623331663464626462316538663134346231643163356638383631623862313066343965376235
|
||||||
39656137343362636432343737616565646163623130623939616336616332616533303261656665
|
65613736643163663238316532623638343062633564333865623264356362663433333734383365
|
||||||
36306364643064643364666237663630376165303232313763383464313462353831306562666535
|
61373432656362343762333561376639396632386530353762303664373733656366343733613262
|
||||||
39363930396439633432373330636637313636316365306532333265626433333563343333323064
|
62313562323938356563323939316131646239313432626261353431626661613235363566393038
|
||||||
36393161383135346535623833396466323332323537316431646134343165353966613331313563
|
63656634383230316463363036306433366334643235656561613031653331333038323133653562
|
||||||
63326538643038346634323664393565656263323765363334353631616362343835666133383538
|
61393034663030663432376331383236626639613663343662323639316331653432383036393130
|
||||||
35626334363366323832636366346166373638666132623931633963663336363230316431356666
|
35376438333235336461313435316232373963613934323233613431643530646661666135613064
|
||||||
31636135303532313537666261393238396666326264323566646230663434323931323030343433
|
34313431613164333761643965373939353864333234353136386637326536336266363733343332
|
||||||
30356438323032353164333762653630656430306562313036353631663033646666363165623431
|
63393539353234343835633639333163386633326163623966343634346265623430326233353734
|
||||||
65613736393163363564326362303766363833623665343563326437383436336261346634343535
|
61373339393264383038383564346462396362333132346632396534346134613038316231613966
|
||||||
65343062373731623439623033323939343137326531316562383962363161666166646138393333
|
30636637626531343636376161326434336430386537646333353139353131363461613639646162
|
||||||
39353564303738396538613663633430653532643234656366653934333637376635363933313237
|
31346538326138366663623439393764653237386564653666396338623435386639623239373438
|
||||||
64303762303138613335393938306137346336393966666532313963653635643738306436316230
|
31616237343731623634643965386535663939356363653934343362633735353532353662396331
|
||||||
64623165656265393938326335656636386437643432383430376138393964643164646638633065
|
39373639346336653739613162626537636663376163343831623762643765346535636565376463
|
||||||
66396635343435353633636637613933306536306161633238386162633361313639303933653436
|
32366361373730376462356332363766376136613562613331386134633264613862383061343462
|
||||||
66303365366463353439386336313134316265306663646531376266306662366466653132323233
|
38316637336437336637393030613933393633666332353533646362663661313930376337396234
|
||||||
37623061663132633539313963396434353734643339393164353066653838346337306464643437
|
64636162343130326630366261356263363130663439393539363236343461343436316330663265
|
||||||
64623631393235636137666464653431323661326163626639396635666434633939653566343030
|
32616665366664303038333966373835646130343237646464353362346132653331303634643165
|
||||||
32643364316131336537613237373561653766383834353765633639343964383134313265303632
|
31393530373464653066643435343137313937326633653136623462363330343932383939626538
|
||||||
35656534666662663732353238333830326531393262633039356332386439653963346661346535
|
61663137623931353166616639636635616232306161643432623563643633333739646336356236
|
||||||
35376432663663336430653861323266373033383634626337366334363133303430616663353931
|
30663463303362396331396630623063646365373839333837333832643231396130636461636537
|
||||||
31643134653161646665646561643764336635623333653933643231663863653032666330383537
|
35653937363434393331303065326137373931633231323861666632393762353162313635393830
|
||||||
65333534323331396262633163343662663966653336616330323365666133653139623761316333
|
32666366376638383632666130353438316231313763323833663836663262646135633763376334
|
||||||
39616566386365383134393836373134633763373936616365363238323934623734313161396135
|
64636531653937303136373063336430303536316636343835396532383164623539653966343865
|
||||||
39656135383731623661646361373531643630643137343934393539656334373335636132353130
|
64316236656164653936613139643061323264333861623833383061386362333934373535633565
|
||||||
31323333336264366435636435653961366165386431313532656631666138336431333366623664
|
37623065636437626165646261343265613234373963386134616632396433376162306432633038
|
||||||
35316566666366393665333131313434353266356366373930373339636530613530653738633738
|
37356135663862363930303834303166333236643864383166333365313131333438373633653631
|
||||||
33646531363634343761343438396338656264326163616162306431366432616434316231366465
|
35613639343638356135356537626231663661623364313837393065363031616661613032306462
|
||||||
63623962383465626437363664653431396630343231356134353331666461613865326164653532
|
32653664373334636561613132336631613561363638666465393930336533333962383062316231
|
||||||
62653535343830346363636534366366373337653764353431623565626663376461666438653839
|
35633535643836323131656337366139313864343632616266363666646130316532336465633562
|
||||||
32633031333833613532613465623764386661616363643033613261613632653636643066303162
|
35326562633539386238613834656665306365643466356235326536383065623239653235653236
|
||||||
39393133646633613464393161313464663233396133633264346431626538663037663732386136
|
34356636623263343932336266336664303362613537666630343935313362666466393134653262
|
||||||
39653863303030343639353836373731303239666262363432373565326365346566643137653730
|
66396561363463646237363638336539663261626534363531636330386136623463366432313335
|
||||||
39623663353161626564383166383432656538383935343331646339636333366364646330373435
|
36343236613863383139353461313562303534613166353866636262623866383736303262626438
|
||||||
62666432336330636135393231356339366639626234656633656531353031623434663034383164
|
39353762303831353238323538626635393365363132646563626535613362326662653631663935
|
||||||
64316131316432373533363764393934323061393034663761363562313865666635303733613862
|
35636134343266626162316135316533346331663634366630633437363531313732313161306665
|
||||||
35633363386663316636326333393634353564393935643562663962303564383530343762323466
|
35336336323438613865396363363434663461646238346565336233363738666437323235336365
|
||||||
64376164383337633436616563303761373533383132346131313465653336366463346166343534
|
37316561386137353338643561656262336336373736393939363039663731343636366435633162
|
||||||
36316266613037353361306637353065313761656463373632633737663263333265336532323461
|
38383564663438303964643563613338306363623831613432333439386165303965
|
||||||
38343566636131663736393266303063333835373438313162383634323239666638303061636639
|
|
||||||
37313430383161316365363136353331393764613830653264373835633532303066666166326138
|
|
||||||
33373330633737383139613337393739626535626435383364393865393838393636663135653634
|
|
||||||
6334
|
|
||||||
|
|||||||