From 328e3b642a1cc7c18270ae0ba9beccc826df387b Mon Sep 17 00:00:00 2001 From: Arya Kiran Date: Sun, 7 Apr 2024 17:08:13 +0530 Subject: [PATCH] remove i2p references, bring back nitter, secrets.enc -> secrets.yaml for syntax highlighting --- README.md | 10 +-- privfrontends/templates/Caddyfile.j2 | 19 +++--- privfrontends/templates/eu/darknet.Caddyfile | 33 +++------ privfrontends/templates/eu/misc.Caddyfile | 2 - secrets.enc | 70 -------------------- secrets.yaml | 70 ++++++++++++++++++++ 6 files changed, 94 insertions(+), 110 deletions(-) delete mode 100644 secrets.enc create mode 100644 secrets.yaml diff --git a/README.md b/README.md index 8ffccb3..aa5478b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ansible-playbook all/playbook.yaml # Initialize ``` For Privacy Frontends playbook, you need access to the ansible vault password, which you'll have if you are a segfault sysadmin :) ``` -ansible-playbook -i inventory.yml -e @secrets.enc --ask-vault-pass privfrontends/playbook.yaml +ansible-playbook -i inventory.yml -e @secrets.yaml --ask-vault-pass privfrontends/playbook.yaml ``` Additionally, you can make use of the following ansible tags: - caddy-non-update \- update Caddy configs but don't update caddy itself @@ -32,10 +32,10 @@ Many parts of our privacy frontends configurations are meant to be private, such Hence, these are stored as variables using ansible-vault. -There are two different ansible-vaults in use in our setup, encrypted `host_vars` files per-host, and a global `secrets.enc`. +There are two different ansible-vaults in use in our setup, encrypted `host_vars` files per-host, and a global `secrets.yaml`. -### secrets.enc -`/secrets.enc` contains private variables that are same for all our servers. +### secrets.yaml +`/secrets.yaml` contains private variables that are same for all our servers. Currently, it contains the following: (as of 9/6/23) - rfc2136_key \- RFC2136 key for DNS01 - watchtower_mtrx_pass \- Watchtower Matrix password @@ -78,7 +78,7 @@ Firstly, add the thing to `docker_services` array/var in `/privfrontends/playboo Then, create the `/compose/SERVICE_NAME` directory and add the compose file (compose.yml.j2) to the same. You can use the `{{inventory_hostname}}` variables where required. -If the service needs a secret key, add it to the ansible-vault secrets.enc with `ansible-vault edit secrets.enc`. If you are a Project Segfault sysadmin you already have the password for it :P +If the service needs a secret key, add it to the ansible-vault secrets.yaml with `ansible-vault edit secrets.yaml`. If you are a Project Segfault sysadmin you already have the password for it :P Past this, Caddy needs to be configured. diff --git a/privfrontends/templates/Caddyfile.j2 b/privfrontends/templates/Caddyfile.j2 index e1caebd..97553c7 100644 --- a/privfrontends/templates/Caddyfile.j2 +++ b/privfrontends/templates/Caddyfile.j2 @@ -24,9 +24,6 @@ (torloc) { header Onion-Location http://{args[0]}.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion{path} } -(i2ploc) { - header X-I2P-Location http://{args[0]}{path} -} (acmedns) { tls { dns rfc2136 { @@ -74,13 +71,16 @@ lbry.{{ server_prefix }}.projectsegfau.lt lbry.projectsegfau.lt { reverse_proxy :3550 import def import torloc lbry - import i2ploc pjsf7uucpqf2crcmfo3nvwdmjhirxxjfyuvibdfp5x3af2ghqnaa.b32.i2p } nitter.{{ server_prefix }}.projectsegfau.lt nitter.projectsegfau.lt n.psf.lt n.{{ server_prefix }}.psf.lt { - import def - import torloc nitter - import i2ploc pjsfs4ukb6prmfx3qx3a5ef2cpcupkvcrxdh72kqn2rxc2cw4nka.b32.i2p - redir https://twiiit.com{uri} + import def + import torloc nitter + reverse_proxy :8387 + basicauth { + {% for item in private_service_basicauth %} + {{ item }} + {% endfor %} + } } libreddit.{{ server_prefix }}.projectsegfau.lt libreddit.projectsegfau.lt lr.psf.lt lr.{{ server_prefix }}.psf.lt { reverse_proxy :6464 @@ -91,7 +91,6 @@ libreddit.{{ server_prefix }}.projectsegfau.lt libreddit.projectsegfau.lt lr.psf format json } import torloc libreddit - import i2ploc pjsfkref7g66mji45kyccqnn5hmjtjp3cfodozabpyplj2rmv5sa.b32.i2p } teddit.{{ server_prefix }}.projectsegfau.lt teddit.projectsegfau.lt t.psf.lt t.{{ server_prefix }}.psf.lt { redir https://libreddit.projectsegfau.lt{uri} @@ -141,13 +140,11 @@ rimgo.{{ server_prefix }}.projectsegfau.lt rimgo.projectsegfau.lt rg.psf.lt rg.{ bw.{{ server_prefix }}.projectsegfau.lt bw.projectsegfau.lt bw.psf.lt bw.{{ server_prefix }}.psf.lt { import def import torloc breezewiki - import i2ploc pjsfk4xvekoc7wx4pteevp3q2wy7jmzlem7rvl74nx33zkdr4vyq.b32.i2p reverse_proxy :10416 } scribe.{{ server_prefix }}.projectsegfau.lt scribe.projectsegfau.lt sc.psf.lt sc.{{ server_prefix }}.psf.lt { import def import torloc scribe - import i2ploc pjsflkkkcn33ahmzmpyq6idy2knkzh4atp7zaetqfsnenpyori6a.b32.i2p reverse_proxy :8006 } translate.{{ server_prefix }}.projectsegfau.lt translate.projectsegfau.lt tl.psf.lt tl.{{ server_prefix }}.psf.lt { diff --git a/privfrontends/templates/eu/darknet.Caddyfile b/privfrontends/templates/eu/darknet.Caddyfile index e5e3f3f..0f1b738 100644 --- a/privfrontends/templates/eu/darknet.Caddyfile +++ b/privfrontends/templates/eu/darknet.Caddyfile @@ -1,9 +1,8 @@ -http://www.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfg3pdzzocax6a4oznoyf5k4etzknfatqu23i43wxejwdaffoa.b32.i2p { +http://www.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { reverse_proxy https://projectsegfau.lt { header_up Host "projectsegfau.lt" } import tor www - import i2ploc pjsfg3pdzzocax6a4oznoyf5k4etzknfatqu23i43wxejwdaffoa.b32.i2p } # PUBNIX http://geminiproxy.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { @@ -29,35 +28,30 @@ http://*.p.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { } # Privacy Frontends -http://lbry.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsf7uucpqf2crcmfo3nvwdmjhirxxjfyuvibdfp5x3af2ghqnaa.b32.i2p { +http://lbry.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor lbry - import i2ploc pjsf7uucpqf2crcmfo3nvwdmjhirxxjfyuvibdfp5x3af2ghqnaa.b32.i2p reverse_proxy :3550 } -http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfs4ukb6prmfx3qx3a5ef2cpcupkvcrxdh72kqn2rxc2cw4nka.b32.i2p { +http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { reverse_proxy :8387 import tor nitter - import i2ploc pjsfs4ukb6prmfx3qx3a5ef2cpcupkvcrxdh72kqn2rxc2cw4nka.b32.i2p } -http://libreddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfkref7g66mji45kyccqnn5hmjtjp3cfodozabpyplj2rmv5sa.b32.i2p { +http://libreddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor libreddit - import i2ploc pjsfkref7g66mji45kyccqnn5hmjtjp3cfodozabpyplj2rmv5sa.b32.i2p reverse_proxy :6464 } http://teddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor teddit reverse_proxy :9061 } -http://inv.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfhqamc7k6htnumrvn4cwqqdoggeepj7u5viyimgnxg3gar72q.b32.i2p { +http://inv.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor inv - import i2ploc pjsfhqamc7k6htnumrvn4cwqqdoggeepj7u5viyimgnxg3gar72q.b32.i2p reverse_proxy https://invidious.projectsegfau.lt { header_up Host "invidious.projectsegfau.lt" } } -http://invbp.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfi2szfkb4guqzmfmlyq4no46fayertjrwt4h2uughccrh2lvq.b32.i2p { +http://invbp.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor invbp - import i2ploc pjsfi2szfkb4guqzmfmlyq4no46fayertjrwt4h2uughccrh2lvq.b32.i2p reverse_proxy :7573 } http://gothub.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { @@ -84,19 +78,17 @@ http://rimgo.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { header_up Host "rimgo.projectsegfau.lt" } } -http://breezewiki.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfk4xvekoc7wx4pteevp3q2wy7jmzlem7rvl74nx33zkdr4vyq.b32.i2p { +http://breezewiki.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor breezewiki - import i2ploc pjsfk4xvekoc7wx4pteevp3q2wy7jmzlem7rvl74nx33zkdr4vyq.b32.i2p reverse_proxy https://bw.projectsegfau.lt { header_up Host "bw.projectsegfau.lt" } } -http://scribe.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsflkkkcn33ahmzmpyq6idy2knkzh4atp7zaetqfsnenpyori6a.b32.i2p { +http://scribe.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { reverse_proxy https://scribe.projectsegfau.lt { header_up Host "scribe.projectsegfau.lt" } import tor scribe - import i2ploc pjsflkkkcn33ahmzmpyq6idy2knkzh4atp7zaetqfsnenpyori6a.b32.i2p } http://translate.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { reverse_proxy https://translate.projectsegfau.lt { @@ -110,24 +102,21 @@ http://safetwitch.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion } import tor safetwitch } -http://search.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfwklrellqoj275kzeu2tz4c3j5zktnqod56s7l5dc25ro3wgq.b32.i2p { +http://search.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor search - import i2ploc pjsfwklrellqoj275kzeu2tz4c3j5zktnqod56s7l5dc25ro3wgq.b32.i2p reverse_proxy https://search.projectsegfau.lt { header_up Host "search.projectsegfau.lt" } } -http://git.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfdrtv2465bisenvzhfvdleznx4arlih2hlnrhpzugailnm7iq.b32.i2p { +http://git.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor git - import i2ploc pjsfdrtv2465bisenvzhfvdleznx4arlih2hlnrhpzugailnm7iq.b32.i2p reverse_proxy https://git.projectsegfau.lt { header_up Host "git.projectsegfau.lt" } } -http://todo.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion http://pjsfivs2sxudfy65kojxqophc6vqjqdr6woczy6hzaxvxvbj3bkq.b32.i2p { +http://todo.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion { import tor todo - import i2ploc pjsfivs2sxudfy65kojxqophc6vqjqdr6woczy6hzaxvxvbj3bkq.b32.i2p reverse_proxy https://todo.projectsegfau.lt { header_up Host "todo.projectsegfau.lt" } diff --git a/privfrontends/templates/eu/misc.Caddyfile b/privfrontends/templates/eu/misc.Caddyfile index e2e695c..315a75f 100644 --- a/privfrontends/templates/eu/misc.Caddyfile +++ b/privfrontends/templates/eu/misc.Caddyfile @@ -26,7 +26,6 @@ inv.bp.projectsegfau.lt, i.bp.psf.lt, invidious.projectsegfau.lt, inv.projectseg import def header -X-Frame-Options import torloc invbp - import i2ploc pjsfi2szfkb4guqzmfmlyq4no46fayertjrwt4h2uughccrh2lvq.b32.i2p } piped.projectsegfau.lt proxy.piped.projectsegfau.lt api.piped.projectsegfau.lt { reverse_proxy :6970 @@ -57,7 +56,6 @@ arya.projectsegfau.lt { bb.us.projectsegfau.lt bb.in.projectsegfau.lt bb.eu.projectsegfau.lt bb.projectsegfau.lt { import def import torloc beatbump - import i2ploc pjsflmvtqax7ii44qy4ladap65c3kqspbs7h7krqy7x43uovklla.b32.i2p redir https://hyperpipe.projectsegfau.lt{uri} } ferrit.projectsegfau.lt snooddit.projectsegfau.lt { diff --git a/secrets.enc b/secrets.enc deleted file mode 100644 index 31fa44b..0000000 --- a/secrets.enc +++ /dev/null @@ -1,70 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -31373334316338616530336663386162326136303066636462656235636139613037323732616433 -3464633562643434666536373662363132656238336435640a343261393539363663623731323533 -35383934346563633538353535613936316237613832353261376534323665653834353831353831 -6237323465623230340a666366333130306462333233336431306135386339373763653037653238 -32393563383237356235633935383161623332613934383164386532316564653861356163393236 -33356133313633333534613966666662636336633565356331616165383433663935663162373730 -30343961316638393433613935323635363332663735623730353230643163393336393462613764 -39323532343533396532636264373166323739343931353139343633636137323633303038643561 -63633964616334386463353566636638393963343931316635343664653363393231363531393438 -31626666616634343833623661386663393731616162636337346235626433356230376564333533 -30626232643461613934346534613233363737373161363832326463343363636336666538633132 -63656633613466623265646235383238663738383632626664356133373964643536646635653238 -66376264376538643465306664653035346637636336366339383561636364616530353232303265 -66626431663965323136363065646339323934623436663862366338613466663564333462326431 -63326131353462316563346366356665393438346430663839376562386638643630613232303833 -66346265633261653463363761333335343331366265663735656331616537323631396331386262 -31623439393039613461303434333636613037326436656363303532373132666339653662376332 -35343964636638393563613066323763653365333965366139396665353065333131653037363563 -65383132356239383332636235336434663961306130656461663739663663346136613239623965 -61363334303637343732393030663066353631323365643532633865363134363761323138343365 -64323233383632376338396632376561636134386133303835396231666436613362343435383234 -36316237636435353736623033356362643238616536626133306639376539353132303331336164 -61396261323865353464353637653061366463376638363736333233383163613662386631343933 -32343937626138343937336162303534336533663535636234363936326139623233356538346630 -63306439643366616137656135623637333033626438343933653063636165373038613239383164 -34636664336165643565643436393961316266653339383961666337383039656362623031656138 -30306433623131366461383635303361666162333261616431363966613432663034343966656139 -63316131646165316339303564316533396362613232643237393233643235666531646162623064 -34393435613635326539613035336462393832653534623433396661366236336237613966623234 -34633838376532326163343437633134353132616438343538633564623033346364336663343564 -64383939646637323932383336303834663236313932656436633533303437626562303031346162 -36623936663266336236346432356135636662613137336439333735356438613433663963653732 -36623331633338346437336130373035306566653766623334303037343663663063663661373736 -31313564646333616638643133636265393837663261396336343866313035643730613639343234 -30653935303831366136633361333637336433393236376339613435303535313038303539336539 -33356634626164663963363562333838353237616130313839653135363733323362613132386461 -64623839356236613839356534323562303031613061633435323232306231313965343766623831 -35636530613036393465323364636661383739623266616530343536353061353363643163666537 -33353961313963366637373163616530373962643630353435383634333865303634363735633461 -62626363303163303265646565373865363733626432353232386436313533353334376165376266 -38623037626137643833363361353635363734393666643336353631363664643863383633336137 -36383834623163323463383736663035653234373337353264316639643462376434633232316331 -33313236333530663362313736303033346134383138333338393761343138363561376334356138 -36363163393835333666393531333635633162363861373033393464623938356332653761333930 -35386435636566336633313263646339303061353638663833643761303463333031386664303531 -61343930306338643634333731353635323164643939356331326564636665303966346137393536 -33313066633266313464333463306637386262363130633832393633366532363538313834306565 -61356533393661353565313166653134643336356138653966623434633335363630636139363139 -36663037303362663035653864306364316361326236623938656334373733313665646530303066 -61386634343232373730363031376637653063333834313862636461353463653161376562376138 -39646164306233643665663737653631353035656135373263343863356437623661633333643331 -35353334313964363731636166356163363831653930356133643938303664336533303331333536 -65353364376232623463623138663737303333636432663262633033663737303836666135386138 -38666562383337353137663735306230373637353837616237643334663933316463666335613739 -65663565643365363431396635663661643964643462643364663231613333323433343931623637 -36336266373333623237383635303436396362393032303731633162383265666430386437643963 -62643961383435626633353733373336313638333038653238383034373635626637303665303562 -36663531326434343763663731623865323531303037306166316264646461376134353831656565 -39613962643938333332333038346234393538343030343261396532363237613339373831303564 -66393162613230376237373631323931663830366336663138643631633438386131333763646562 -38646431343263653237313336653231363962373939393164636562613939663161353565343438 -36626134656533366131653466646138326237303262623731373533313132303339333661616335 -37616334646131303332326261633938336633373039636131363235313330653530346636353236 -64663463333435383535393831613564613266616166666332653366656165633939333537393033 -35393965623265633035656162343961396230346431646533363666396461363139376134326134 -34346136326537616533636433633562336563396539653965633037383265383930303866666535 -30343536623163343237393866323637313739366339316532636633643533373937653764356564 -34373836396264613766666565343139613033373136363165646138636633383361653036653232 -3730 diff --git a/secrets.yaml b/secrets.yaml new file mode 100644 index 0000000..1d04811 --- /dev/null +++ b/secrets.yaml @@ -0,0 +1,70 @@ +$ANSIBLE_VAULT;1.1;AES256 +30326238333263633831626131343435333162356137393138613762363230393132393633653865 +6432613339363565326162616631376430326437353861340a666664633033616538353735666239 +36616430386136613736326665633738343733643765306237383237643963343162313266373537 +6164323630616562320a343363643766656132643531653838633334623237396336366433663931 +34646231393361363764376635373138323736383734656264666561353238396132633838353830 +33386164343234616132356534396633633663313534626463633965343765326264333835323537 +65306335623233323438356264626336376235363663313036643065366638643335626335343766 +32643636353331336533333931323131366438306464613338323862306639643765333365346236 +37303562363064623133636338356231373535343366366365393938666136656339336230346234 +32316235353464323437643839376637623737306639353632656135313730643234356135376136 +32616565363861313965666165623939373934396663393134386639623636346132626465306164 +30303961366136383462396264376538633364616262613437333132346132653766366134626334 +36393166646634373333643862353638326630653637653630643435613666653062333661636236 +62653231633733333563396133636436643239353331363735316231333863326535656132636662 +37613565373939343630653766353732333237363533333261656533386239323266366635653138 +35613764373537373338353461353462663864333231323535323562373733376634383131383761 +31383162636364343533626236653639613161356664343936623239633262666363616334336533 +35653764356665373864343535623966646233663134663861313735643537323439626162653838 +35663164393134663235646333643862303136383065313966643530623364316165373039653131 +31663733396632386633323962373862326666353463326634656436353031643563616164376330 +39303661636139653334373331363232356533386632353631396133373861373130643430376532 +32343039353165383465343566346530666435313734633337396431666630333438353365316131 +37373231653133636338303331366638343463383332363666393361613739323365363364316631 +65336336643564616466306133623661336264626338393836613861663737383066393263386263 +61316637646366333261303036633130383264343966633337656130396336636637363061653564 +64313433303364623235353138636463636534313631353236623634653234363237383231656466 +61646330633035373030373231303931343339393161373034616665316338396264346566656637 +38306638366336303264663866303462633231666437646261303431653439646661343264303331 +61653136396437373166323032386239643137306433383634363035336132306235656234313266 +61626561366538623364346434643933363037366566663632656631613831386462326666393166 +32636635313831313537646234343539363164326232623737336434396436353466373134363638 +37363462383565383739346134373063636238313665353130646438343030613062346364333931 +36343837633331636134643366663638333038333765616239623839313730383362383031373833 +32663334646637663339386634346234353339363766656664663831666262636164303561323262 +39326231313437366534366533323765313038333537643865323230653838376637636534343761 +36653966396263326665653138313066353064323836343664653330616631346464666262346437 +33643233333238616239613737613164663139393130666364626362353332633662376136383762 +36336462313633396666373438343965303461336132353236616130356666636632316237313633 +31626566616236393664666339303865656230366439373234643163616664636134616434633136 +64366262663866353164356433303132363336636262333133303532373039383537626335373633 +61303662646263383164656232646665376639386233646333643431353461333930353964616562 +61303366613937363463313166343539643435353166383239316338316230636339363434333736 +38383663666466333730313534653539633633353062613133383362393735363536643439396138 +36343866313239313937623261633638323535343933343665356133316663366333393439316364 +34343236366636386338623534613364363066303935333564336561366531626331663338363838 +38663435656539636231386161313762633232336533303362613937393062376532383736383938 +64656232333637663033393532313337333633353564396434353633343634376361383131663030 +36636631653933386534306135633834343531326136316364326665323133363163623436363232 +61643636326335656138646663653639323664636639396136666363323431316539306138343935 +38323431353730336336313066353337383532643230613963356335383436663564653539306430 +31343963376364666437373963393630656165323265633964653438313833383730643839353863 +62643536336463336437613562343062656133396530656337353330356430623662363437653732 +37666162393830666337653362383131303466396430643034373064653530626636333231386237 +32643932333833336364343933616161663065396635613364616362343066623134623932366265 +34396465386463636438313638653434386163623166636636366233343033666638323065323239 +36326639623565333530366363396166626461616337303261353330396634393434313935316463 +39383864386437386136626461633133346532646463623934613062393862323939363236643461 +31333034303362666132643865373030313832313866326538336235303866313463613765363334 +30383031623561303761643134313234633233383462383739616331653439353864643363613436 +31353661376137646633643633373334623434386363303537326364666362306134626339343131 +32393866383665366432396334626166363237396638396630653335663235386263643838383935 +65646636366538616662313738353666366536303562626166363231613161613561333436616531 +37386634363763636362656566346366363139353065633764326266633265373261323938613764 +65386430643437373732343765323966316530623266303466303833306539303066386132646431 +32383235393931336631663062326364333235323039316233323231366537663862656536366330 +35326362663434366432366366643265353332313664646234366332383766316435373966633032 +62663763316630323131393431373866633336353162633434316130316137356163316162306638 +66316531353564613864623833326166636465396638656239653736646666646437306335396237 +65353339323833383533383661616364666666306166336538346532636663353464