diff options
25 files changed, 807 insertions, 653 deletions
diff --git a/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad b/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad index 72d321d3b1..2af62a06c3 100644 --- a/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad +++ b/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad @@ -61,8 +61,13 @@ job "prod-nginx" { canary = 0 } + # The reschedule stanza specifies the group's rescheduling strategy. If + # specified at the job level, the configuration will apply to all groups + # within the job. If the reschedule stanza is present on both the job and the + # group, they are merged with the group stanza taking the highest precedence + # and then the job. reschedule { - delay = "2m" + delay = "30s" delay_function = "constant" unlimited = true } @@ -83,6 +88,15 @@ job "prod-nginx" { # to 1. count = 1 + # The restart stanza configures a tasks's behavior on task failure. Restarts + # happen on the client that is running the task. + restart { + interval = "10m" + attempts = 2 + delay = "15s" + mode = "fail" + } + # All groups in this job should be scheduled on different hosts. constraint { operator = "distinct_hosts" @@ -96,6 +110,12 @@ job "prod-nginx" { weight = 100 } + # The volume stanza allows the group to specify that it requires a given + # volume from the cluster. + # + # For more information and examples on the "volume" stanza, please see + # the online documentation at: + # # https://www.nomadproject.io/docs/job-specification/volume volume "prod-volume1-storage" { type = "host" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml index a302d21426..617304aef6 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml @@ -40,11 +40,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v2_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v2_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v2_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml index fcd416678c..0cc15e23b7 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml @@ -39,11 +39,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml index 12546a2b59..75f43beba2 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml @@ -42,11 +42,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v2_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v2_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v2_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml index 51f447ead3..f8662eac43 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml @@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.32:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v2_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v2_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v2_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml index 19ec2c7ef4..ae47f9f23a 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml @@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v2_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v2_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v2_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml index d55a48ecfd..50981b8d2e 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml @@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v2_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v2_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v2_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml index 321c1597ac..48402542ce 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml @@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v2_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v2_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v2_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml index f5e1ad9636..aebc8b3907 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml @@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml index 8ce57502ca..5f82e294a6 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml @@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml index 23ebc52c1b..c2a7bd782c 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml @@ -44,11 +44,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml index de6cdd0b2a..fb10e11c76 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml @@ -44,11 +44,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml index eee8bc942b..5889b1e8b8 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml @@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml index 89ade2c689..419403890b 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml @@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml index a1f92eb71b..05e3b2a3af 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml @@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml index 50cb6c8cdb..b1df9cc69c 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml @@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml index 4c252ffc32..22107c4f1a 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml @@ -48,11 +48,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml index e976c2c413..f8b7c92df4 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml @@ -48,11 +48,11 @@ nomad_cpu_total_compute: "40000" # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v1_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v1_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v1_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml index 2109090698..4849733e18 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml @@ -46,11 +46,11 @@ nomad_volumes: # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v3_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v3_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v3_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml index a00e97ebd7..e0058185cc 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml @@ -46,11 +46,11 @@ nomad_volumes: # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v3_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v3_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v3_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml index 7a97c9757c..893b33e5bd 100644 --- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml +++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml @@ -42,11 +42,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647", "10.30.51.30:4647" ] # Consul settigs. consul_nomad_integration: true consul_certificates: - - src: "{{ vault_nomad_v3_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_nomad_v3_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_nomad_v3_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_datacenter: "yul1" consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" diff --git a/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml b/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml index 89121fde2e..786554eb58 100644 --- a/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml @@ -61,11 +61,11 @@ consul_user_state: "present" # Conf - nomad.d/consul.hcl consul_nomad_integration: true consul_certificates: - - src: "{{ vault_consul_ca_file }}" + - src: "{{ vault_consul_v1_ca_file }}" dest: "{{ consul_ca_file }}" - - src: "{{ vault_consul_cert_file }}" + - src: "{{ vault_consul_v1_cert_file }}" dest: "{{ consul_cert_file }}" - - src: "{{ vault_consul_key_file }}" + - src: "{{ vault_consul_v1_key_file }}" dest: "{{ consul_key_file }}" consul_auto_advertise: true diff --git a/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml index c40fab79e3..9d1ca1980d 100644 --- a/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml @@ -158,7 +158,7 @@ mode: 0644 notify: - "Restart Consul" - - "Stop Systemd-resolved" +# - "Stop Systemd-resolved" # - "Restart Nomad" tags: - consul-conf diff --git a/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2 index 11743fa420..e220c8f687 100644 --- a/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2 +++ b/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2 @@ -14,6 +14,23 @@ server = {{ consul_node_server | bool | lower }} encrypt = "{{ consul_encrypt }}" {% if consul_node_server | bool == True %} bootstrap_expect = {{ consul_bootstrap_expect }} +verify_incoming = true +verify_outgoing = true +verify_server_hostname = true +ca_file = "{{ consul_ca_file }}" +cert_file = "{{ consul_cert_file }}" +key_file = "{{ consul_key_file }}" +auto_encrypt { + allow_tls = true +} +{% else %} +verify_incoming = false +verify_outgoing = true +verify_server_hostname = true +ca_file = "{{ consul_ca_file }}" +auto_encrypt { + tls = true +} {% endif %} {% if consul_retry_join | bool -%} retry_join = [ {% for ip_port in consul_retry_servers -%} "{{ ip_port }}"{% if not loop.last %}, {% endif %}{%- endfor -%} ] @@ -21,10 +38,6 @@ retry_join = [ {% for ip_port in consul_retry_servers -%} "{{ ip_port }}"{% if n ui = {{ consul_ui | bool | lower }} -ca_file = "{{ consul_ca_file }}" -cert_file = "{{ consul_cert_file }}" -key_file = "{{ consul_key_file }}" - {% if consul_recursors -%} recursors = [ {% for server in consul_recursors -%} "{{ server }}"{% if not loop.last %}, {% endif %}{%- endfor -%} ] {%- endif %}
\ No newline at end of file diff --git a/resources/tools/testbed-setup/ansible/vault.yml b/resources/tools/testbed-setup/ansible/vault.yml index 0d583e42d7..2c10624d07 100644 --- a/resources/tools/testbed-setup/ansible/vault.yml +++ b/resources/tools/testbed-setup/ansible/vault.yml @@ -1,585 +1,706 @@ $ANSIBLE_VAULT;1.1;AES256 -35366235646131333339643161653631353030396430376631623938643038656362323461393163 -3739343632323734376236396538616434653436303165390a626664636637373439333238373964 -65383037626638343730646337643336636266306538323830363730623438336463353536636132 -6330396333616237330a653461353862323863646266643063646663316661303265383131383630 -39633133346639376331363332623037303131383634343635393463303839313638393566623763 -61376463333837313230633333363066326232326436653038616238653365356133363162623530 -38396463663265376564343935393163366136373665303862316165373532303534303563646333 -63623066386436386364636661393532313061303066643866313761636561303837623065623534 -63636639373764363937653161326662646633643532646536336532376666383934666666396261 -65656233326264653137353661656261353236386531643939633030356236336330343262303565 -61636462393830623730656263636661623936363232616135323534613836303336663336663964 -64323139633266616333346335643334653333626538623030626433333132326532373736366361 -32343266373530666234343361613632656530323364383066653562313363376132326632343031 -66613561333433663062343165343764633939343635343638343834346131313062396665626337 -34623966663832393964396335363137353639613262356663323430616464323435373936396339 -38616233303432643131363466373231363036626432303136613032303962663465656638396335 -61336630346232313733323539643038316161333030626236386230643032646565613030323832 -61393463363739646637623365343063303366373630623133386239636337663537353938666363 -63643765633739393530396266333533306637393265393339336137363035363331663930636532 -37313932343034346539313931633231633861343235656366613566373539363436323335633562 -30366536323838623130306434643439333731663331366137323330366435656533386633633234 -61646331373562366538653863316363633966373832366162633262636130666234386630376538 -35616662323862613938383566373536616134653664653763366161363563396262386264326639 -36303264386239333030616531323965636664336265646432653934643661663663303735326566 -64653638646133666662306234643336643038393766346261653035633630396135373438343265 -39643266373338326564326137376232633063316131383839666662666165303634333262336137 -36363561666230323931343236656261383930326433376562633233626363313662633733626261 -33333038356331386462343164303037346233323065313861623865613030613963663962303064 -62646438346566656334663537663933306238623839353665633835626466396661643338333461 -37356530636463636139663436643961353964313731333334323730663361373530633464323335 -37323465336430393337633532663632353365613264396636623233303935386535643361313162 -61336333626538636466373032636331326435613135373438343838343734663863373766366533 -31663434353764333636363161613732663761373235393334306331333361313763313730306564 -31303135613234373366396466626137396533666365393330636136303361633066333137623336 -38353939643763643163313732613730656635306435633664396536636665316635666166643065 -64626366663539616131303461373139653531666462393862383636656631626666356661396163 -63366232376363326639643936656432313464626539646330383433396161616231316430656365 -30343830333038356134353730383963313934343333316261336263333730656461613763653366 -39363137663264363534336365323666336663323334643163616362303038663637396636373263 -39383165323330323436393439316138393064353931366232643963356134643365346264313831 -66383831653032346538313961353532303435663966646665336232633064353762333133616234 -37393031656462336337353630333135306639393361333566393832303864646664313733353339 -30643966633363653333346465316665663233373165346534623763333931623630613533366238 -64396363613538313362393837316334363731623333313736653465333366623362343838396439 -37333663656563333562613337653363653439376666353338656638613463333336323936393830 -65626237306537666639636533326631633732616164383533383139373534333363623933386366 -64663464643663636433356237656266323534643536613332653834333738373335343431646162 -35616365323366653935666165373565643462326363343931663963363938653063373030306565 -66303665343964393365373361356466326333653534383062613135643632303763326633613763 -64336433356635333133653031316332383830376437376232623762343230356461623566656366 -35616366303036353735663439306461376537653734626130373537616435383132366135396430 -36663234613830633830343762333062666466373564386435613565333630653639343262656534 -36613464353331323731656361373963663832653739343635333637646633313434306130353537 -63333634323039663161373134336165393162633465333137316132646134383439623639323963 -34663033353134313966663265346462366538333966383864663934383565636136363861303235 -31336634646461363939653337616662356437373131333461613730386662393138653239633461 -38333763653065633965313839343662613836393830323538326439393061653534316361636134 -39613735653437613537306364313165636633663963323331383463616263303739336330613265 -39313538386231663731356263343335653461643766663764623036626266383164646165333237 -34303162393639666365326362393532313036636235366165616538623362373638623131393066 -62633931623865343362383464346637323735393363373530323131333730313965363236326364 -63656433663234663066646664363761313734343635613264316266653939303930646135356137 -63626538613239393237643366623732646638643535643161353861653432346535383134633764 -32636562623737313937633338343065333566656638623062636635383966386431353062623632 -36623634643362356435623030373632333736303232626166653833323131383732636631626338 -36373434326433303735316530656166303365343031303563373465623637353165323461646332 -31663832326332313734373333336634323237336437363330356533343361356536343365633762 -66396165343430613765323864663235343437383536613131313664386266613035366337616465 -64666463666564363035613737663933303263373365323464383661616264633662323465613166 -39636132626463303861343764656133353665396534303437613737306665616663323138613037 -38376166623130306632343633363032346364633061363233643863663736343336343539363730 -61646363663839393435383765373632303937396337313637643964663235393165623139623833 -65333165373736323361353339396433656262316137656264366365633762323533313466623866 -36316339333239633566386466636361376533303130663064386166306332333363376531376462 -32656334666432343433653936343466366161653839653962376637396532656331376164613362 -37653361396630653566336231373031336661386364626239376465326461306137656465373666 -39616365386533363464613936613263656431336131626662333563316533633538373339333561 -32346163386665633766656161616634373934333063656163336533386465363937636431653564 -62303064383161313037386130346630666134393834353763306432333934356430613232373835 -38396138626336666438396461356161333132363332343234333036323636373764366238643264 -39343964323736303038613164336564343431663339336533646337373662316264343337363536 -61623365396637623866623465373339316664643263393038333437313862656631653432393462 -37383234363837343931306464326634666433376434323532333136666534333836643338656437 -36383130363033363837366437323565376238626632643038366237656364636431376331623462 -61633039353761346638666466393966643031623061373839373538613832326561303835386239 -65626461343031633237336439623963623034353264633539633231363230636564333634643137 -32373537643035313664333464323039346163376134376433616262643965613537373637323935 -66353031343662626438623930373262356465316630383461656339646638656664383030643532 -66303263356234316334623635383338353031326164633035303162636131336235333831663630 -35613933643538363330633563663338316434326261363734333633303963386564643265343066 -61386266643338303065383130633065303037376362363030376337326238303339653861656233 -33346430353164626463653230613033373631666365396137623065323937616437383235373333 -66653037616134303765653139373465363465346130366536613831613431306131353938306263 -34316661663263353566663861383239396538616439633434323139323136623837663065383834 -61636137393662613035656264386466303331343833353332346430623361366163393636613163 -32366139646263323063323134303365333234363833326339343030656431616462336466313634 -35633264363939353133636164626634366430626131643035303761613630653132323930393139 -33333164333166353736373439626633363361623439323438653936313934663839386639303630 -66653431393331306361373033643535353137626235633861376232316332316430386365346163 -32303830353433323834333037616530343832643136646239373738376235643762366266626362 -30303035643237316430373261313832366366353536363032646330613965363736386130613162 -64386666356339386536313562333762616163653534373431396636373732663331613463306631 -66346439646630333637623531633062626531346533393065636638343337313838313836376131 -37653230313934393236393736653837393465666132633330646432393163353733353536383065 -36396331353933613835316132303032656632633737636464386233376139373263643664613636 -63303433346433333238306333333839306361306236333565393630373866373963326139393762 -63343933383835616333376337366331353534613361306230633564343538333131303366323662 -66313866653463376434623339346466643435313666616666373236633336396434316438613135 -36306335383739663431653235333062616633653635383234393363633937346632636162646233 -33653137336662653762303234303137336130336630663762353938303536383566613639366162 -39653232303135376632316139623664383032643133386534343738373365646165666231646563 -34326132386463626536313238623630646637333362326232633163626237326161643730623165 -37313437633932316137376435363064643834363133326436376139353663313562653935333061 -31336461396530316665353662613939313566326661613432383662656130633866393236303431 -30613866303933646236623834623936333466326437333338653837386435393162663764653732 -37653835366137333464383630313039646335643631393332316536656631613762653932646234 -61653832623737663534653164313764306433643063663564636665343266366439613934613037 -34613032356634646233653437646338373965356561343266653562653533633039326561353862 -62383739366335316536663735393430623738366130353135353038323737636432363935353231 -61623563646637616332626638643761646364366361353363666133333466343535666530643235 -31636237316630316634653432363461616661613935613163313331376463653261313535653730 -64336533633065306231613165396332343664626632653636346533366138343832393435333632 -35323962393163333333633734613364656562393039376131346333623731346636373761623134 -35623565353332383237383264396638306434623261313166363131363834623466663062303834 -64663961333338396438333566373562666534616464623630656133373836393433643165363934 -66653966316439646334616665653362633338313632666534643135393331353238316633613630 -39383961356266363230343634366631623032386237363637653030643738393361633839353163 -62366538653031393136313034333466613930363137663732666534353863643034653531343332 -64616661393030356531626137643538353939626461623633626435656331363963356466356631 -30333335643835343130363762626336646630373238303438326531343539643932326665653862 -34326436623732643735666463623561366333646665323666333663396234346136306635643464 -63343239336433626537353633366362646631323864363236336232303331333462303530363839 -30623038653835666131376639366165653965323435343338663662336237343130666136663066 -31363166373834373132386161306161393766663466383064313633383936653164663937643736 -30663233373139396438363336613361623133373830346333326135303635376362656139633464 -32383239353931663132393537663037616338353533663138373036353638333732356431616432 -35626530303361626432663732333539346461633963333730663038616563356266323061613431 -64383330363866326632316339333034626664356239626537373835633830333562636334336461 -37323830346136346633616433663961643137336439623763633936363430323034616538663134 -31623233346664643439356337326333363230326366636538313535666466306338643166353964 -33626336663035386564663965393065643562373664643661366638626265636236363961613965 -32636366333063613064313433333737373564346636333939393635656134643237623038343932 -65353134333234376634333637333438333737383738383461653436613266636161336231333365 -63653538663566383338656632653261653361633233636666643335616462386339383030366165 -36366338646332326439613834376562643966666434376238396663636630303835303031333438 -61623863643439646365303937356133666461356464323236346436353239633866393032626534 -62303561336536643265313636663639383164366233303966613364356262636266376131323662 -34336234666632363338393866326332306164313032623131623834666137663138353235316137 -38363363646136313335353834656430326531363864353430366433656261393936393364363966 -62666166373266633163636636353632663464616333393630626531306663323134646166656430 -31393436306336653237633538363461373139363131363633626263376161643933373439343333 -35343562616364326162623038616339323266313762326331623036383337326164353261383532 -66643166376330313634393065666638623831393161653561633135626462303566653836303434 -66376235313766616465393866653961393430646634613563303362353632373032656532613333 -34616439363237366332386161326331663237393439336433386466376462393139656634323230 -63323366633136633439636363396234393966333731393661323737616466316535316334613964 -33366433313865666335353663373363646232326333643833383664656333396634316630393539 -38623132613338396566656632623934343965323231363732373563643936636239303634306136 -35323230353837633765323532306239346539613833353936626561653261626462653436666533 -31313065613137613437303564643961646630653038303465316233373831623532613236633763 -38623131316431316563366532326532626538343635623762653536663733363462303162636130 -37363331623764656430633237333661663061343663366364373833313065333137393230363134 -65376234313231333964343365626361346561653233313665633062313837356363636235303762 -64636532383834613064663363323561306339353038323839356133613539666235376635393234 -36383436643533383438373762656338613835343864383431326466666536333137623636633938 -33326565356566396463643238626465376339616262346365646533656630306137663362636234 -33333238666131386531393939363662326138306563613139313964343665373636346461336434 -33393535393336626437613836366664356637623937646337363935666632336131336237316631 -62623365343337663336626631656466303762323162653735313965343936373631373963383538 -34623836383731386164386162303635386630623366316238663034643035623234303238353163 -36393664303431303034353065383163396666333036303437373364393432376330616330306538 -33626530373266613862353538653566316464666337323939393463303463663234653466623036 -31313561366633636532356366376639393138383931323439316139313236326630346565613965 -37633134646661626139666566613261346334656563633735366365313939356164333332356164 -61646637653561613630356438613462643762633732313132323331343931346164633430373335 -31616339353739643636613061383630313532306636356534326138383331326233333631663735 -38303636663439626139346532363536376362316363373963383765316663396134373266613664 -66303737323763653765353630616166656130383739383034663438346663373934613331313832 -37373535376665616237313765363866356439383465656537383761663465653266353264316231 -33623564383138356264396134386264366430363539396431666633613733303031336134313734 -63393633326534636631306535383236313135363962303665646536376364316464626139386462 -32643831323238363966646531613636616339316331666434383838396565626136376364363133 -39393661336539656364653361386366326164663330633130303635363664363038643831643339 -63316131373935343530333961363165393936653735346662363531666533343963383839656631 -31313463353731306563313562623364623363346266396234326264663630653361313666303337 -32366463313466646439613562333066383834666336383763396531633139393132616130336631 -61386532653738653631656435346235303962626162393164633935613532333830363866633563 -37396639393535343934663536346266353233316261366633626437636130626234363163383137 -32323832306266376464303931653731653965303962303533303736346263333732316337306333 -32303132353061396333313433656632373239356532396435333338653261653166316266613538 -31626334333138356338623038346333333564333732646664626232623134376132366634363032 -35363737303339303862336536653463633234656138643865663262386462363636363530376532 -38373363363331353437656666396139343732613730626661633736303264376639663964633036 -37366630343266323037363035353763633161376634636333303565636564646163646430633939 -39353563343464613964313630353434616336373531396438333831623432316430346132333139 -35643932343938663464316365616338343933363362393637376263313366303465626338653234 -34336465376338313039333733356264643761653535363165616261333262613132303534353736 -61313130363634356239653162613566366632373931363537376137393834396331383636343061 -62666136326465643330323631343732386434656362386630366462643433393334616636393538 -38363939336336643465323732316365616662336532356230323932663733343937353631633736 -33616534653235333639656264643266303130386330643332623739653531636332383339623065 -33623064643939383632346163323734343366663139326665336462303162653662336535653264 -36613865306635613530333966663462303736366432386634323136643631616132343233633834 -32656436376165356665386663333161303232326239643666313637373531626163636631386134 -61313134643735613336343736396532663561383561613566346432323332316232393139623434 -64393730616466323336303637353236393363326530623230663764653364373564323338303766 -30376130613766643530633266316238306433366239306164323266363430303834666564323463 -34626364633938396534633737396530613430366166383138303237616531666361363835313230 -33306138323534346265626665313962343766333138366338376637313034363061643133623431 -35626166363439363735653038616362393464656563343034333266363030643432386337633136 -62393934383835643534343932333962323062376561376630343762616461363134386365623331 -30393462313636653161656261303638373163373761636534323536346534383863383063383963 -61633333323565313366623832343764613930346134323263326163363531373631316136633838 -39373633333039313265653065343733383938663262363735333730623531633838643937363135 -62626234373066383831396637326134396562343933353666663531623762653333336231303265 -36643165343839623339643663366666613866346162363835336334386139383632396134366366 -64663566336532653438316133356466343061633239656666306366313232313936306433623461 -65623131376164353635353738623536656335393531326161333937613362353232373135306430 -31623435343330396639393834643535616632353634653236313030653539333035313266303466 -65303761376534343165313137396264326662313433396436633035366564373632373866653263 -66386134316336396135373030343031343135346133313735613939653865366533663666633531 -61623763396530386662393636376462366164666637303334653738383463646563623937633463 -30663363316563623434656665656334663832316238326233633461333161323630346138313065 -35376439383939326365363434373438353136303131323364356162393236653164613661663536 -61326164633661383762323962393164396331356634396639393736393166373432363336626630 -31346433353862313265643135373437636537643337383435343231373532363465373964333331 -33393135646465323763346130623737616631313131643666636465636430393664373363636162 -37653965313839303063656661666532326630393132356635626666376638376331326161393835 -33383731656537336438643463313337316334663834393266643065633335613565346239626337 -31663635666438656431613565363063353964376565623336316162653131633631653739343836 -39336531626434613130353564643061343333333861346131316463333531373234303736326532 -62353735393631393434343763373062343536636665663133333336326131373531306237616466 -63393361643865383965353663623863306131393464636533396263316135323433373362356532 -61333365313538313333343862336236313035306133313565663434326662666163386461656636 -63623936626464646135393430373236313865313761346539393931663262386433633431336334 -38623961613764633134323930303639626237323962376331303662613832333738303831643163 -61333534323663363032373738333135643338303761313966616333353232656535636138396665 -30323335333565303561373939306238306439373538303463343534616164353566393336623935 -32666463653739313165353439613930313566376532323563313835626237316332393134656638 -37623864326638306334386534623035633937356439306634653237393839333065623866653365 -35653964623636626665376237323338353961363535373363323239356237393835656538363436 -62366438653536633562353863613434363830636339323630333938353234613461396638306231 -31326133373235353563353863396266623432353536313831633261333265373935303531653632 -35316432666237656563626138376365383036633736336339356665653864636133336432343737 -37666130396439643834653838353264616162383837363039633433353732393534333163336562 -38353062346430633632356330633035613038313262353761613562623963303236663365363164 -64623637343838643565383938653536656235666162613439663061323134353539383337643239 -66396131343530366131373432656138396132336133666438343633373939343563356136633636 -64306266363531373535313962316635653261366634383735343438353337653232666466633237 -31643935646434356335303833343835646161373138316133633938643564616634396332363535 -30326231316264666264333436623366643337653833393735303166643730663833343366653634 -36343430313239353738316330303065626135356437643463663736363732663634383235623265 -33633865346561623738303066363438343934333337343538326162303264646238626331386165 -38366330393466646632326262343137383662623936653365636334363634323330643536353930 -38646363633666376566623562356161376236396336346566303463643965323935623363383034 -38323335343737303637303233633431613764363538666665313933623231383463636136356439 -63643361366536323637316461383365376232323634326135353936373962353732656334626163 -64346361666666336436636263336133313266353466346535306234353261633332353731646337 -37623063666339383662613663396630643330393234336664306330363033346363303230633635 -38643862616135623165616530313539373131616230626661306139356134303731653934313166 -32326366393066613062316663666537326238626139376166616363616236613564626534393633 -63303264326331393637323936623734353064393437353130626531356464363262666663623138 -66363736646364343938343666303338653930376266333832396438383236313130613765636530 -34663234303339386532633562623838393635373965366263653464353835313436666638323439 -63363630366661303163393830663134643563346633396266653239623337353836336436323462 -30363130386435323264666335313937653230643336613665623963646236356130613539373738 -30336234356564383662326636333034326334393061346133656161383364336365643262663565 -32333561323135663364643836646135356637333639376463336232643936396330383764326535 -39646233643832343561383339306437336566613838333235643935323635383865646236393962 -38616633376263303534363838663435346131306635363962633539313334333561333765613035 -33373536393533666237333237303636643261313762343031646465653361636461623030653034 -35346662343366353664393437393536323263386534323562323361373037653063386661643137 -37376335373730356131663263653265376262373233363635326636653931333332643761356363 -38393731663338396435626137323031316335326332663265653566636664333933656134663836 -31623661616331613135653932646666306165653061643061363237613263323232393837326334 -38646338616166326435323631323733343861373533656635666535666635343137316238303334 -33373439653231666562343135623862393066316331616563643566663061313162323364613562 -33393337653637306264343833653462356237623137303034303438613265313139663433303837 -34666261616532393430623261316537393633623430626130363938376561373933653333373461 -34656138353231396261346234323834323833323866376138396131636532616534623161336362 -30363866396465646266666366333866613431346335663333393434363662643662383566363239 -61313738393539366630666265626531393537383032663339353266303632656438383565656336 -64616366636537326461393632623562653430353362626466376233343263616333306531666163 -37343134336633393638653465613130326431643563313538666131346265313035313036343031 -65666634356363636566613265316164623862303038373536646136643065643432366665626438 -66373434316165636362306261313430376635363134373430333665386635383439363763383762 -34663261323761666637373665306337323639386634393439386131313565326535393234373339 -65636633663362353436306234303938633131373633343264323338626362663331633935643061 -39653661306465346661313164353335326336306534383631343761376438306332613065313538 -36343934353230313564613938383731663261623661643764636231316339373330633533323166 -38646262363863306566323162306536633362313131356132636639303032343464313764343335 -64323363336638383630613331393365353766616630303163636531623639663331393034373664 -39303336333031643332363430383937363432306561396661306232373262343533666435646264 -63613561346465346266356462396565626666353436346363643266656166313862393766373538 -33303964623130666638373937386238396235303332616266336163623538666438313638363136 -31396436636233663961363935313063613463363564323833303235363436323236396561316266 -37646563336464356231633633623564643339613135616561376665393865316664323636633633 -38306434393162616363656337363533373961626231323564366264383138613965383936616665 -31303939333166393331663362356631646234643732383633643061613161383830666432646337 -31363862396465333363663238383165643431356362396561303832376132343838656436663364 -37393731373732616431363839656361623037326436643539306136646261636435363433326538 -33376161306135353032623865383965666535653832373065643638633338393130353361333635 -65323730353962326161353864383763316466666332613736363935633239393164646432643763 -61653134356236363532383061323134643730333263316430613530616433336138353334303336 -30376233313832666461336439643538303132623337636437653036613763323533616230356631 -33313862363630353939303638646431656639393134656464666439323632323937326165366435 -39346561656335353534306434633639366336356635373830316266306164663235383164313835 -66343831303932353962396364616462353030303536396538396639393931363030363065636531 -61306533396264313338303439356164386638653836646633373939653734626266303838326239 -63346539643832373663643464313064623938326132633464623363653138636361653831326339 -39656234303433393939313831663832653564633564633332393265653561383936386133323461 -63363235653835316537396135666136633132373838636438313062353030613164636466363734 -64663530616634633938346534306435663931333061313831313565653137623830663435366532 -31303361626362646431636633313733363661623135306331313138323939636138613733323039 -66613938303963393666323164313632396635643364363639623339353233373536326431303931 -34333035333838336564373833636238623633316631306466366666643265643364626363333662 -31666463633134373534613961656565646465323164343330323438343936636463323561646435 -36316364363662393864373334383039643762366133363562323534643733333263333232393431 -33663732363539313235303364323936663733316234613334363263363434333135623862333737 -33383065343533383335303063303966326431333464303837363464323532623331316339393734 -32656536373332636534636235623039373162613131303333663164373366373735646531393434 -34623765376639343336653530356134633463313535303232653130326631376430323932636266 -66373635353062333736316561613762386138643364363465323130333266316562323732363330 -39356136613937333938656565613765303430613039313835623130333232366465323261626132 -61333138366630623262326337373666326664356535333133373931613730366665396235346538 -30313564376132653339373663333533373838633835666330353335643636316634653438393663 -64653864333938313237646465636233373266316563393861633036646562303030326139613731 -64366439343633333364343362343932343039626563326633303630316633383164623634333338 -36313637393430363937656536663562343562336231636366663135626261306236363834626162 -33356432366365613161636364383237363338393637646430373662356436363739356666343236 -39346235636538353536333364343930616637386231373762353661363830316239623833663734 -36613666393837663033646432363632356534383435333665643666626334346334306236373061 -32396630343933303361623530353361346538346639306465616533623039363634396161376430 -33616633613437353763343433633366633331343839333433666532646630383564613861363435 -62393738393532666633333565353834616463313632343161393239633631636264376334353239 -62366639313132636265613434633339653537343635623037383034393037363931326139376263 -30346665323335613363346262633833393265396462326439356631323936303339633664363564 -38393530386530666630663238366437333463623062336162313833616438383831353366353534 -35393364616438643566393731646261383335636436346438633630306266646464313464393138 -32613137653139376139323263396336353261663636363235353762333536343436306133373864 -66346231636537313763303435343032306535616139356362333536636339303965363663373137 -38303832643264336536396232336562366261643864643462343662336164336439623431313763 -62663039643636366361656239306563306562386637623666373838363365653137323965616434 -33363934333161313036396132386130663866316635623931393366653834613535373835636330 -62636464666561373337316536653539306564363435323038366135626231623634353133663663 -66373562386265306166663539323962393231393830663234663634656635316135396134623461 -33616136353666393938633363313562306261366465626666643936666331393161633631313964 -38363165363465356634303630373435626364306361653638643038363066663935363365326662 -64633661376338306463626130663165636463393035663362636531316665646234653430386435 -35353535343136376635353465363665666363353361333032663462316133633262633264613666 -36323231613532613864626237363033623862326163646462383666386230386464313737636331 -32386564393636613639663165663261323261376364363230323934373463336133376431393039 -31383532616531383637306433303131363431626566343066386538643339313030653839383532 -62643163626637623839373134373566666135633361663932643536663130623363623737303137 -33623532313430663634386264343336363534616536613832313263663037626132343530653732 -66623132636437303266313539653238346238633834363232323937623538653934373830663564 -35323732353734656433353433663164343662623936616637363262653431383938666639636433 -38626366643131393164346261666166643563383839653465396161656333353032353634633963 -30636434386661333639316131643861656264356663353063623163643462373630343535373535 -65623238633863373136386131663861316663376665653466626434636466303930666438383232 -38303234346331363163383637393763643534623932373931326632663661376333636365663662 -34663030623362383163613839343634663762313466383533306239336464626563353731353234 -31633934636335303962343461633565326139613139346463643865613766616435313866323335 -37613530306332633661623231666437383433366333336165633633326165393463313764356365 -61343137326562333039316338353033336331663636366339366236356434393865353838323934 -31666562373238666635656632383738386164393661383133636331333130623734326132626236 -35613731643466366464316531346663323662643961316438666563393036666332366230353466 -32643739643136313139383662353066326335613930386632306337353534613564613836343061 -35613862313730333637386262623530383465323138363032626639666639623932643934363532 -32356661656634316534383863313739613862363737356333386265653730346631313538356461 -66343337313736383733383964393066666539383031353531336234653131613763666138633961 -33383139646639373836336137626662346336383536396237393366303630626337323965373039 -35343466373931626330303031623333316462396534383364663461653136383162346366626265 -31653432393063383734393835643335393263393234393462623561663461363732626331633463 -38303536313738393430633839373765376261643266633865336662303339396163636532636137 -35376236396361376262303834326331336439353865323834366166616334663266306635376563 -37323236643732333434613436656633666462333631616330356234653236383362636461373437 -33393963656433316161333939663933636231353138663464306463323135333834326534393839 -38633332386237373765616534633239303461633833666464623465363835343130343164633938 -61343263333033633166343764316132303834333064373437313762306263363438323061613738 -31646463306136396436306238393831396362396131353264366162326432313633306362373164 -38306464663066386539316436666564356562363238616332306562323965366364633834316333 -65303264643937643432303638313931623631396536663161313332656563653465306365623731 -39306263333265633639343931366231306565316135363162323464336532653631363739663664 -39373261383337613631353436373838396637663635336661306630633530363337336336623037 -30323664303430313832336261396639323866303539616539336530663732333864656235626133 -64636261373036626664306365373663323134343665306233303835313766326366363631316535 -35616235353663646364613165356534396535333063396537643338333063623834623663626639 -38366633396531323931623366666463633531306435396233613033323065613235316235646166 -31366638623039366466363863386665613061663533613138373364363931663764653561363833 -30656234653633663835646136333733333562643263386563663634663862313939383139356163 -36646165393931336230393566656237303363353566356137373436313336316532656332656364 -30386339363066386564343737373834316235313961343962353634393766633031636264363732 -65623833363465636466313564373164353231306139663262326331663030373735643130333235 -65333337653233326166353863346236633062636134303562393939623462316631623536646436 -61373862336334373239616631656434643737346561353463376335663232326134303066656364 -61353666333164613466366466393966323666386234373430363266623134333034353933313633 -63313866393633336661303334653237396632343836623538306665636235316565363739396138 -63653265353765626563306266656263336432383465383232343039303234623331623962356463 -65623336333831323936333262623938636562616634373738373837306264323362396564376333 -32353535396266373939343863636131633134326135333132323066383965313134663031326638 -36356135663363333932376330363465323134636532373061346536353335313662336231633235 -30346261633132343733363631633065333839316238386539356565376335343531623033303961 -32333665633465373637393436666331353166666438366262623339663139333064343233353964 -61313433323532666537333237306237383539316631326364333635663033313061323561343362 -31383436366165613266376335313364373538613631306335646637393030366239623938316164 -61633938653837383837376634633532323130653963633366363035343532356537323230393331 -37396232396363626639353735643735346230633733633162333164663634613665303938383237 -62623432306237343833316636353137646236333131306563653639353633353830663434313035 -63646131363334643461373565333837346533643665626264373935633830663034333061383835 -31383736393234383534326237373538333738623265386333623936343034616139306534303531 -35346135373863653064343331613966333732366361643030636231306462633764333330623135 -37636634356337303463313062393061363836306638663063643465376262393930663034343339 -63383239616537323938386636663536653038323662313831626132343436313331653032613734 -62643364393366356137636261366238343566613139343639393038306530346133386266313833 -61353137636538663939663666666437336437333466663333653633626463666632356361313861 -32306439633934386331666139663062396531316530323332656663383434643131626138346662 -65303133323733653264623838636231633666633236646333303437613361373136613435643930 -32626135386466316537666536303234613364393965383539653561356335653462633162326134 -63613064363834373162346135613464356538613634323937383236336365363165336466393362 -33636466336464623262376166626438353361656465333335306264623961313231613562356264 -30356536306365373061306265653364323934656662313563333035663865376334313333653238 -65353634343565336535663332333632663036353633613331366337333665333434656235653261 -30396330356466386334343931363763313364646135306162633131333230313238646264613865 -65386666333035343336653461376335333033383935633037663462363837323964626361623031 -32326564643533303330336338316235363964316237313631393736333539376635386533333266 -39316637663536333162303332346438643864303232306132643234633931376336353937353032 -31323064383761643561343637646137346561623831383733626232303262383931323137303364 -34656462393337376438326666303837376330373065653261383433393464383030333537313136 -65323765346238363863623239396163656564653062333861633836656363306263303763663938 -36396661643239613834363233323530646338656136306461316633373164646261623332343437 -38663632323234393237306363393131303833663935376334336435633538376461386233353362 -37633536366161306130623863626465316530663964323734323464626335303331633937313537 -39343463636135666563353463323038383762333636376339363537353636316136373138633961 -61336666653964323033643239363761346530356461646263333739323831323364373835376230 -66336561643834313334633761613138376335373236626435366266373363353030663863616333 -61366132336637646161366438313764356131333733363031653238313666663431376437653333 -63333635363534376433356166306232323261316133633861336631643566303465346366393062 -66633734656261356363613238633134623163643864623633663230376336346262663961383931 -37666230306263393439623133656339633532633763363131626361626166653930306235336334 -31333135326631373462343032393765363336303035663638396132613732363934303731313731 -65346136633439656236616463633930633931373064623836353861336330393737333465393033 -62313437616564343365303134346466663032316635646433366435316264613632343765663234 -66613064613131393861373632353235613364306632373838643234313961633664383232613931 -37653561313465346335663362393634613531353933613365666166646236353462373062356263 -35306338363962303764303834656631613363653564613037626262666165636661376539386134 -30366433663761396562383931623839316461386466333139633031343765316539353138323865 -32356662323136656362323231643632333336346339393137316236623235363737333435326664 -33626466346230353261653937373663393135666638346264646334356366656164313763383532 -34363139306165316632613861363962613135666264363138303336326135393561316165323338 -36393766643161303730333431643466663330636661633237306662643534656338653465346664 -36333632633936366532363264343330373964326231313131376462623961393837346432623034 -36353863623534666661363964343761396231613161353633646431653530353832663334316566 -62303639393166663833653465613566623263633562656330613838376436376632373339386461 -37303639646661616534386537666330346661346461373631336335333664383965643762366338 -38636139373939663738643336353866633433323031306139376635373238303232343362386438 -66663136383161346635626261333862333637373763386462336131306165303766316438316532 -36643363373866313237376631386561633436366332313162306338366430643839666636663265 -64393262643530336230353836346131633239366236623666343162383731616663633237306336 -34343430623931393535333939653765656266323464323266646361633036656633343638623530 -61616136656162616265613331393830336638316237316264383034363462666161373465396565 -33353363626232643264643333316135386234303536386530336235393462363564633062656632 -62663166383931366531333934613964353430316232613966316134333263636333656364363062 -36633030383836663133386630306337313236303033373366633432373739643635633538646265 -61633761353064626637323662326162663662333936323330666536333936613631666562363935 -34666330313630396632666539613938373361376634313533396439396132363036656564316361 -63633863656232393730613162376237363435343837386336313462643934633833653137323461 -63346431313134623061323661373931386335393764383866383531303934633234363961633261 -65656535623935633466376335363966643830343365346632353538333837333030313338653464 -33663439666165366366643236323766356365336534336563376462663930646530623238323336 -31613934626334333266663965336164333035326639346136386538303631646230623862303466 -30633933653937326566653533366334613162653234653862643038326237306564366339376636 -31393634383230333938376662373630656330326332333838333062343330303135363734663338 -63363933323039333538623666383236386634643930646331626631393038613333616535303462 -61303236626531393764333734363038393332386532393033656161636563393039323163373737 -32313261663130373866633733313034373963313831353766343834383563303238336565303037 -33626134326330373063646334346537383430393135323466376164363737306161373331616336 -62646566626630623339333762613435626435643338626239303337336234333632623639313330 -32333135626464666133383733393336613066383235303337346431343462393230623062313132 -36653937373135643036653335303965323930316636373632623737363161643533373837623535 -37653931333238636236663935643938373032656264323136656263303364356537636135303466 -38333330366261663038346366366665383961666164363435643632663434313838626634646239 -33363965386565653266383939353330383438616562643331626334353530616231323566663139 -66323665386232323063306666303737646461383736396162363230636434346361383564363435 -39333538343736343262336238333435663665626235663664616438393139353463393632616362 -30373465316464643131316330623465666334383130386462633537663330626163353065396464 -39376265376634376263313462333266643961643761373565663337363732343832633234613833 -61636162643938333539306439613361376535616636643764653533393635366561646238326539 -63333564646461653534393465313135396239343861356435396436373032353036326461666134 -31646638643937633864346361313837323034343163373765336132663162323537303732323838 -31633630616437343237393031346665386561353834373566343164663930666364666339636233 -65313062353162383165343261346231386233633261323535633163333836353665316230323965 -63366361356462376166373236303635663765393664643030626464353834633536613735366463 -64653738613563393562636663396637396666343764613765366436316630303932663132636634 -32623566393361336431353233643563383564316433353432313633336562393635373530366462 -38623534386238386534343336363966363436343234326463656466386230643761633538316538 -66666237663763613933333563653563386237656335393232376235613139396366616237376332 -35383734363063376632636465386366343530646161663362356331373439366134633839323130 -37333261323136666632636537366634346561666437356563383834623064356531636665373764 -36633637393434346136336434356265613434656230616437306361303032633932383266653237 -61393239376666653939303638643136396536393332653839386231373636356561643536643234 -63393839373334303536383161303662343866326439633032333634353331633466653831396561 -65306366653164313333623433366236653437613334306364633139326362336461343037343366 -33346561656132396366363836633934666661343435643561306235366661356638643133643631 -65666462396532373165663434623939306136643938633834373133396630353933396365326637 -65613562643233353434653964616262383561613964626433393863386663623838646632656166 -34653038313261366236326137396537313534663738333966613737346466666231323737396164 -34316664613238386665386538353761653862613739626237643337323333303838363236613532 -35343238393731393538316635613130633839623863663237633064333530656361626465366233 -63326365663638633436613264643330613566646139353965623638373563656466346632333464 -61643862663030613463343431333234363164353030303233336263643139323937373832353539 -66393232386437633837376137323433333836323833636462376536306536343730366661633836 -36366531346235366636346436643061313263643833383765306633396564656334363835613062 -35623034333665313537373833646232616636613239653136366232313036323634383961306235 -36323736663434366462353034633964396261653130303861633362353865663731313430313330 -30343834633363383932343466343838623837613136396366613938653263373331653530336162 -30326234343937373464653039303536313363633434303639373763663337643935646162393066 -61626433303564646136343864356263616563323730366361383136646636663339366436343461 -63623336616136643433353964313735323131656535353236613165356166646231623135323530 -39636539346566396262376637303263373737646266666132363632616563393137383137326536 -33646264663633393665333838646634303630313466633231363831366362356534626634633162 -32323930343333373038643336336563626333386635636664306438643034303361323265613330 -38643632383433383635333264656661353461363230373238313164613735333962326638313334 -63313432656531653366373534616261366366316535636437343537343764393236393439333434 -38633637316364616664336463393231636134653634396361326464643438373539323538353661 -32656331346138356537313237303064383537656464336536343831306165353634323962653563 -65643736323531373436626638313938393934366633333062626439303437383364323166366136 -31313365653039386563656439306133313330313736663836666131653731326638616232613237 -63396166363434343565386366623733353031376461343263663666636632616437316362303235 -66333037663538393139393161306565633266616532643538633838616334333365343437643465 -33363434316632356631353265363236396234383366383636393661343864356166363636303965 -61306135653564323465363863666161313638633530396339653362346634666630326239373433 -38363137313465306162326330333336366562663730623163656338333538333439613136623232 -61373165373565653637356562336535663932356537616166633062336663373063613037626630 -31623638313661383362323233383364346236623230343261336132656639386337663739623736 -39313665636365343934323538663064626266356631376239613234633732396132376233376338 -62646563633363363165353937316632353038623030313737616130326137633538366633626530 -38313139616132306263313761343334376134333036353235323930353937643865636136346438 -39393836396637653934626362616566316231623537303431303364323034353436333834613666 -37613137623630663261313762643431386538373233643961326663666437636336326566306137 -65376131386436313565343439646234666665336166393963356166306638373631366466666166 -39323333326139383533626231633038323235636364376661336533623537366537333336376266 -65376634393137343037323533653866636235303837653635306430393338626631353665366633 -30343762313439386666656338386233376235333837376562363063366533633735326163323732 -32313331383963323363333362326235623839333263626462313731666134316534323665313034 -33383664373963353661656361366465336530303762646331656266663961366338396361626533 -32383265316137353237306433323631396437616634613331646265633236373261663038626338 -36336362663961353665363462653534383136353232643632656437323065663238383338363766 -32633331626337366566633534356366373638666563323864636164353061333538613963376234 -31653931353663363066333364306366326662303538626231336161393537326133353963393132 -63333230363238613437386131313636326238383137323034633465376462333364343962633266 -33333965386535313266343964643036623463643161313061353261353366316630323863383130 -30366630326136363536626635353166613034363038323532326263363833333362303831663661 -33356463666236663636313037646333353862343833333436646136363232396634643665366439 -61346639336635623465323361616233616161386664366365633862393264313964653536386631 -37303833313930386464396333386432313964613435333933623832313131633339356561663163 -32316462376430666338333661353935646662663662346362663636653236393161383662656363 -37356236623261346433633734646539336162333263666333626562616637636263646233653339 -32343334343166373130303961306233613932313165383438643634613733316534393966663761 -32336235313731393630366133346464666238323538353265663435356264393231633632636263 -36646563353364303662383866323431633132643934633437383162336539366538636363656165 -62393837633839353939373965353665393765643262306130336665333738393137353338353963 -66363133306136636333353665373439633663333436666431643636643066343035616562643638 -66623735343732626431303835313162653765663836383130353663646533356238353065373861 -64653264666564313263386234306634316339643133303361316165636661633439313731316564 -32613464663735306566383233623061633862323838383561356339653861376232666462356430 -39316464376231623838353066333666393238633135396339653233326132363163383635353536 -35366663623237653666396638656566353136326237646638656661346262623461373466643963 -33363539316337363239343664376233313136616564633731383863326262646264343837363562 -39393463353135366335306536643136363136343365316633646338623761313639623033653038 -65373632633731313539346339663465366531333266633461623235663631643264356265623866 -38666564393635313935636266613333613566393565653939353766363030363131623636316331 -39353162633837636561393530666336383531326538386239393261646261363934366335646335 -36386335623530313363373165356164636430643866313763636262613033623562353231333539 -63323138623432383235393637623633663331633739373633336335303438363537653736646239 -33313531336139666562366635383962373334333939383766363932616261353733616461663239 -66313739373334326337396363363339613536643464663962646637396439663534376436336161 -33626237366661653861643030376665393861643131333165353837396665353766323137373232 -37663363373639656562353761663161626164646366336162353630333134626631356530666465 -39336339663431313562333537323131336566366461333933613165376232386266653939626239 -66363761343864386165346531383162386434366636623363623331633131376339336462633535 -32373362323438633736623066636238343432303733633964353261663265323131636139333662 -61663461386136333734363130373637373636663763346165313137613232336665616633616262 -64376465643163323763 +39626435383866646264643632343836383132616162323536323732396265373539616464373932 +6237636263373339366163363739613139383330626437310a343862363835633663633164393464 +34653061656331363864323363663932306637613937383534343963316364636635313663343664 +3539373536313461350a626264363866306630656464646439303338383535323863393537346262 +61346533323162653766343763363934313937653237663437393133666463363962346331343836 +33393533313737626636356466623566393232303037636266353565653130646434323338376136 +32306537653134633062313732623830393166336135666263343933323138616436313632623533 +38646539623837626132346631393964663062386631313236353563393131376130316666343562 +35346632316461336564393264323632643232663136323334336336626339633365643565306436 +35333365356637316631666661356431396635636431383032643566373666363936363462616337 +62316234363963306338366638663064396365373264326635376134356333626130303834383534 +63356363373035623031666330626463613563313066303365303430643262346561633633666466 +63666661616139366431313832376665383638393835376261326465353938333963333264653236 +35613664656363643438316232306630353361343030353963386666656166373061666236326664 +63383033633733633361383061316232306566353062616163623563663032393734353963303361 +34323330336561323734373430323435393731323931343335613935396330663533323137323234 +39333132326364646336613362363365323331366430396535383138386261356534613832393863 +61363133356435303964353637346436613633366336386465326336313935323538643636313331 +39663832373337643865386164343764613764346331633261653039613136386636366431376565 +36373431303631323730343831363837303665353461303130326430636161623431613730356134 +66396632306139373732636165313834366339366363666566306461366266356338346566316363 +38386564313665306239646436386635396664643333383736396131353535336334383765653961 +31643833663361343036623634326662333935343332333066353732396132373561396631633265 +37643733393433336364353630666136616235656638343032333632373366616634343130313536 +64643834643236363731353664396636613266656263363664376539306539346639313838663738 +36623634396638313861636438306136613433313062306537653738316563613631363566623134 +62323161646464636131326661646535313436396534356335366564373165653662613536663561 +32366666356339326264326539393239666234633663366261623933366636636161343233383932 +34336638363864346436613164613161326363316431303963656233306663376332373731623437 +66353636336462663730316161313236393264633633363965653433306639643938383933373062 +30323331323735613139323963643335373335633265383235343835376363666132643431366665 +32396465313434343534343433633432396131323635356265663939616436343137393561633734 +36383961363964306431343939313837663166376133616365663939633161326338306561356666 +34663938613865383739376534306333653135383431316464613432366566623362393065306635 +64313737363065336234393463316138313864386163633966336662313366396431353632363365 +62313036656434616136626331333139343235333930363166313833306438616364393065333963 +36396137656634393066646330613365316562306164326133663365313938333337386137383864 +61376333346336396537613933323261663536353161643431383636316235393035313861326230 +31623566363138663866326231376561336534366435626134306463323032613630646361343165 +38663662653334316139313866346163623461656335616232353636636431636339313239346661 +33396133306132643732366232353166613263356165663866626465343936326461626336376462 +34376431643730616461376261356633356166313131623837343839323935343531356263336230 +62323236633339303031316165326362306535653064363862663330393034303964353437363565 +61616565656164313664306664663932333261333162383832326666393366353730306531343639 +64323530333466653534306130636161383463376632616232353361656661353831643966633639 +66336631396164663864653933623662343061316539306634393334653630393462376636346165 +33646635646633353263333838343534373838333836656536373639646636303033626537313464 +38323462396231653233333463313263313233353932356633366630623138376432383566363538 +38346336343765353830656139333564633533323538616166333865323439343361386135343130 +63343363303332313834313764356637643230386536613338623937393436613732383833366235 +64343862663234633232656333666438633464663463663737363431626361643532396664326661 +33383261643231313836326162373532626234383362653162656435366535643863316235656536 +62306334316566623732303834313864663636636334663130653230383365623031316164373161 +64326638636339303065386435303332333230666634323163393134613032326335313961306236 +37343666376235653637636136636133373966636136626137356331336234646366316364623134 +37633832386237346266376533663839343938623664653030636265303465643835666234383763 +36373439346566623739343361386562623962633539383134663237656662653939313938663938 +30653438306666613731326462633334313730363763666538666538356638633261353363393930 +37626261316565633162366636343539626238323861656565393162333662353563393139626261 +64663436336233636438326633303164333939633435373765333731666135366637653532396238 +61346538626662626463303965363061646261343232356639336366333065623765646335353638 +66616430343562366262333235323234383334343538633037643661623661306330343839333034 +62626533353238323064633862613736663666303666373262633533643539643962383333346264 +38346134363236633031393138313538666533643561373766613836636461393166306138333231 +63613735313636376538346230303662646633346363353535333232663033373036336564623766 +62316464363930366665663530626564346130316231313033323130323531396366303030616363 +36356431653435346561656132616632373834393833633865323762343037656439373331623664 +39633635306334646334386635356362346431366430326364303931336562333735613033346437 +37613636656261383034663633666138653537326364326430666632323633386636376635343232 +37643965663564376337616432623336326238626530333736313530386537383633653437356436 +66613230366666373734396538363362626531666331656362356364393230343132363033333061 +39396237316432663832343261393366306232363166313034383033313565373265353436666263 +38356564656331393733393333346164313233313937343330363662316431353233633063646438 +63386162363034363039663864636365666638343665386334383436353336313333653166343937 +35626138326333623362623639336461343737633730306630303963613465396464386534663763 +63383733643761613136386430646361363731343433656533653938366138373162313335373038 +63626639643634663962643130343566323730646432366136393335623134336238383761333733 +31633330343962316134333536376464663166316365386265393061316162363161376333393561 +31646361386332613837663634303134626133376630643730636466643961343462366566363737 +65373236323861343238343434316637663333346161633835306663313537383631303136323832 +30353862663462386262663461623432373034333631633133633563636336343831653934303033 +36303162323164663632393937643665643961313464623033383130663565333034636164643136 +62316639333662316133393533623561633435653036376637323739326339346632653837633637 +37663332386663396363653237353031343065366334333836343830363562383733653661323664 +61333633306531323639343931663061383031303937323261616165633163636133323130666133 +31353366386530323465646133343766663966663561616337313330353436303234346136326365 +64343561656532366538336662656261396337623763343966366136646638643739373037336361 +65336538373161396533613262326633343233653036656364636536636338623930316365353365 +61663435663333633435376535353963646566303130616364396539643366306635646538363464 +36623433663437363761313038666665306536353332633361316339666263306665636566393531 +66356565363839666130663866643134343632623837323630376638313131383036376464613331 +65366262663936623238303863303761313466656538343962326662646139363166616230323938 +35303265343132643938616330343833386261666432376666356532363933656461396633343831 +66623735623233363833656137626161643265633335396162626261633334613232363435613266 +39356663333532306662353538396565663666393063313630663133646365626461376363633735 +66343030306232396332313731313531333235636363383130373532633137383536316639626537 +33306330393737343563626234633531643334313363313466326564343530383337316238383362 +31306430313637613639356365343034393766313362613430646566643131646530313861383037 +31353636323963646236343866383166646633613539386333316164316532653036663236663039 +36306364613033616338643366303264343462393532393638316235303565333634396537353334 +36666361646237356430396636663032666264346561316533343438303238313537326263333766 +64313231303563626364663232363462643735346639373463376464383466636638663036353437 +64356338653862393637366233613366393635623637663332613961623733653362353234656130 +39383533626133313066646331343361303261376364356463383261356462333138643636306432 +34326135333137366339366561646337323134633033333365376666313763666630306261666263 +38386530356361633062663964333631393665343539366532316161616331383831396537323539 +66343138373463343434356465316662356233633861396337343762396366663361373161363838 +30363633313634623333383135623738343738396230343839316137633663396635643865373735 +64306238393833353065333731626131666134303264346662363433316161626632626430363861 +36656263313032643132383162386439613763333033396434613631656233653034353263386138 +35396465316664646339333630666432353064646461323463633237616338316362626538323234 +34343531633766396662306234356361646432393663303764323633333831636631323938396261 +65623064303234353861363261346139646633363965316337363962643430633864633061663462 +33393531613032386134303765373132306662633161383133376231636631643464393536636430 +32373238653166313231333733313865663862653537313736353338336634653032326465616565 +35626536386132363139303939623864613463633432643538383036616530323765376435643237 +65656463306533336661326462386636326630346664333838636332376530333432393235666332 +35663836313765363934313236333765386130623064653463323039666536646531646333633334 +32356439303333353536663638333138343965653663623465653938326565353535666662376364 +65613933323566313363366266343630396331366165306164663065343361666366616237316134 +31323236316163663030666265356531363266343337623561616163386336386266626634346436 +30303738626335313935303463363166313438663430363035336466346164373738306565653133 +30313134303563613835633739303137626562646533636263623336396233626266353130633262 +30396637613934616636643333316539653431323563616338343637303139373334386435626333 +37616265663435303130376137346361653463313934323837313331653662623261613962663833 +64386165343661663463643136643736333232346231396666383239313830386132356238343233 +65376535356238653663613336343632646234663633373238316363663162633535623962376135 +63396661373130383331623733343664653434336264343763303266303339626434316331336433 +32313066626262313438373631303337663232636538643863613939353266666463313733653830 +38666334663864373830313762346339653230393036653336663030346631333365613062633361 +36616538636336613930303065663637373433643937356461373030613733333434663736323864 +33376365323235333938353261653766663134313733393666623038646362666239373338336464 +38633433383938623463366335373439336331386336373631353232663662616261383831663339 +33663830653737306364633935393334306466383634326430326361613461316639393136373065 +34663234613434376430613365316438306162396239326531306638303132666266616238336538 +65393965646139383263366263376338396238393730643231616664323432653535613833363465 +38626166356463333938626131343638333635643661343162663931303937653835646364306164 +63663232653234383465353464616364656336653438313664313339313231633739303930316536 +32633037643561626362633231626634306335376333616562663039326466353165313962343434 +62613638313439663032366161666665663562623535643037646331323934616562623432323565 +35383939393134393931383030326237336535333862633637373730336339636239366439643863 +31626364306365303063346265343465623735346639386239616262393931643835393562326535 +62376536393965613035626664613034393533363961353864626666373639386133303634363034 +35323939323465366638386631656561636564303430643533323864333734386531376337353632 +38323161333865333663363239376133323063643931313464653464316161633637353165346233 +65373431663462656365326136346130663830313566313038303265366233626261356535633731 +65353666393935616634366335306363383831663462623034303434646431666138636231373336 +64366137336231376562313762343136646136353233326139346131336238343262623738336231 +35353031666632393237303834633536636161636561643463346339343164623732313537353433 +33343439373736336330383336303038393831386130323438633865623765623734316365313333 +33303265373562663734353938343762633230366564336137303134383661393638626465326561 +32633862393539316633616165666262623563333966353736363536656536343235303366633964 +61623434386335356435386464363035663162333761336361313263373138343965613538376435 +62646266346162363334363963653937353164653563343834346162323166386335383565353434 +30396434343465303538616463663532343938636135313739366632656332333733613737343536 +33323336356533663962386237333566323030306133666334366365373535333265333132353437 +35626435356234613539336232613335653662303365376163626535343163343036663631323031 +62393263396233316332373663613435356465616265363336393732666235373466306632383635 +64613962633435303834343231616264326666316366653433313232323835626238656439306361 +38326435363066366261363931333336613164353166353236373834316437303735623931613536 +31666335303330313664333566363063313337653163396531353137613562643039336338656164 +66663763313432386638323766323032386135643666313765313132393632323035643538313736 +38656439626261663636393034366466363437326561396261303636636265616237633537316139 +34353165303564343039656631313130316535336361393166656439623538313563343033373366 +63643862386464353330643537326331393133323765353436313136313435633261626534303736 +31346435343865396665663333323737333635343335346134343061613033393061343532623131 +66633864333838363937626135336231366434363634376635633566363536353461313866373836 +35356463313437313134323339366531633439353961346164626663613232656635666237363461 +62633832356433313934613763663433396666396435653433303733346639613762303534613939 +38343338663162346637633231626435333963376262353661313436623233616534373333313631 +34336433313964326339633466616533303031343935336266326663343937366331656539623535 +66383261303462346634626261363737386232633231616239633335303238383766643665663639 +35333731666432346665663736313435356231343132376532616439653963393934633037363366 +37363632333362333438646339336462396665373361616536306466306663623733626238646135 +37663863343339376162373065393130616538313939376137386566353361623937666330303538 +64653531653634636133353433353463323738316664666636643933646661353339326238316666 +64316137663236396234396130646533316438366337633437326539363130343765656639363334 +30663362393937393863633262323931336336343362646264656331343733386332356237653134 +62383966636130636231333539336465303838343365383135356464336139656637623233353236 +31643731326430313563613130626431353562383036373461353663363031663232353366393765 +64636261376666346132373161653430633934366165656139323232363463646461346336613964 +66313130636132323931316438613137356162313062343431393035303339306237343461326336 +38313261653231633836623739306438616439613730303332353434313934356431396565316238 +32306132646239336466663232386266656134633563646431613332393062633439646562303665 +65306665373532376362653737343061383036323535333330373831393635333663376237346565 +34646666633864363836626666623838333263633036656337656431616635353662613262336336 +62643965666364633865666432326137653864366435323332623536303465386661363162653064 +65393362336362313438366536613038316461376139376662356437343631636239633066306162 +38373638363233643531366338313434373034656635373731666230623663633430656266343933 +35663030316335646532393766306638346365396533326433646530313630636239356231646337 +62336163633162613862356138613863653432303064356638656135646264306363323664336263 +62323963333432376237626134323062626563623165386335313533356366333437353838363363 +64626230353262313138373535306538313765323435363732396437616134643931323232316463 +63396161653032653837613366346138366166313730656665623563333834653836656162393466 +65666436363465393934383732393963616236616263393366623130646134623730376462346532 +37373662306262366331323539323365356232323739333466383865653461313635356339633338 +61666330666338363533313462613739393863666439623033376336396364666365303432643137 +32663365376231333230663665326536333638303234663365303935626331626665663239323166 +64303966653566616630366432336264333639646236613038383134363336376363353961366435 +34313133346339306133303839313631663831353465376664656138616131653437626337343539 +33623834626263633939366238373232323165653236616361346533316463613063353064383633 +31366534303736316532306563366663363035636462323737633436326138306464313134323066 +33626538616536333338636664666334353832613135333832303862313061343363303362343461 +39316438396564613662356432346363336266356239303632323664393864343233633664636261 +35323831623133363937343639656637663133383637386635383137343165353932333665316434 +34393839633233396237643062623536393231373864396236613162323364663732666265633632 +32666134366137363463656131376630353130363538356334313239323939663263613863333161 +61386434306532313263326334623362623465336461326564313735333732333539653162343165 +34363861643532633137356466336430323961666133613031626631636631373464633832313035 +33343935643531383339326330303538333133666265313230373734303562366336363863353936 +33386566656633626239356334323765323435663233363265666231616363343537363438633766 +33613336366163653134333039333535303962366162613337356166393335366131643163316339 +31383132663331363762633662366462343663393062653866663766623830376135616263393839 +66326638316339633435306438663534356662336232303032376330383065336432623266383739 +64303866393235333561633434313763366333626631346563323662326537653339353834363961 +38393236333462343234663761336562383564613530323762626465643933386239396266313139 +31363138383138383236363464346163633166393232626634376533373862633039373964303331 +34323132636535663732646463656632333039333063356533663263633035666664343165623061 +64653637333637363632366562326431323932303233343433356431396564626632353334656631 +37623866633330313337653466353139393831373531656333313932376232363961663630353265 +31323864653664643030323531393736336165616632343766653032376665666263616438363064 +65646630613136343033343466643765656236393061613238356435383264383866363632333332 +61616437623065636135656330376262376130316336643263373362666336343331303534353965 +61316263633534396435373336363638326536363366383165353565373736353032633632646234 +31623233663333303232643163646630366432303933393131613461306264303932663038343435 +64376533363134343338643364626135386334316337373636653735373330386631336362623030 +32633562376164316637373639333230643065336436363163353263393630623065656263306231 +38366235366335326563323733303539383330383630613937326331303731396361653537373436 +62366333336131626138393839343463626436613664653137393731653332646661333136666232 +39383433643331383736356137663830396265336264316336393731343461356239393534313432 +37303838366264623034373538316234333536646436643661343363393161656633313530373465 +65313361656637623432393233326332373537383632316361333735663935363835646634396431 +36323335356637333530353366363661323762393131623737656238623036353937393730636333 +30613337386564383632333063396430306166396333346533333834343538356130353436323765 +38363664633330323163316233633864363262343732306363656237303534656466323231383130 +34636264343735316362643961386639353733336135613261303736313537333165323739343032 +65353363363161616531633462303539363734646661366464383334613734313137623731323939 +63323065366132623362333335663735306361393630326538613037383632663830356431373261 +33393063626436663933353864346264633535336532643136666363663237353030663761653933 +39623331366663373363356333373263643338653336343463333032646630323132636265333130 +64623765336336613161626336313361643265633735636436363037303432643265316465386335 +63316331363836626433393165356131396461333931646665613363313737613337333638306432 +33623063323065313865323732353362363333333331373766376465613638656465653035326531 +32366333363935666230666334653962623835303435336466663032623531616361643339666130 +31376265656165303864316239356339396665616461626362333862616364633432363135373332 +39313430303363623433623161643432643261613364393630633334303431366235393765653730 +38323639306161633434666161653564393436353031363131626336643664613232313463636431 +35633935393666376462656639363431333031363534383064333934663265396133373433616363 +39366461333034643631356264646362373439386161346337366165633639613939373930353562 +33643634646331376433373530623438373734353661623766623263616232376365656335636534 +35626665393636643830613466393061666338323464333230336666366135633661316537643764 +30653130356232646430653365303966303266336366373132636237623332363133323632646230 +33626361353464306566393438616465326266386262633566646134613166396635343733326635 +37363266386363633030356531643166333530313561303638346436376235623033363834316266 +36323363303636383334653533346335653939386237646436336437313161653932656331343064 +32646161623563303462386433356334306239646332383137613162363237613062323265616230 +38636334333762373138393833323231613062616535356664376239356433313264336163313138 +36353432613033333237353531656162616363353835376138666131306361623365323237353333 +64316364383866356338656237313539303434383064323831333832633063653264666261333032 +31336135613032366666613566303539626163313364303662356165643931353938356663636366 +38303063323337323661333464336339653833316163643235666133336438303930393766623931 +35386331323430333630616131663831653265396165323430333866626263356138323161303763 +37373233386562326462613364633138326535653238353662613864343835313031303362633131 +37373166363261313930316639646663396163646334623931313466663632393835633161393038 +39316363316330393266396564356338353037636632376133373231653864636365373638653438 +35326334386465623536343038336336643162616633343565383334373830656435363138636435 +36303764306235653534353161363162313764336138373332313338396134653134306338343561 +33346339646662636562333834313535316439303265306534353366353662623066363139663933 +39663165313666376362303838343765666162636337326565353761353132613737626539306163 +35383065336430396132663635663631393466663236653564366139663031326136383437383838 +32353239366232396235636132646531663563323661393332336361313738626437626335623463 +38316133646566653830633963613161303637333533363338663130663661656631646263323262 +64623032633866636237623665356436356165366165653666656161393865643931643730613664 +35663832363037653931313635313638343764316635633031616439626230323337303335623234 +32646330326632373738663465666236666565396162613361326464313965393830643237643865 +61653538333330613835623461353366633433336138653535336239343933643563633363656638 +38343966336630643030303665333563353661373064363934633566353363663334653939326263 +66623034633564383833653366323532386664633730376131656366613637363433376131356430 +64376337313930633030343230323662633762363538623331373035373166393432653836663836 +38303834313663383465376432656661343432373139653066323637643061323231383064356131 +32653065646636383534653462353534643931353035346432663266623431363066303064623435 +37613264616430386438616538643035623632336237656535343936376363616431633264303933 +34663465393337376539303431623666626339353237346338376637666331623762373132613866 +39353065653630373635383535316539303530353433376433653932636331623739633862616265 +63636163363765613730343061323930653735336364343239353633383461636133333065616632 +63396562333733306538353533646332353966396330616334636639373163323539353231623766 +35396261393066326232346330616133626634313964626531633234663637376238326666323561 +65383366373963323734366332633865623536623064643239366561623262633162353461326137 +38633862303932316362356366393861303366363335356134363638313533343434306161386261 +34323733666662313962613835613537393432623836633730306535366361336265646534353834 +64346461386630646130616663313035346232383533663863613364653461656564313834303961 +32346337346165313464326332393435356434653138343130363263396238343034646635343937 +30353361316435313634613930316237626162623562653036353966393362666438303637303333 +32383130323630336461323835373863396137343231306536613038393437623937636566376639 +36626634393035356136643831316664306662653061616464633237616566323437376634303634 +32633462383332663635623334353263313464613535323861313863343036653338343033303238 +39356239623163663330663131393334633961313066663266646631333464643366663637383434 +65323264376166666162346336383736666133666163356131326633336464613961653562663462 +63313935366166303061663066396532313830373936663865383132343466353233343165343961 +61343330616666323939643238636462353531343664343938366135323961366661323066663466 +35313635616637646336613830346165646664316464643266393665656465666263306662623062 +34306465636337633733643434373536393335363862316166373062353432626161353830336133 +37663531386463313334366634623533376131316138323337303738643238656661396633323838 +66663633306134353864643163363735303532373866323534333132373438383738366535353136 +66366262626636316435623436356263313037626431626133326339396164656535326563373932 +39373232306661356338333139313335323634636565303631356163383935663432303133346465 +37356234633362376633393265363736333132386432653961653536383136616236333263333263 +33356131396439393164633466303366343563643735343333336165636335616639663862656437 +37396262343131356665376638623236383634366532623064636636376638643133306666623733 +62343936653937663639646661353933306562643530393938313835313563343635333738303461 +38623534616363313862313366623762646531373262326666313736616461616232336537333037 +39643030333737643831333866656435663430313864656261333233336530326363653532376336 +63653532396539643966663230333435353533363239656561336531343231636362376538313037 +36633666316464376139643563313664343738373064393562633262393439393366393564666231 +34323731303839393266303465323766613864396461386465653739366634383461656537653732 +33313136366439623636636438363566333939303263346637353163613834396162303331663561 +35343237613031373065333636366336613732326662303463323461623839353439613132666563 +36646631393632613237663464373835636333366434356265363537653265383163653833663461 +31396665383334343966653166393762323837303735323366393335356230303033666232313361 +64383962636636643630326533393331313064346165313833333937303538343062653266303334 +66303063376265666538633565343166636562653639363533376637666631393764613438363333 +38636537363664643863613333633236663435323537303934613433386437666366333334363964 +34383738323339643836626562666566376336666262623736346535343639323737353163623439 +62633732353236373032646533633665313361653538396232616234623663663365396536633237 +61626366353062313665613836346233346631633131363061656662363864333065363234316230 +30613364343131366532356263313863333130653266623130636235303961353630376663396131 +32613633346434373630653663653536383933356133643666343966383532326236333537336135 +61633636653936303662646362333463653139366138373734356134326534656633316533393535 +66306337323164363334346663626663346535656137353534333731396537393835366261323233 +36633033613938386437386665366462323235656531656461313064333064393264366239346462 +38313737323962363465386435636539656432303162323665346531643139643438363630653538 +35636430336366353263396232316333396434616438613463313634633138616336306633643061 +63386335306261633739303532626261323566653762636262363430386134643735383937313136 +34643938356136623133623665363963623530363535353139653733393232333736383337383662 +35316237343935616538633861646238343438396131623061396232393331333038373432643465 +35643835396235323735636332383261303530653733613935646466626330333731323065303930 +33653061373765363439306464323761303464393136613864616665323837336664383238666634 +30396336303538313232633236326431313065663234323161653062363836323633363735366135 +35643562303534343832373632633962636636653562333666333563626166326435383732306332 +30383362393135646337616131633330393632613237333037353531323830363237643330643161 +66626563636635623464363533346466646133383538313730363538336637626538333830393164 +36343063346433633439313733303865383530336663636663643733396230333837353237313062 +30626330616234303039633736393161303863343234396262623436306136316366306432663930 +61346530633865396365396139613639326530353639333036313437383063633235366537626235 +62616365653761663566616133366536313338376162356662656432643532636633363838633637 +37643364643061656136323436626564363135636534383862613765616335323931643233393863 +61396463316564656136626365313065353038343936366134616136396461616265623331333633 +31613261656639333930653132633933336630663066613331386535373335333339313230616361 +33386535623363646631646262386463343031643138616464633961616137636633356238333864 +66633338343166323034333936396162663366373765353233393762373335656465656261343663 +63346330393161343236376665313639386136353265393431383563646665393462323336646263 +32616234376239386263613034626661383962656637363236323831633531313933386666313435 +39336539656530373137616138303361653331643637393066323665373132326162613461346434 +32616130386131663631396633353135323164333931393939386637356637303763663638376466 +35616230343862323037646139353838623031313361616265396136626561636338383063336238 +30393536373261396233373439633132303238323636396131386137306237643936636330353133 +38626135356238663536353733623337393061333465626531626232376430636231373162333463 +31666163316637303462663262313039663666383431373264323163663134636430663233346664 +36326636633038616531386334613762613736643038626335623835343864356366316266343131 +66383939636332613766363565346336386134306566616365336234383331383466356539306433 +64346138653536316336343931343538353235303565343663383866653139333132363035623465 +62363835303765643132643239376233386330383530373530386461663565613030303665396339 +39656262643563313064633832646565373236353235393032616532353733353630623566336265 +65653664303465393139303232636439663231326430393435336438633931303332633731393639 +30623430656465326136653361613734373835376661313135623032356562363830303139366337 +65636231323866366235313933643733313630376533343438643863386166656239336635393736 +34376232613362323839653139336261623034613334396234623432326563383737393562373939 +31653764393061656535663862333936643264613865366565386166663866666232366538373838 +65376534653866653864623237653337346431373730626335386630616137323164353464613463 +30336532386265376234663562306334313432623539336366653361653565643032643531633939 +30626165666134653264616639373830333130653263313534326337366466333032333939653263 +38636331653937353531646635653937376132313732313836353131343632353034663832383639 +36636338343563366566396166343734396636313866393938373266633832343832396664616266 +64613339616539303333656635636465313964383239376138643834393232323666386563303265 +64386437663539333234353461303763353930643861613461393865386638386633623633623937 +63663734306332313033646536616561316638643765623566616139653031336563383365636138 +65303930343461623535663834323132353533653333366630356431653733636566376336353464 +38376162636565323335343737376633653165396632323235663463323730326162316635346366 +39353736623262666462396338363765306264663232366463353966623239313666613839373530 +66613062633436333734383139323964326663323634373635636365663832303230636366333636 +65323737383633636338363066356135373166363936646262303236356166316533326437393735 +32363639303137623335643632323566373032656233363063313264396436626633313433636133 +35646464373665356136316536356530653966313935333931643639376537373735373331386537 +38646336356631623731653439613164303835643039346430353364653561626337333666616137 +33636434323938316661643939383937396533323661363365643164356538393765396134396433 +33343031633764643239643531373663633734646232656466643362383838393037363636323466 +31613433393132306364326430666639666561616664333035613863393335383034353039343265 +31633730363161646439373637643938356462343639383666636437623639653066323536653463 +39626239363130346539363961326331613764386531386436316564386135626335333439333539 +38353638653531353132323866663665663831353063623764346438323935643431326538336534 +30643934626236663762333062646363316635323735633336386339336366323861323438313137 +30356665663032653261356663373033326634623639396666396664363430303437303163376637 +61363866316434663433316565393363343938363131363635373934623233626463303731633662 +62663437616333363438366239323934656138663362376363353063633461333532356265336663 +66633366316433653038353734373566633330653737366363303164393536353232326465623063 +65333136306264326430393935306431646134383036626466663032643931633862323066363863 +32353231326334633031656562333266363436386535303465343437666431393234623662346137 +32626636656336653738333934383339646335316137326630373062663831636139383232343437 +66356138373465316431643937623432643965616130373239346661396330363433373834303932 +37363932623564303661323234376336323939646361636665386663653761353033666339303439 +66303261376263306566323135643835373365626463376262376666643331626236656139363134 +39373833393930363630663833633832613063333139326564633161346366326239623735376461 +34663063663232313138376336663836333136363639646539623661373635366264653965396431 +30633430333136656139613033353939653433393038323438313363346264333462653464346437 +37666532336136373762306533326633323135376538393932633165653932396334343530653166 +32323337623731366261376534616164613836333237323466323830313830396662633837313533 +32373238626339353031303136306139613639343437336566303936656435636531626464613366 +30636235356363306663366334396631613832613062363134313934646366303766636438653762 +64313931616563313939326365643635643730633562323834326433343238646362333631656630 +61643639316631303861633130326261613061353635333065656363653862366562663830366637 +33613938363538663736663934626464323538623831336664643935633866383562316637323132 +39393934656263633466636565316161376537343962383334323336643730323634326461303666 +33396364666339646135313039393538356436656338366536613934306431306664383532326331 +64623231363366313637613161316234336136613862633466363837653133343339376238393437 +36363638613635663564316138303365373165336239363935313631336533303562363165306366 +30363138666435653364633439303561626637333037663134633837303131376638613437643363 +39666139656636353630373631653631613664313965303335303138316634663139656337343064 +34653061333934326234336132303965303338383566613032396433393838333439656565633130 +63306564623635633835616264316138326630656532373235316538356230663966323730386164 +34623137626665613935646330383530326163316637306334323933643462623133363463626434 +38633730626432323732303361336462383361306433336335396162353838666233393364333932 +36626437613131303136633739386263363331646130346264333838646330326532646437353035 +32376231663466373439653531386230383565626465623938366637393866343566346135383935 +36623431636138383063333265636332633265646463353565636335363830616563356236343030 +64623365396237313138613163336239663765313831383765313538326539646437663732333031 +66343464646538633830326235643837366437313161666635643539393830656139356138343431 +61303734306161333235383532653935653133613333333531353265303136356362373932376135 +61623738336566363761316164353563376431623864623465343065663966616533333130623032 +30613661616232323430646564383466616630356461653866626666303165326364613861336639 +38333865663237343530643432613439626166633232303164663263323961643739363164343932 +39343330336530636364656336333539623732353431616334616333653665336361306431653535 +66393162653865383365313833373462356135343238623661333735393466396563316462306165 +31656136616539373834663430663266313564336639656137636538646538653735633761373534 +39303365303364326461653763333164353563613961396331653032363165316437356566646335 +30313262666230633533383966313437633235383232656133366165373434663264363266373466 +36333766366434343633656361326530383065616531363435313165343037353736653830373235 +36633534663738616436363330393136333066653935346466663234393563656266666362346564 +63396435303332626461643161646632623561313530396634336264633334313133636666323835 +66323634613864646566396562306661303438316135366138386662616361373432316237363166 +33656638316338373064656130613635653865636433383664663431393731376332656330613466 +64663636316166383663313861383136376234373863363135353733663166333638373364613435 +61366438346265643230623663303538623732623761376666383038656533343632303162633433 +37613238346237613666626430623262653764393664313633336536316535383765333562393362 +62326162343161623866386466633933613436383564666664346439333937623036656530666661 +37323331373464626637643065666230653165353735303634643966636630613335376162373231 +32306531333664653230613737363334656261326631633339383662636530316264353139343663 +63623662333336373563656236393034316263323438363361633835396238316362313561623236 +62353533383630333962323966663236316463633461366166333230356664646466363061633263 +61646666643735353230346433633765303931353466633837316161396336363161613664623861 +32663930373664376638386663343466663033626535643661303561353836346136333166613737 +39383164346463656137353237383662646263396366323838326165623037363736366664636462 +35663764333137656139376330353463363965626237366530663263656536336661613062646232 +32396131383436386539663935653061663263363161303765663966383035366137653265363463 +38383530383738306465396232336337646366666664666338663164363562626463326539393539 +30623838656238666639356239353535333637343439393233643136366337616431343165396563 +30633632653962623033306162633439643565333332626237663032383338396435633832383933 +39663336363934666638333839666463623763313638313735653137353734663432303963616232 +37386238353337356565633933383733373631356466616666613132633934626435643163346165 +31306234353866656430333566623761353531333930363431343233366362313032353365636163 +37623330356632626262373838376365626465373566666231663537666332356232313536613532 +66343265643536313436636563623933626232323431356164636265343464373536363837333837 +66663839393431653061396331303734353962373565653636366564396539303265393136356435 +65623138363463653330376431316330303334656538366461666364323137396265383663303262 +32393439343139386633643031666535623531316365653735323336353464383434643739356363 +63623364336364666535333134356535346136353461373839613639313964616131313235393736 +35613337326263633464383665333062356639626263306238306664396162343636316564616539 +65303730356266303361633939336637363930303865663632346535396238633934643332306434 +39383961653933376533383632653566343730613939393738393435663565633536363836376161 +61616466653662643963613765656336626535326166303962326133313562306134656266613863 +62356166353336333961313731363166396437663734353535663035663764356366396438326133 +39326264626235653132326363616165653835303731626630613166313361643364306466666463 +63363039343164636166626633326330656339623136653432333464376131663363636238343638 +63333433633861376131303136346335653033383361383963343839346137393538656364336134 +30386337306432313332626132383236333963366431333736363836326565336564353834373361 +35626535643266613334633736343061636365316539346330366431353134653264306162613332 +62323131316531333366303163373265653634396537613935326436343961633735323835356362 +64646137333065643830343131343565386566396238626461343165383363363430333737643635 +32666439633330303663653933633261333030626166643932613634653636323034386665613465 +65326461636265333563333730393730303238633666646463343531363131396234653134306531 +63633837313639336137663437353730356132313932666337643463383862376261356266656462 +31353936666331346463653363393036363032306566366562306138636234316265323538313364 +35303638663262613164313765306638306434333338626266663765306562366363376238666162 +31313964326431633736666466313066393736313662353436353665353136353136373038393162 +37333537336664616231323865666330336162383535373135613536656534666664663734336434 +34386365326133326165646563386366343264343435623461336434393962626330303065383732 +61323664336431303962313531303366616539616131363766656564313063303234386466633165 +62323337373664356138343236396361376137336564653930616263666236666233393531633563 +39653264626238636430373963643831643663363337373161376437653630323562313765373933 +35303165396132666134333832366264303164376536383065666431363039643336396332326233 +64373833303830313734616132666564653464656330323866346538623231303335363839613334 +34333236363866363039373238336431333666313536653433626435623337306364663939366261 +65383865653634316339643330626236376435623366633331343839643339333166353036653432 +31613161303339613531313536313539643430653666303432623933663637373734313366633930 +38393031313863343136326261316236373966373966356130643164313361396139343739356230 +36323465633262626430373531386164313365663233396332343965393934653135643832383230 +33653232366632373366366363636331316338386462333634666630393463333165653336323335 +65613361303663306430346630663762383134653130373134306338303038333365643064383765 +36636438663033643431616630346631393532626437626235306430306234326432353064663139 +64636662356630383138333935326165333235313764326436323864383938356638303331386666 +39326338343339633636623432343537633636626362616339656539326431306266636232613436 +34336534323363373331393962343730303161323538346335636463666635636461633234323465 +63343661343464336137343138343564616135333035636161646263326363363034383535303131 +64343062666635363133336135326565633738396332653663623432383134633265323739626438 +66313565333736306335653166306432326435346536323461313539393733653432366264666437 +31646438353361346166663733613835363338333032653261623830626532633665303631356134 +39613135373562663435303666363339346439386330636463313164383666313264656233313139 +63643639323964396130363637316230613734303035353165386661343737636363366137646539 +65306133393763323566343933663731363763313730376664326334613234666634643038636665 +36623636343566333666623963383365353231353137626236306636356631663433396238386364 +32316533343563616635393930396463353938346633633565356630353838303064346239346533 +31613231643039346339373032396163323161313133653237333966316665613132646662313935 +35316436616162373937383465363763663239366565323432393563326534646363646466316266 +30623166343636393331393232616335663862363264373038663035316261313938626334663964 +33326139613738346133663231356138653232633263643936393835396436383534326663303335 +62303537313730373536633334666130633765633339626631623966316661663538363437643430 +65363338653739623335313336626330666164613636366166356332363633343961643065646561 +65383466356463363566356230333939366535333335326333393838313331333862353030366364 +37383236663932323361653230373038366135383533633038613664353763373363393031616334 +30396138373163393262326238393363396364356533306166623432373165643938653561336664 +66383832383537356238653664323864616666623931396564656237333637376662346435663032 +32323261313561393662636139353438313036643135626634323465336139336162383066343765 +35633234623432366637323334616361333931306139323162343064643030393162303165633163 +64356235643037323365303836353634356336333635383031663438663536656233626465393361 +66633566336363333666613465613630623539316263613836386433303138333331396462333264 +65313362353736666234333563383039653832636165306264633966343266356239393761343934 +62363035373037396361303336356461303563323966663764643336393539623564373434383732 +65386631636137643636386430343165633837366333613038376135646637323031383533313937 +31376336313930376531643438323636323934303065643161653233616564376464313466643931 +31653433363233373731366261393066316531373365316166313531623230393062313832343438 +34643031613830653037643464393437636538663062376139386534343566393130643338346663 +32613134356134656333643434626163343938616234333861666234623233343732656165646161 +37316530323065356231376635656437346138666436313334303638653731643932643661656465 +63646263633035363066633561353134653336636464643231666233386339343232653239333864 +64663162653035353364656538336664356136333737373761333462376365626634333736306135 +36306337396131333564633438383963663036333935356262653533663031323066306164326366 +33666432353932393038316133636238633433303461323361666633386530326465633630383131 +62623035376232616639303864393566646630393063326463356666653535656438663538613066 +30343632303835336262396665356439343362626431303134313562663165323934303034386663 +30623530383936353965306563623161666535316231336232323031396239363764663635613231 +30306232646166393562626139363139356366383065626337663365633134386137343132636232 +64633139646130396364363037346262316635613461323763663163656435633165353131623436 +36363734383335353736346232326436623434626263323736356365653966333135663836623261 +38313461663838353165343563653361613735643435653638383265386536376266343534313636 +62663130613833306533386637333230363332386665633831643037393461386535323261396231 +31303733333938666634356633663734353432333764353136653730353565366638336538343938 +39326639346435313863663265633166393638343665393333353832353234316534356435363233 +38613035323861333662623662313462323762326533643632613866643633626632643039633234 +38346233333564343737363633366365383666633039323033373261303135613035373239343133 +38343961326661393838616165303438353832316334353966346666393233386631666163373662 +37373637613335616665623963323863343532666266383331393562383233336436373234396265 +66353766363631393366373563343034336266323164616262343863306136363766646430643263 +30323838393665333361636632313366323064376637626261616263616139613565656333353661 +63343263363930366565663537343538613130323537343462313365633763346635343935313964 +38356636643335666663373461306435636539396638336331653761323864373432303961396562 +31376131386363653366336331333232373833346331633536356632306638613036643834373833 +32333737353435633430663364383331383737623263303361356462303831623130343138643731 +65653439643839653263343632363837333337643732333165656438616563633030366334353965 +38386364393837363163306232323434646330323933323639313666636233326366313530653739 +37313964396161326336613238636133303136663434393336363963616265386436313835643234 +65343364663464356439363833383966383133613538333638303762366261353036323564623863 +65313030363138363362653538336235643832646262373163306634346164393634366261633964 +32353564396265303336323432353438656431643261663432323662376136326239376439393536 +39653833336662386364353161396539386534636464316433656662373836366534313136333430 +35303730353865333439316462366136663834626563323866663234313734666434393262333633 +61393636663062303337333432363931653761626632626336346462313863613931386536656435 +34666366616332366130343539383135613538366664343130333634316461636337633938383033 +65346234613863663561343234663535393930346634353530643231316536663834646266346338 +61353233356364336333646362336664366465646466363537396338343934383031666265666535 +38623163636135656562613666663166393866636364346366343733356339316465613330646538 +33646337633034343665656630316334366339626538373662616432323337313362333634643466 +63666235646432366535303438636662373830313864646639306362633463626437613932303161 +66393463346464666638333166326233613934303465386666633634633863363836616265383130 +65633334666330613363303039613562303739343961333863383763313938623337386634386238 +62656335663366303530346563353530656662303030356230383630386236393536346339643332 +35393766616534303934373136356461613461666332393632376537333864656666633835356463 +38616330383636313433653666396134343963663465393732363532613062656433663339353634 +65666530316434386165363535336637376266616662336431396533323838356534616536343732 +30326261323964636339356639356232383331666466323134333531346262363661663735656533 +34626162643834353862613731356130376132613063633830633135663238666231326338323365 +62363865616535623131383066653164336565333733336233613333613030313936363465393962 +30336331336336386564613564656639653037313238346137666234393431346563303434333638 +30366232386530386434613932333836316166653238313134356535393035663633393033613266 +64326566303565656438386532393665656338303832346133333031613761663838613864336565 +34353737363737366638653938346166356630373539353238316366363861313637623938326638 +30313432633532323539303936313462616635656232323832366561373331353331366630376663 +61343138363862613336303866373030333334306235626363616565623039373364656137666332 +34333735623964353464656131303533653031636339393335663739363234313134383865616365 +32313331323534383532663135353232643038373532626564373563383434303436636433366165 +34326465353737633336613038336534373166363636303165323035366533323939376238306235 +36386233356562356166303565366535376137636661313666623766393861666132363332333435 +33316234363137656564643639393739323736376434663132633864656161323261316534653063 +39666462343766623537336137373730636562313161666263613532333132316238643836323661 +39363562643039363562366663383737373737653439663930643466383938376664336436623337 +30376431633561656439393634633635636334363366383739613238636262316266313334373766 +39376133316331333937323131656230313734636532653437356634373935653365356339396236 +37613036666139623532656538393066313163303135396535356536303565616236646236366264 +62323233376235356462633034323639356465346136303138393234663164373834393565323062 +39383030613634396332643733313834366365313762636235306161313435313262616430633236 +34386332366262336231623732656431616630623235396538376663646262323761306663303539 +33366161303066653932333137326366363130373534306630626135313830326138343764373365 +66633462666666393461303265643239653531656631643930343730626336643037393232336163 +39376634326165623531633765666636383264613532323235663236353532336638313138666566 +63333632343161303630663431383037666265343564613636623238336564376239316665326461 +62613665353735633361383730663132356463336461653932313565306630323863663431336562 +34306537613530653934373434613463346636613465663761643065633235646365356266383761 +31303036613261376562333233623537333064313639636136306530393337373639663862356638 +30323365653136323535386134376335356531653133316530353061326666626536326239363366 +66623165623734386563316361313535393462633230646664626631396234303030376262616566 +33366234643065636633623338656331373761613432396530653839643836643537363863653139 +61643233393564393537356364613334633038633036343463383338653461623136383436353665 +34663136623332356434313664613434663032393737623039336631643133306661323432313663 +63316263353730613437393230633738346334653530663531306134316535663334316566623261 +66663539386363366335353265623939316636303938393131346434343565623266616637636332 +33616233636137613339343231386631636235346631386138356234386266326630346164343164 +37393063316633663863343830346466383636366234376466326366663239316438646366643635 +63326566616131333532353932643434386632616332333364613634376162323239633963303234 +33616132643031393039313933646434376232343862313736326639373436383466343336616535 +30323161343335646235663935636563336663306566316563356361386464373334313063656134 +35343866386234626565363866373534376364633431383062353439373566323266326662616263 +37376362366438353636636530353965646365316138303936373631623064666236616438373463 +65303431333738333236636336323037383739633839653663353463653638646635626265613430 +37616261386637643230636336303861616336646532306535326537623434383532623637666536 +37366566646466356432316461356538633834306364396338333931306231373530303462393465 +61326264616530636464343335623132376139653737636561313039353264376131636161633830 +39333737613433643962633862653434303165343232633765626335626338666232396264316530 +33373135633639366531366632643439306339393064343530666431336333643132623061306162 +30613438633232626163656134353739636463326538376338633164343166363631383336316266 +62653732643030353032353936646162626163636233616531646231636334323366626534636536 +65373033616139376466366662306566663363393164356638383431653437663366643866333263 +39306533306661363138303566656161633365386436623565376235313433356236636638633134 +63353233353030393833653363626663336561326437383161316531373364663666306330343063 +31323663636136396566643831633666323639303230636664393162366638626437343562643464 +39316239373338316136613839326663626462356138313839656239613835396638663037656232 +33393138363364353166663430663031383330356234376632333938353965376337346563393531 +63633065663332306535306466383165646663313938623434373831616431656237386363643637 +62313861643636353734626136366330376230636235663234303764656662373539333830653535 +31663030313334376531366631636636306265643235313635363736333334393239353262323238 +38326662363538636634303730303437336237666335666661366332333639663662383334313661 +30323836646630343062353562336334396235326235616536643835373163306235653562626532 +39373337333939666336333736366337653736633934343866393836316565373965613865386339 +35313762313436666162316534383462333961653932643666663866633961613961353962653962 +39326434646236393164383832613336386239663836396334653534616334346238343363393364 +66656330623839323134623939653761323561643632663234306333643662346364643834646362 +36346338656564633231303337333832663061303961396631653432346439623130623866356561 +34666465336362383833336262303637303964383636643231656565616361306666613732333734 +39303439336163383037663762316531343533343562383664626463623632626334303931626231 +35643665333161303564373662313462393732623663343530666430393636356166383636343761 +30613633383438613262646430623562363864363935353764613064636530616537613339616538 +65386262663236356237353834393331353633653462353034306164643334646364383533646632 +31636538376462303532633762373164383431613538663234396236313761323666613238646132 +62313832663335633430666632616466313930383236653231343035623233373538616562373834 +32323566353235613430643630313161353830623263313931323135633134393833376661353037 +36306234376532653232316133336434396463616536393738633439313036646364326133396633 +61393538636137376436636431356162366435626665326239646664363233383030353635333865 +31396161613062626561376337653262643861353061633863616633623737323134653334636663 +66376465386662656362313466356264323062366130336632323333373935626535303533633766 +65336636646338623039363764306634366438656137303238646361666132636464313338363262 +35613936386534656134633266356437663733346533653831386336343061336365373330363164 +39313038356163656233343834346632643435393764326166376639383563633637626464353131 +33653865326262626461653664616532343436376466666566313961343462666633653736626235 +30336135613338333166323339316363623339346566353132313165353436353465643438353238 +65646262666135616638323065316630646538383038663635646561343235366264643739373038 +33376361653438306137373632306130303733363535386664613332666662663565626266346239 +65333461653632343364323039613461336130383831376437363066656461386566363366316236 +31326630313339333732356634363162316261336666633766636665643463613061313263386261 +37376434616431383132633161633130306638643833366434323339353838303933363234663137 +62663666306534623731366333383963656638653836323864326431303334646535313532656137 +30636266353332626461636639353235303638656431653361366633356361623330393136643539 +33366635646438313432396235386630386537336235383637326632303463333664656634613661 +64323361666430343735623565623532353161653763313965666338636462313463346233666462 +65656161646531353134323832633936636533363761376131636536636661316433383837663065 +34653766636466636336643231636463623638373131633838343538383961383334613631303936 +37353734363132306534633531346261623239616338613034656335363033333164393938633430 +61663239316233643462333739626634303664353531656165303432353061306136333764373832 +63343438633063386464663734643064666330393036303333663764663736303664653239336237 +65353534633731366232333232613133633661653764303036363063323966353965343365366639 +39396161383966343264646362636632303235376165663137343436346134333930656161623632 +34636565306666376433353532396663383339333534343766333363303232343530663431386635 +30346637656665396163613232316365353537633062316532656661326362336230323331313230 +61633563353064333965636437643162613665316230633438666133663465663566373266353639 +36376264303666663431643963323731356531343234313337363533663862386366636565646231 +31346165663236336335623661356432373431366332633933313536633238353435376631396433 +31383835323934323434383965383531626366653437316135643036336339316635323534393137 +65366465346666313838383137346238646666383033346237386333626562313238333730323130 +65316530326639663661346362663862303862316161623463376536356265643462306466653138 +66306361353536386662343162353930383865666433623030313830623735353731363562623162 +39643463646237336638653136383663346131626264653861326164646336656363343639383064 +64313965636434663762646261386336626533643739343063323339343333313739343634613937 +34383839336338383736386561616166386634333533616530383635346262643239386161643136 +38323437643839323832623162636532376338346636666266663538653863633735613632386431 +65363462313538396335633033633966396339626632396430353461343864323463653162393666 +39643566613836616135323439636165626338333439373738313130666138343430386431353636 +33646134623134363462383765643365626435366433363830653836653731333731343161643166 +39653838373632636131656333306162633233313765316138613136336235343137343037656435 +62363065326330343663343766666165356662613133373634633036316435626562366165643035 +65636463356430666266343264396531636266363065303137636332626435616264353232383633 +61666635356531336632623338633230336166626261623635613439366162383035653437383130 +62386635653864306334613861383433353562363562306633653866633531663266356561363930 +35323163616162353163323330636330623865633636343264353939356137336531323964346261 +32363133613232656661653863306138393730386265353366393633373231323835303736306332 +62353039313539663936393530643063633936643162373933303665346337643133343866323831 +31386131646632323433613931623331316236353866363062343632613163363366383633393736 +35633830656366373030623431336138346237663336333733336136363735643962333261323135 +37356633653331343166323534393465316465383731633536343836653362663839376439343861 +39373661326336323535373534306362326533663464306462303533306137623434 |