Merge pull request #4 from aasaru/anh3h_master

FINCN-165: Enhance Fineract CN startup script. make it work with mac and linux.
diff --git a/README.md b/README.md
index d212b5c..f049eb4 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,29 @@
 # Fineract CN Docker-Compose scripts
-This project contains Docker Compose Scripts for running Fineract CN especially in Development.	
+This project contains Docker Compose Scripts for running Fineract CN especially in Development.
 
 ## Requirements
 - Docker
 - Docker-compose
 
+## Automatic or manual provisioning
+
+You can either try to provision automatically using bash script `bash start-up.sh`
+Or you could achieve the same state by manually following the instructions below:
+
 ## Perquisites
 
 ### Generate .env file with RSA keys
 `java -cp external_tools/lang-0.1.0-BUILD-SNAPSHOT.jar  org.apache.fineract.cn.lang.security.RsaKeyPairFactory UNIX > .env`
 
 This library is taken from [fineract-cn-lang](https://github.com/apache/fineract-cn-lang#generate-and-print-rsa-keys).
-If needed you can pull a fresh copy of it:
 
-`wget https://mifos.jfrog.io/mifos/libs-snapshot-local/org/apache/fineract/cn/lang/0.1.0-BUILD-SNAPSHOT/lang-0.1.0-BUILD-SNAPSHOT.jar lang-0.1.0-BUILD-SNAPSHOT.jar`
+If needed you can pull a fresh copy of it:
+`wget https://mifos.jfrog.io/mifos/libs-snapshot-local/org/apache/fineract/cn/lang/0.1.0-BUILD-SNAPSHOT/lang-0.1.0-BUILD-SNAPSHOT.jar external_tools/lang-0.1.0-BUILD-SNAPSHOT.jar`
 
 ### Add other environment variables to the end of the .env file
 `cat env_variables >> .env`
 
-If you run some service from localhost then you need to change the host parameter to 'localhost' of that service in .env file.
+If you run some service from localhost then [add these services to your hosts file](#use-the-postman-scripts-when-running-locally).
 
 ## Procedure
 
@@ -28,22 +33,138 @@
 docker-compose up
 ```
 
-### Choose the services you want to run
-In the docker-compose.yml (that resides in project root) comment out the services  you don't want to run.
-Running all services together consumes a lot of memory.
-
-
 ### Start micro services
+First only start provisioner-ms by running following in project root:
 
-In project root directory run:
 ```
+docker-compose up provisioner-ms 
+```
+after it has started (and created table seshat to postgres) stop it.
+This is just to make sure provisioner gets to create the database the other services require.
+
+### Choose the services you want to run
+In the docker-compose.yml (that resides in project root) there are more than 10 services defined.
+Running all services together consumes a lot of memory. So you can start a subset of services.
+
+For example you could start the following micro services and an fims-web-app:
+```
+docker-compose up provisioner-ms identity-ms office-ms customer-ms accounting-ms fims-web-app
+```
+
+If you want you can add other micro services (listed in docker-compose.yml) to the list.
+For example you could also start `deposit-account-management-ms`
+
+# Provision
+
+## Provisioning the Micro Services Using Postman
+
+We provide a postman-request-collection as well as a postman-environment that defines variables that are used to hold values received in responses.
+Both files are located under [postman-initial-requests folder](postman_scripts):
+```
+postman_scripts/Fineract-Cn-Initial-Requests.postman_collection.json
+postman_scripts/Fineract-Cn-Initial-Setup-Environment.postman_environment.json
+```
+
+Initialize Postman as follows:
+
+1. Start Postman and load both files into Postman by clicking ```Import``` and then selecting the file.
+2. You will see the collection "Fineract-Cn-Initial-Requests" in the left sidebar.
+3. Open the collection by clicking on it.
+4. Select the environment "Fineract-Cn-Initial-Setup-Environment" in the environment drop-down (top right corner in Postman).
+5. Execute the requests one by one by selecting them in the collection and then pressing "Send".
+
+The first request will retrieve a token. The response should look like this, with a different token:
+
+```
+{
+    "token": "Bearer eyJhbGciOiJSUzUxMiJ9.eyJhdWQiOiJwcm92aXNpb25lci12MSIsInN1YiI6IndlcGVtbmVmcmV0IiwiL21pZm9zLmlvL3NpZ25hdHVyZVRpbWVzdGFtcCI6IjIwMTctMDQtMThUMDlfNDRfMjIiLCIvbWlmb3MuaW8vdG9rZW5Db250ZW50IjoiUk9MRV9BRE1JTiIsImlzcyI6InN5c3RlbSIsImlhdCI6MTUwMDA1NjgxNywiZXhwIjoxNTAwNDE2ODE3fQ.OfxTUTStJbKQc4rAPW5PLIQYNjCG_uqcNPR4up6pIQBWLDxkgEiU9EF1WrB5NQdzXBJIHqjDFQpaVywm5DersIh4LxPGD3MZj3TqZK5_LUcZvBDTa4Xgb41e3xXkWB4TkN6KqfmiK12Ngjrrj7qZGBdtypDmFmZwKQRZIOL6T3QbI7LpbPGpeWjpWZirFgtcn5B1Z_h3r9rirCzecUdVjlaplQufxDuVFJS0R3N67pyuGQENvCAC716ID5KbokTQtITXfjnCztFuQBbtCPcYLIzxsKv_-E5k6Gd0pv01OC0XpY3NSgfAolVVgvSXKoRnL3NwAMP2yuzX6i8hR_q82Q",
+    "accessTokenExpiration": "2019-07-18T22:26:57.784"
+}
+```
+
+If you don't get a token there is something wrong with your setup. The token is necessary for authentication in other requests thus be sure that this steps works.
+
+Important: Be sure to execute the requests in the right order! If you execute the requests that gives you the initial password (request "03.2 Create Identity Service for Tenant") twice you will not be able to retrieve the initial password again (due to the implementation of the identity service).
+If that happens the variable antonyUserPassword is empty (undefined) and you will not be able to sign in antony and change his password (03.3, 03.4).
+
+6. If you didn't start the micro service deposit-account-management-ms with docker-compose then
+you can assign deposits app to tenant (in step 07.1 and 07.2) but these services won't work.
+
+
+#### Debugging help
+
+1. Check if the micro services to which the requests are made are up and running.
+Check the container for details of failures (if any):
+
+docker-compose logs provisioner-ms
+
+
+2. Reach out to [mailing list](https://lists.apache.org/list.html?dev@fineract.apache.org) with the relevant details
+
+
+### Sign-in using fims-web-app
+
+Prerequisites: Fineract-CN has been successfully provisioned by following the instructions in the previous sections
+User ```mifos``` is created in the the last two requests (user creation and role assignment) in the postman request-list.
+This user has admin rights and is able to manage offices,customers and thier deposits.
+
+Navigate to http://localhost:8888 in your browser and enter the credentials of the user you want to sign in with.
+
+The following user-profile is available in fims-web-app after above setup was completed successfully:
+
+```
+tenant: playground
+user: mifos
+password: password
+```
+
+### Use the Postman scripts when running locally
+Postman scripts use service names (postgres, provisioner-ms, etc) when refering to different services.
+If you want to use the same Postman scripts when running micro services locally then add into your hosts (/etc/hosts in Unix) file:
+
+```
+127.0.0.1 postgres
+127.0.0.1 cassandra
+127.0.0.1 provisioner-ms
+127.0.0.1 identity-ms
+127.0.0.1 rhythm-ms
+127.0.0.1 office-ms
+127.0.0.1 customer-ms
+127.0.0.1 accounting-ms
+127.0.0.1 portfolio-ms
+127.0.0.1 deposit-account-management-ms
+127.0.0.1 teller-ms
+127.0.0.1 reporting-ms
+127.0.0.1 cheques-ms
+127.0.0.1 payroll-ms
+127.0.0.1 group-ms
+127.0.0.1 notifications-ms
+127.0.0.1 fims-web-app
+
+```
+
+### How to reset everything and start from scratch
+
+```
+cd external-tools
+docker-compose stop
+docker-compose rm
+docker volume rm external_tools_cassandra-volume
+docker volume rm external_tools_postgres-volume
 docker-compose up
 ```
 
+
 ## TODO
 
-- Provision the web services
+- Provision the web services using a script
 - Adjust scripts for Kubernetes
 
 There are some scripts in [https://github.com/openMF/fineract-cn-containers](https://github.com/openMF/fineract-cn-containers)
 that have been developed in the past for this purpose.
+
+## References
+
+Derived from [https://github.com/vishwasbabu/ProvisioningFineractCN](https://github.com/vishwasbabu/ProvisioningFineractCN) ,
+[https://github.com/apache/fineract-cn-demo-server](https://github.com/apache/fineract-cn-demo-server)
+and [https://github.com/senacor/BankingInTheCloud-Fineract](https://github.com/apache/fineract-cn-demo-server).
diff --git a/docker-compose.yml b/docker-compose.yml
index 7ae1011..7b4dfd9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -30,7 +30,9 @@
         delay: 10s
         max_attempts: 3
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${PROVISIONER_IP}
 
   identity-ms:
     image: apache/fineract-cn-identity:0.0.1-M.1 # TODO replace with latest
@@ -56,9 +58,11 @@
         delay: 10s
         max_attempts: 3
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${IDENTITY_IP}
 
-# HAS ERRORS:
+  # TODO HAS ERRORS:
 #  rhythm-ms:
 #    image: apache/fineract-cn-rhythm:latest
 #    environment:
@@ -76,7 +80,9 @@
 #      restart_policy:
 #        condition: on-failure
 #    networks:
-#      - external_tools_default
+#      external_tools_default:
+#      fineract:
+#          ipv4_address: ${RHYTHM_IP}
 
 
   office-ms:
@@ -97,7 +103,9 @@
       system.privateKey.exponent: ${PRIVATE_KEY_EXPONENT}
       system.privateKey.modulus: ${PRIVATE_KEY_MODULUS}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${OFFICE_IP}
 
   customer-ms:
     image: apache/fineract-cn-customer:latest
@@ -115,9 +123,11 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${CUSTOMER_IP}
 
-  ledger-ms:
+  accounting-ms:
     ports:
       - "2025:2025"
     image: apache/fineract-cn-accounting:latest
@@ -133,7 +143,9 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${ACCOUNTING_IP}
 
   portfolio-ms:
     image: apache/fineract-cn-portfolio:latest
@@ -150,7 +162,9 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${PORTFOLIO_IP}
 
   deposit-account-management-ms:
     image: apache/fineract-cn-deposit-account-management:latest
@@ -168,7 +182,9 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${DEPOSIT_ACCOUNT_MANAGEMENT_IP}
 
   teller-ms:
     image: apache/fineract-cn-teller:latest
@@ -186,7 +202,9 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${TELLER_IP}
 
   reporting-ms:
     image: apache/fineract-cn-reporting:latest
@@ -204,7 +222,29 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${REPORTING_IP}
+
+  cheques-ms:
+    image: apache/fineract-cn-reporting:latest
+    ports:
+      - "2030:2030"
+    environment:
+      activemq.brokerUrl: ${ACTIVEMQ_BROKER_URL}
+      cassandra.contactPoints: ${CASSANDRA_CONTACT_POINTS}
+      eureka.client.serviceUrl.defaultZone: ${EUREKA_CLIENT_SERVICE_URL_DEFAULT_ZONE}
+      eureka.instance.hostname: ${EUREKA_INSTANCE_HOSTNAME}
+      postgresql.host: ${POSTGRESQL_HOST}
+      ribbon.listOfServers: ${RIBBON_EUREKA_SERVER}
+      spring.datasource.url: jdbc:postgresql://${POSTGRESQL_HOST}:${POSTGRESQL_PORT}/seshat
+      system.publicKey.exponent: ${PUBLIC_KEY_EXPONENT}
+      system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
+      system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
+    networks:
+      external_tools_default:
+      fineract:
+        ipv4_address: ${CHEQUES_IP}
 
   payroll-ms:
     image: apache/fineract-cn-payroll:latest
@@ -222,9 +262,66 @@
       system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
       system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
     networks:
-      - external_tools_default
+      external_tools_default:
+      fineract:
+        ipv4_address: ${PAYROLL_IP}
+
+  group-ms:
+    image: apache/fineract-cn-group:latest
+    ports:
+      - "2032:2032"
+    environment:
+      activemq.brokerUrl: ${ACTIVEMQ_BROKER_URL}
+      cassandra.contactPoints: ${CASSANDRA_CONTACT_POINTS}
+      eureka.client.serviceUrl.defaultZone: ${EUREKA_CLIENT_SERVICE_URL_DEFAULT_ZONE}
+      eureka.instance.hostname: ${EUREKA_INSTANCE_HOSTNAME}
+      postgresql.host: ${POSTGRESQL_HOST}
+      ribbon.listOfServers: ${RIBBON_EUREKA_SERVER}
+      spring.datasource.url: jdbc:postgresql://${POSTGRESQL_HOST}:${POSTGRESQL_PORT}/seshat
+      system.publicKey.exponent: ${PUBLIC_KEY_EXPONENT}
+      system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
+      system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
+    networks:
+      external_tools_default:
+      fineract:
+        ipv4_address: ${GROUP_IP}
+
+  notifications-ms:
+    image: aasaru/fineract-cn-notifications:latest # TODO switch to apache repo
+    ports:
+     - "2033:2033"
+    environment:
+      activemq.brokerUrl: ${ACTIVEMQ_BROKER_URL}
+      cassandra.contactPoints: ${CASSANDRA_CONTACT_POINTS}
+      eureka.client.serviceUrl.defaultZone: ${EUREKA_CLIENT_SERVICE_URL_DEFAULT_ZONE}
+      eureka.instance.hostname: ${EUREKA_INSTANCE_HOSTNAME}
+      postgresql.host: ${POSTGRESQL_HOST}
+      ribbon.listOfServers: ${RIBBON_EUREKA_SERVER}
+      spring.datasource.url: jdbc:postgresql://${POSTGRESQL_HOST}:${POSTGRESQL_PORT}/seshat
+      system.publicKey.exponent: ${PUBLIC_KEY_EXPONENT}
+      system.publicKey.modulus: ${PUBLIC_KEY_MODULUS}
+      system.publicKey.timestamp: ${PUBLIC_KEY_TIMESTAMP}
+    networks:
+      external_tools_default:
+      fineract:
+        ipv4_address: ${NOTIFICATIONS_IP}
+
+  fims-web-app:
+    image: aasaru/fineract-cn-fims-web-app:latest # TODO switch to apache repo
+    ports:
+      - "8888:8888"
+    networks:
+      external_tools_default:
+      fineract:
+        ipv4_address: ${FIMS_WEB_APP_IP}
+
 
 networks:
   external_tools_default:
     external:
       name: external_tools_default
+  fineract:
+    driver: bridge
+    ipam:
+      config:
+        - subnet: 172.16.238.0/26
diff --git a/env_variables b/env_variables
index 16cc9ae..dcec372 100644
--- a/env_variables
+++ b/env_variables
@@ -13,3 +13,18 @@
 POSTGRESQL_USER=postgres
 RIBBON_EUREKA_SERVER=eureka:9090
 SYSTEM_INITIAL_CLIENT_ID=service-runner
+FIMS_WEB_APP_IP=172.16.238.19
+PROVISIONER_IP=172.16.238.20
+IDENTITY_IP=172.16.238.21
+RHYTHM_IP=172.16.238.22
+OFFICE_IP=172.16.238.23
+CUSTOMER_IP=172.16.238.24
+ACCOUNTING_IP=172.16.238.25
+PORTFOLIO_IP=172.16.238.26
+DEPOSIT_ACCOUNT_MANAGEMENT_IP=172.16.238.27
+TELLER_IP=172.16.238.28
+REPORTING_IP=172.16.238.29
+CHEQUES_IP=172.16.238.30
+PAYROLL_IP_IP=172.16.238.31
+GROUP_IP=172.16.238.32
+NOTIFICATIONS_IP=172.16.238.33
diff --git a/external_tools/docker-compose.yml b/external_tools/docker-compose.yml
index 1f30a07..137ad0f 100644
--- a/external_tools/docker-compose.yml
+++ b/external_tools/docker-compose.yml
@@ -69,3 +69,9 @@
   cassandra-volume:
   postgres-volume:
 
+networks:
+  default:
+    driver: bridge
+    ipam:
+      config:
+        - subnet: 172.16.238.64/26
diff --git a/postman_scripts/Fineract-Cn-Initial-Requests.postman_collection.json b/postman_scripts/Fineract-Cn-Initial-Requests.postman_collection.json
new file mode 100644
index 0000000..02895ba
--- /dev/null
+++ b/postman_scripts/Fineract-Cn-Initial-Requests.postman_collection.json
@@ -0,0 +1,872 @@
+{
+	"info": {
+		"_postman_id": "16b8ce24-0311-498b-b248-b91ddcc14b08",
+		"name": "Fineract-Initial-Requests",
+		"description": "Collection to initialize tenant",
+		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
+	},
+	"item": [
+		{
+			"name": "01. Get token from system user",
+			"event": [
+				{
+					"listen": "test",
+					"script": {
+						"id": "2a49d9a1-377c-4c03-90b8-1c285140de5a",
+						"exec": [
+							"tests[\"Status code is 200\"] = responseCode.code === 200;",
+							"",
+							"var jsonData = JSON.parse(responseBody);",
+							"postman.setEnvironmentVariable(\"rootUserToken\", jsonData.token);",
+							"",
+							"",
+							""
+						],
+						"type": "text/javascript"
+					}
+				}
+			],
+			"request": {
+				"method": "POST",
+				"header": [],
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/auth/token?grant_type=password&client_id={{client_id}}&username={{rootUser}}&password={{rootUserPassword}}",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"auth",
+						"token"
+					],
+					"query": [
+						{
+							"key": "grant_type",
+							"value": "password"
+						},
+						{
+							"key": "client_id",
+							"value": "{{client_id}}",
+							"description": "The initial Client Id used for starting service runner\n"
+						},
+						{
+							"key": "username",
+							"value": "{{rootUser}}",
+							"description": "Initial system user \"wepemnefret\"\n"
+						},
+						{
+							"key": "password",
+							"value": "{{rootUserPassword}}"
+						}
+					]
+				},
+				"description": "1. Get Token from System-User"
+			},
+			"response": []
+		},
+		{
+			"name": "02. Create first tenant",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"identifier\": \"{{tenantIdentifier}}\",\n\t\"name\": \"Playground\",\n\t\"description\": \"Sample tenant for demonstrating Fineract-CN functionality\",\n\t\"cassandraConnectionInfo\": {\n\t\t\"clusterName\": \"Datacenter1\",\n\t\t\"contactPoints\": \"cassandra:9042\",\n\t\t\"keyspace\": \"playground\",\n\t\t\"replicationType\": \"Simple\",\n\t\t\"replicas\": \"1\"\n\t},\n\t\"databaseConnectionInfo\": {\n\t\t\"driverClass\": \"org.postgresql.Driver\",\n\t\t\"databaseName\": \"playground\",\n\t\t\"host\": \"postgres\",\n\t\t\"port\": \"5432\",\n\t\t\"user\": \"postgres\",\n\t\t\"password\": \"postgres\"\n\t}\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "03.1 Create identity-v1 application",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}",
+						"type": "text",
+						"disabled": true
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"name\": \"identity-v1\",\n\t\"description\": \"Identity Service\",\n\t\"vendor\": \"Apache Fineract\",\n\t\"homepage\": \"http://identity-ms:2021/identity/v1\"\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "03.2 Assign Identity Manager for Tenant",
+			"event": [
+				{
+					"listen": "test",
+					"script": {
+						"id": "206c2d92-7c20-46e9-8079-ead0c0adbbe0",
+						"exec": [
+							"tests[\"Status code is 200\"] = responseCode.code === 200;",
+							"",
+							"var jsonData = JSON.parse(responseBody);",
+							"postman.setEnvironmentVariable(\"antonyUserPassword\", jsonData.adminPassword);",
+							"",
+							"",
+							""
+						],
+						"type": "text/javascript"
+					}
+				}
+			],
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"name\": \"identity-v1\"\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants/{{tenantIdentifier}}/identityservice",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants",
+						"{{tenantIdentifier}}",
+						"identityservice"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "03.3 Login Antony",
+			"event": [
+				{
+					"listen": "test",
+					"script": {
+						"type": "text/javascript",
+						"exec": [
+							"tests[\"Status code is 200\"] = responseCode.code === 200;",
+							"",
+							"var jsonData = JSON.parse(responseBody);",
+							"postman.setEnvironmentVariable(\"antonyToken\", jsonData.accessToken);",
+							"",
+							"",
+							""
+						]
+					}
+				}
+			],
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{}"
+				},
+				"url": {
+					"raw": "http://{{identityUrl}}/identity/v1/token?grant_type=password&username=antony&password={{antonyUserPassword}}",
+					"protocol": "http",
+					"host": [
+						"{{identityUrl}}"
+					],
+					"path": [
+						"identity",
+						"v1",
+						"token"
+					],
+					"query": [
+						{
+							"key": "grant_type",
+							"value": "password"
+						},
+						{
+							"key": "username",
+							"value": "antony"
+						},
+						{
+							"key": "password",
+							"value": "{{antonyUserPassword}}"
+						}
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "03.4 Change Antony Password",
+			"event": [
+				{
+					"listen": "test",
+					"script": {
+						"type": "text/javascript",
+						"exec": [
+							"tests[\"Status code is 202\"] = responseCode.code === 202;",
+							"",
+							"postman.setEnvironmentVariable(\"antonyUserPassword\", \"dGVzdA==\");",
+							"",
+							"",
+							""
+						]
+					}
+				}
+			],
+			"request": {
+				"method": "PUT",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{antonyToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{antonyUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"password\": \"dGVzdA==\"\n}"
+				},
+				"url": {
+					"raw": "http://{{identityUrl}}/identity/v1/users/antony/password",
+					"protocol": "http",
+					"host": [
+						"{{identityUrl}}"
+					],
+					"path": [
+						"identity",
+						"v1",
+						"users",
+						"antony",
+						"password"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "03.5 Login Antony with new password",
+			"event": [
+				{
+					"listen": "test",
+					"script": {
+						"type": "text/javascript",
+						"exec": [
+							"tests[\"Status code is 200\"] = responseCode.code === 200;",
+							"",
+							"var jsonData = JSON.parse(responseBody);",
+							"postman.setEnvironmentVariable(\"antonyToken\", jsonData.accessToken);",
+							"",
+							"",
+							""
+						]
+					}
+				}
+			],
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{}"
+				},
+				"url": {
+					"raw": "http://{{identityUrl}}/identity/v1/token?grant_type=password&username={{antonyUser}}&password={{antonyUserPassword}}",
+					"protocol": "http",
+					"host": [
+						"{{identityUrl}}"
+					],
+					"path": [
+						"identity",
+						"v1",
+						"token"
+					],
+					"query": [
+						{
+							"key": "grant_type",
+							"value": "password"
+						},
+						{
+							"key": "username",
+							"value": "{{antonyUser}}"
+						},
+						{
+							"key": "password",
+							"value": "{{antonyUserPassword}}"
+						}
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "03.6 Assign Identity for Tenant",
+			"request": {
+				"method": "PUT",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "[\n\t{\n\t\t\"name\": \"identity-v1\"\n\t}\n]"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants/s{{tenantIdentifier}}/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants",
+						"s{{tenantIdentifier}}",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "04.1 Create office-v1 application",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"name\": \"office-v1\",\n\t\"description\": \"Office Service\",\n\t\"vendor\": \"Apache Fineract\",\n\t\"homepage\": \"http://office-ms:2023/office/v1\"\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "04.2 Assign Office for Tenant",
+			"request": {
+				"method": "PUT",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "[\n\t{\n\t\t\"name\": \"office-v1\"\n\t}\n]"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants/{{tenantIdentifier}}/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants",
+						"{{tenantIdentifier}}",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "05.1 Create customer-v1 application",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"name\": \"customer-v1\",\n\t\"description\": \"Customer Service\",\n\t\"vendor\": \"Apache Fineract\",\n\t\"homepage\": \"http://customer-ms:2024/customer/v1\"\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "05.2 Assign customer for Tenant",
+			"request": {
+				"method": "PUT",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "[\n\t{\n\t\t\"name\": \"customer-v1\"\n\t}\n]"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants/{{tenantIdentifier}}/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants",
+						"{{tenantIdentifier}}",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "06.1 Create accounting-v1 application",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"name\": \"accounting-v1\",\n\t\"description\": \"Accounting Service\",\n\t\"vendor\": \"Apache Fineract\",\n\t\"homepage\": \"http://accounting-ms:2025/accounting/v1\"\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "06.2 Assign accounting for Tenant",
+			"request": {
+				"method": "PUT",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "[\n\t{\n\t\t\"name\": \"accounting-v1\"\n\t}\n]"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants/{{tenantIdentifier}}/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants",
+						"{{tenantIdentifier}}",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "07.1 Create deposit-v1 application",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"name\": \"deposit-v1\",\n\t\"description\": \"Deposit Management Service\",\n\t\"vendor\": \"Apache Fineract\",\n\t\"homepage\": \"http://deposit-account-management-ms:2027/deposit/v1\"\n}"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "07.2 Assign deposits for Tenant",
+			"request": {
+				"method": "PUT",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{rootUserToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{rootUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "[\n\t{\n\t\t\"name\": \"deposit-v1\"\n\t}\n]"
+				},
+				"url": {
+					"raw": "http://{{provisionerUrl}}/provisioner/v1/tenants/{{tenantIdentifier}}/applications",
+					"protocol": "http",
+					"host": [
+						"{{provisionerUrl}}"
+					],
+					"path": [
+						"provisioner",
+						"v1",
+						"tenants",
+						"{{tenantIdentifier}}",
+						"applications"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "08.1 Create Admin Role for tenant \"playground\"",
+			"event": [
+				{
+					"listen": "test",
+					"script": {
+						"id": "c64b529c-6e8a-4ef1-ab0d-a58b9499ade9",
+						"exec": [
+							"tests[\"Status code is 202\"] = responseCode.code === 202;",
+							""
+						],
+						"type": "text/javascript"
+					}
+				}
+			],
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					},
+					{
+						"key": "User",
+						"value": "{{antonyUser}}"
+					},
+					{
+						"key": "Authorization",
+						"value": "{{antonyToken}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\"identifier\":\"administrator\",\"permissions\":[{\"permittableEndpointGroupIdentifier\":\"identity__v1__roles\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"identity__v1__self\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"office__v1__employees\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"customer__v1__task\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"catalog__v1__catalog\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"identity__v1__users\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"accounting__v1__journal\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"office__v1__offices\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"customer__v1__customer\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"accounting__v1__ledger\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"deposit__v1__instance\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"deposit__v1__definition\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"office__v1__self\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]},{\"permittableEndpointGroupIdentifier\":\"accounting__v1__account\",\"allowedOperations\":[\"READ\",\"CHANGE\",\"DELETE\"]}]}"
+				},
+				"url": {
+					"raw": "http://{{identityUrl}}/identity/v1/roles",
+					"protocol": "http",
+					"host": [
+						"{{identityUrl}}"
+					],
+					"path": [
+						"identity",
+						"v1",
+						"roles"
+					]
+				}
+			},
+			"response": []
+		},
+		{
+			"name": "08.2 Create Admin User",
+			"request": {
+				"method": "POST",
+				"header": [
+					{
+						"key": "Authorization",
+						"value": "{{antonyToken}}"
+					},
+					{
+						"key": "User",
+						"value": "{{antonyUser}}"
+					},
+					{
+						"key": "Content-Type",
+						"value": "application/json"
+					},
+					{
+						"key": "X-Tenant-Identifier",
+						"value": "{{tenantIdentifier}}"
+					}
+				],
+				"body": {
+					"mode": "raw",
+					"raw": "{\n\t\"identifier\": \"mifos\",\n\t\"role\": \"administrator\",\n\t\"password\": \"cGFzc3dvcmQ=\"\n}"
+				},
+				"url": {
+					"raw": "http://{{identityUrl}}/identity/v1/users",
+					"protocol": "http",
+					"host": [
+						"{{identityUrl}}"
+					],
+					"path": [
+						"identity",
+						"v1",
+						"users"
+					]
+				}
+			},
+			"response": []
+		}
+	]
+}
diff --git a/postman_scripts/Fineract-Cn-Initial-Setup-Environment.postman_environment.json b/postman_scripts/Fineract-Cn-Initial-Setup-Environment.postman_environment.json
new file mode 100644
index 0000000..ee13692
--- /dev/null
+++ b/postman_scripts/Fineract-Cn-Initial-Setup-Environment.postman_environment.json
@@ -0,0 +1,84 @@
+{
+	"id": "91c46e16-2e81-441f-af81-349ca02d2052",
+	"name": "Fineract-Cn-Initial-Setup-Environment",
+	"values": [
+		{
+			"key": "host",
+			"value": "localhost",
+			"enabled": true
+		},
+		{
+			"key": "tenantIdentifier",
+			"value": "playground",
+			"enabled": true
+		},
+		{
+			"key": "user",
+			"value": "superuser",
+			"enabled": true
+		},
+		{
+			"key": "accessToken",
+			"value": "Bearer eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJzdXBlcnVzZXIiLCIvbWlmb3MuaW8vc2lnbmF0dXJlVGltZXN0YW1wIjoiMjAxNy0wNC0yNlQwN18yNl8xMyIsIi9taWZvcy5pby90b2tlbkNvbnRlbnQiOiJ7XCJ0b2tlblBlcm1pc3Npb25zXCI6W3tcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL2NoYXJnZXNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS9hcHBsaWNhdGlvbnMvKi9wZXJtaXNzaW9ucy8qL3VzZXJzL3t1c2VyaWRlbnRpZmllcn0vZW5hYmxlZFwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS9hcHBsaWNhdGlvbnMvKi9wZXJtaXNzaW9ucy8qL3VzZXJzL3t1c2VyaWRlbnRpZmllcn0vZW5hYmxlZFwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJERUxFVEVcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9vZmZpY2VzLyovYWRkcmVzc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL2Nhc2VzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzLyovY2hhcmdlc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL2xlZGdlcnNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL3RyaWFsYmFsYW5jZVwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS9hcHBsaWNhdGlvbnMvKi9wZXJtaXNzaW9ucy8qL3VzZXJzL3t1c2VyaWRlbnRpZmllcn0vZW5hYmxlZFwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9vZmZpY2VzLyovYWRkcmVzc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJwb3J0Zm9saW8tdjEvcHJvZHVjdHMvKi9lbmFibGVkXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcImFjY291bnRpbmctdjEvYWNjb3VudHMvKi9jb21tYW5kc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3VzZXJzL3t1c2VyaWRlbnRpZmllcn0vcGFzc3dvcmRcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL2FjY291bnRzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcImN1c3RvbWVyLXYxL3Rhc2tzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiYWNjb3VudGluZy12MS9sZWRnZXJzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiaWRlbnRpdHktdjEvdXNlcnMve3VzZXJpZGVudGlmaWVyfS9wYXNzd29yZFwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS91c2Vycy97dXNlcmlkZW50aWZpZXJ9L3Bhc3N3b3JkXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvdGFza3MvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL2NoYXJnZXMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS91c2Vycy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkRFTEVURVwiXX0se1wicGF0aFwiOlwiYWNjb3VudGluZy12MS9sZWRnZXJzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJwb3J0Zm9saW8tdjEvcHJvZHVjdHMvKi9jYXNlcy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzLyovY2hhcmdlcy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkRFTEVURVwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY3VzdG9tZXJzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwib2ZmaWNlLXYxL29mZmljZXMvKi9hZGRyZXNzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkRFTEVURVwiXX0se1wicGF0aFwiOlwiYWNjb3VudGluZy12MS9sZWRnZXJzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9lbXBsb3llZXNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwib2ZmaWNlLXYxL2VtcGxveWVlcy8qL2NvbnRhY3RzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwiYWNjb3VudGluZy12MS9hY2NvdW50cy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY3VzdG9tZXJzLyovdGFza3MvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL2Nhc2VzLyovY29tbWFuZHNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvZW1wbG95ZWVzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwiYWNjb3VudGluZy12MS9hY2NvdW50cy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkRFTEVURVwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY3VzdG9tZXJzLyovY29tbWFuZHNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiaWRlbnRpdHktdjEvdXNlcnMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvZW1wbG95ZWVzL3t1c2VyaWRlbnRpZmllcn1cIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY3VzdG9tZXJzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9lbXBsb3llZXMvKi9jb250YWN0c1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJERUxFVEVcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3JvbGVzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL2pvdXJuYWxcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJjdXN0b21lci12MS9jdXN0b21lcnMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9vZmZpY2VzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvZW1wbG95ZWVzL3t1c2VyaWRlbnRpZmllcn0vY29udGFjdHNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY3VzdG9tZXJzLyovdGFza3NcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwib2ZmaWNlLXYxL29mZmljZXMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wYXR0ZXJuc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvb2ZmaWNlc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJwb3J0Zm9saW8tdjEvcHJvZHVjdHMvKi90YXNrc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvb2ZmaWNlcy8qL2JyYW5jaGVzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0c1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3Blcm1pdHRhYmxlZ3JvdXBzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwib2ZmaWNlLXYxL2VtcGxveWVlcy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvdGFza3NcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzLyovY2FzZXMvKi9hY3Rpb25zXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL3Rhc2tzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiYWNjb3VudGluZy12MS9qb3VybmFsLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiaWRlbnRpdHktdjEvdG9rZW4vX2N1cnJlbnRcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJjdXN0b21lci12MS9jdXN0b21lcnMvKi9pZGVudGlmaWNhdGlvblwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9lbXBsb3llZXMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJwb3J0Zm9saW8tdjEvcHJvZHVjdHMvKi90YXNrc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL3Rhc2tzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJjdXN0b21lci12MS90YXNrc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImN1c3RvbWVyLXYxL2NhdGFsb2dzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3Blcm1pdHRhYmxlZ3JvdXBzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL2pvdXJuYWxcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS9yb2xlcy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL2luZGl2aWR1YWxsZW5kaW5nL2N1c3RvbWVycy8qL2Nhc2VzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wcm9kdWN0cy8qL2Nhc2VzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcImFjY291bnRpbmctdjEvbGVkZ2Vycy8qL2FjY291bnRzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3Blcm1pdHRhYmxlZ3JvdXBzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvZW1wbG95ZWVzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJjdXN0b21lci12MS9jdXN0b21lcnMvKi9hZGRyZXNzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY2F0YWxvZ3NcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiaWRlbnRpdHktdjEvcm9sZXMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJwb3J0Zm9saW8tdjEvcHJvZHVjdHMvKi9jYXNlc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9lbXBsb3llZXMve3VzZXJpZGVudGlmaWVyfVwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3VzZXJzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJjdXN0b21lci12MS9jdXN0b21lcnMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL2FjY291bnRzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzLyovY2hhcmdlcy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwicG9ydGZvbGlvLXYxL3Byb2R1Y3RzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwiY3VzdG9tZXItdjEvY3VzdG9tZXJzLyovY29tbWFuZHNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvZW1wbG95ZWVzL3t1c2VyaWRlbnRpZmllcn0vY29udGFjdHNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS91c2Vycy97dXNlcmlkZW50aWZpZXJ9L3Blcm1pc3Npb25zXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcInBvcnRmb2xpby12MS9wYXR0ZXJucy8qL2NoYXJnZXNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX0se1wicGF0aFwiOlwib2ZmaWNlLXYxL29mZmljZXMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJvZmZpY2UtdjEvb2ZmaWNlc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImFjY291bnRpbmctdjEvYWNjb3VudHMvKi9jb21tYW5kc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJwb3J0Zm9saW8tdjEvaW5kaXZpZHVhbGxlbmRpbmcvcHJvZHVjdHMvKi9jYXNlcy8qL3BsYW5uZWRwYXltZW50c1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJhY2NvdW50aW5nLXYxL2xlZGdlcnMvKlwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImFjY291bnRpbmctdjEvYWNjb3VudHNcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCJdfSx7XCJwYXRoXCI6XCJjdXN0b21lci12MS9jdXN0b21lcnMvKi9jb250YWN0XCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiXX0se1wicGF0aFwiOlwib2ZmaWNlLXYxL2VtcGxveWVlcy8qL2NvbnRhY3RzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcIm9mZmljZS12MS9lbXBsb3llZXMve3VzZXJpZGVudGlmaWVyfS9jb250YWN0c1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIl19LHtcInBhdGhcIjpcImFjY291bnRpbmctdjEvYWNjb3VudHMvKi9lbnRyaWVzXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIlJFQURcIl19LHtcInBhdGhcIjpcImN1c3RvbWVyLXYxL2NhdGFsb2dzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiUkVBRFwiXX1dfSIsImlzcyI6InRlbmFudCIsImlhdCI6MTQ5MzE5NjM5OSwiZXhwIjoxNDkzMTk3NTk5fQ.CVE6LmvziMj-xj37Hd74zYDrR3zPg_3QqUJlBtQZc35uQoaFVNOA2rIA9D_JVZ76DqlNw2pGAhTr-EzMYskmpJoyFuWADALWZE1pmUN7fFMX9CE8x0bgiDx3K6CFPcISUcarqaCiGhJEf-GHyW7qtL-xmSt8l1SG8e6B8EW1MWFNjKMH2m6XR_0DPXmLrosvWtkBFVQh8zUwCU5TsseeOWtXZ8nutoqFMpbHlOJwgUR8ZJjjwkB8kS5rki3_lxVaMWSCOkgIWlZfAS_i2yNn6ctteLtrkyn3FguAEdoikK9-mS6YEyECMWQZES6WqgndWfhPxgRYiXMMJlXjRSh-8w",
+			"enabled": true
+		},
+		{
+			"key": "rootUser",
+			"value": "wepemnefret",
+			"enabled": true
+		},
+		{
+			"key": "rootUserToken",
+			"value": "Bearer eyJhbGciOiJSUzUxMiJ9.eyJhdWQiOiJwcm92aXNpb25lci12MSIsInN1YiI6IndlcGVtbmVmcmV0IiwiL2ZpbmNuLmFwYWNoZS5vcmcvcyI6IjIwMTktMDktMDRUMDZfNDNfNTIiLCIvZmluY24uYXBhY2hlLm9yZy9jIjoiUk9MRV9BRE1JTiIsImlzcyI6InN5c3RlbSIsImlhdCI6MTU2NzY5MDcxOSwiZXhwIjoxNTY3Njk0MzE5fQ.mG4Hs3IkU0_lHzazEidYU3EbVoHxmVhF3mBKWsnsLktE4PUnFjkfkP201RLypUzUTFTR4jp8ytDryOZQi-Cqku1BeRv8zQihJNFNL5khpmLnDKmelffE4BmM6t3wPsXSLke9orTL6HQEgNELcR03UhihGp_JvPYVQ5uzcSKcv1uG5U0IDZdKMAfvCdeu7uS5mV_H6tHnPjChbGcfPdB6wtk-4d7OvMNQ1qQO0KhKgVh3P2TKul4AtMW4IJB3HbyIJjqtTE0_nPDneM7mMGPPwLrFLGB-90TS_ackUZo3H7yOy4PgaDRk04Dj1w-mG1DM0HB5TeYf4j5eD7aMkwed0w",
+			"enabled": true
+		},
+		{
+			"key": "antonyUser",
+			"value": "antony",
+			"enabled": true
+		},
+		{
+			"key": "antonyToken",
+			"value": "Bearer eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJhbnRvbnkiLCIvZmluY24uYXBhY2hlLm9yZy9zIjoiMjAxOS0wOS0wNVQxM18zOV80NiIsIi9maW5jbi5hcGFjaGUub3JnL2MiOiJ7XCJ0b2tlblBlcm1pc3Npb25zXCI6W3tcInBhdGhcIjpcImlkZW50aXR5LXYxL3VzZXJzL3t1c2VyaWRlbnRpZmllcn0vcGFzc3dvcmRcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCIsXCJSRUFEXCIsXCJERUxFVEVcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3JvbGVzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCIsXCJSRUFEXCIsXCJERUxFVEVcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL3VzZXJzLypcIixcImFsbG93ZWRPcGVyYXRpb25zXCI6W1wiQ0hBTkdFXCIsXCJSRUFEXCIsXCJERUxFVEVcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25pZGVudGlmaWVyfS9wZXJtaXNzaW9uc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJDSEFOR0VcIixcIlJFQURcIixcIkRFTEVURVwiXX0se1wicGF0aFwiOlwiaWRlbnRpdHktdjEvdXNlcnMve3VzZXJpZGVudGlmaWVyfS9wZXJtaXNzaW9uc1wiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJSRUFEXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS90b2tlbi9fY3VycmVudFwiLFwiYWxsb3dlZE9wZXJhdGlvbnNcIjpbXCJERUxFVEVcIl19LHtcInBhdGhcIjpcImlkZW50aXR5LXYxL2FwcGxpY2F0aW9ucy8qL3Blcm1pc3Npb25zLyovdXNlcnMve3VzZXJpZGVudGlmaWVyfS9lbmFibGVkXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiLFwiUkVBRFwiLFwiREVMRVRFXCJdfSx7XCJwYXRoXCI6XCJpZGVudGl0eS12MS9wZXJtaXR0YWJsZWdyb3Vwcy8qXCIsXCJhbGxvd2VkT3BlcmF0aW9uc1wiOltcIkNIQU5HRVwiLFwiUkVBRFwiLFwiREVMRVRFXCJdfV19IiwiL2ZpbmNuLmFwYWNoZS5vcmcvYSI6ImlkZW50aXR5LXYxIiwiaXNzIjoidGVuYW50IiwiaWF0IjoxNTY3NjkwODM2LCJleHAiOjE1Njc2OTIwMzZ9.Ds-sqrXgZWxqWzN1VXiFwZJw5obCob785WcIvuk5Udo4Oq6Jmn6iV6zK-KQF9Mr0KpUwMpzSTkHjoVC394snfZ-Zfgq67MI3fWHN9yugXSRrS0-drXUVy2KY8TmVTcW557z6KGiva3BuYQ5hiysYu_l4s4RRGigi-fuBMWwjUcRTiQE-xu0H1lMl8_wn64RjnX3lNZVuVqXaTmK8L1rtrAO1qP4M5FQgKrC7XLFCRnOwmsQemdUgA9zmBEFKxuo9JhZXiKu6pbuhxwkB_-QHUrNokQYa4lCfRNepZfZgniugTtLsUW88WGtAaIlxJPIBg5t-qLvSWh18Mt1A9tdz1g",
+			"enabled": true
+		},
+		{
+			"key": "client_id",
+			"value": "service-runner",
+			"enabled": true
+		},
+		{
+			"key": "rootUserPassword",
+			"value": "oS/0IiAME/2unkN1momDrhAdNKOhGykYFH/mJN20",
+			"enabled": true
+		},
+		{
+			"key": "provisionerUrl",
+			"value": "provisioner-ms:2020",
+			"enabled": true
+		},
+		{
+			"key": "identityUrl",
+			"value": "identity-ms:2021",
+			"enabled": true
+		},
+		{
+			"key": "webappUrl",
+			"value": "localhost:8888",
+			"enabled": true
+		},
+		{
+			"key": "accountingUrl",
+			"value": "accounting-ms:2025",
+			"enabled": true
+		},
+		{
+			"key": "antonyUserPassword",
+			"value": "dGVzdA==",
+			"enabled": true
+		}
+	],
+	"_postman_variable_scope": "environment",
+	"_postman_exported_at": "2019-09-05T13:50:13.901Z",
+	"_postman_exported_using": "Postman/7.5.0"
+}
diff --git a/start-up.sh b/start-up.sh
new file mode 100755
index 0000000..97deace
--- /dev/null
+++ b/start-up.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+
+cd external_tools/
+docker-compose up -d
+cassandra_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cassandra)
+postgres_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' postgres)
+
+# #Test Cassandra and Postgres
+echo "Waiting for Cassandra and Postgres ..."
+while ! nc -z "${cassandra_ip}" 9042 ; do
+  sleep 1
+done
+while ! nc -z "${postgres_ip}" 5432 ; do
+  sleep 1
+done
+echo "Cassandra and Postgres are up and running..."
+cd ..
+
+echo "Starting up Fineract CN microservices..."
+wget https://mifos.jfrog.io/mifos/libs-snapshot-local/org/apache/fineract/cn/lang/0.1.0-BUILD-SNAPSHOT/lang-0.1.0-BUILD-SNAPSHOT.jar
+java -cp lang-0.1.0-BUILD-SNAPSHOT.jar org.apache.fineract.cn.lang.security.RsaKeyPairFactory UNIX > .env
+cat env_variables >> .env
+
+docker-compose up -d
+echo "Successfully started fineract services."