├── README-ANDROID.md ├── backend ├── criminal-cert-service.pb ├── public-service-catalog.pb ├── clients │ ├── @diia-inhouse_diia-crypto-client-1.0.0-94617.tgz │ ├── @diia-inhouse_auth-service-client-1.0.0-122940.tgz │ ├── @diia-inhouse_address-service-client-1.0.0-118331.tgz │ ├── @diia-inhouse_analytics-service-client-1.0.0-121540.tgz │ ├── @diia-inhouse_notification-service-client-1.0.0-121722.tgz │ └── @diia-inhouse_public-service-catalog-client-1.0.0-123097.tgz ├── README.md ├── docker-compose.yml ├── LINKDEPS.md └── envoy.yaml ├── README-iOS.md └── TESTING.md /README-ANDROID.md: -------------------------------------------------------------------------------- 1 | # Android Repository 2 | 3 | - [Diia application](https://github.com/diia-open-source/android-diia) -------------------------------------------------------------------------------- /backend/criminal-cert-service.pb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/criminal-cert-service.pb -------------------------------------------------------------------------------- /backend/public-service-catalog.pb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/public-service-catalog.pb -------------------------------------------------------------------------------- /backend/clients/@diia-inhouse_diia-crypto-client-1.0.0-94617.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/clients/@diia-inhouse_diia-crypto-client-1.0.0-94617.tgz -------------------------------------------------------------------------------- /backend/clients/@diia-inhouse_auth-service-client-1.0.0-122940.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/clients/@diia-inhouse_auth-service-client-1.0.0-122940.tgz -------------------------------------------------------------------------------- /backend/clients/@diia-inhouse_address-service-client-1.0.0-118331.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/clients/@diia-inhouse_address-service-client-1.0.0-118331.tgz -------------------------------------------------------------------------------- /backend/clients/@diia-inhouse_analytics-service-client-1.0.0-121540.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/clients/@diia-inhouse_analytics-service-client-1.0.0-121540.tgz -------------------------------------------------------------------------------- /backend/clients/@diia-inhouse_notification-service-client-1.0.0-121722.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/clients/@diia-inhouse_notification-service-client-1.0.0-121722.tgz -------------------------------------------------------------------------------- /backend/clients/@diia-inhouse_public-service-catalog-client-1.0.0-123097.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diia-open-source/diia-setup-howto/HEAD/backend/clients/@diia-inhouse_public-service-catalog-client-1.0.0-123097.tgz -------------------------------------------------------------------------------- /README-iOS.md: -------------------------------------------------------------------------------- 1 | # iOS Repositories 2 | 3 | - [Diia application](https://github.com/diia-open-source/ios-diia) 4 | 5 | ## Core functionality 6 | - [MVPModule](https://github.com/diia-open-source/ios-mvpmodule) 7 | - [Network](https://github.com/diia-open-source/ios-network) 8 | - [Common Types](https://github.com/diia-open-source/ios-commontypes) 9 | - [UI Components](https://github.com/diia-open-source/ios-uicomponents) 10 | - [Common Services](https://github.com/diia-open-source/ios-commonservices) 11 | 12 | ## Features 13 | - [Authorization](https://github.com/diia-open-source/ios-authorization) 14 | - [Documents](https://github.com/diia-open-source/ios-documents) 15 | - [Public Services](https://github.com/diia-open-source/ios-publicservices) 16 | -------------------------------------------------------------------------------- /backend/README.md: -------------------------------------------------------------------------------- 1 | # Where to Begin 2 | 3 | Our main repositories have `be--service` as the naming convention. Please start from the READMEs of these repositories. 4 | 5 | # 💻 Local Setup 6 | 7 | ## Dependencies 8 | 9 | This guide presents an example of setting up a Docker ecosystem to run services locally. Please consider installing Docker and Docker-compose individually for your specific OS; this is beyond the scope of the current instructions. [How to install Docker](https://docs.docker.com/engine/install), [How to install docker-compose](https://docs.docker.com/compose/install/). 10 | 11 | For the environment, four things should be running: Envoy proxy, MongoDB replicas, Redis, and RabbitMQ. 12 | 13 | 14 | 1. Copy [Envoy proxy config](envoy.yaml) file 15 | 2. Copy [Public service catalog transcoder](public-service-catalog.pb) file 16 | 3. Copy [Criminal service catalog transcoder](criminal-cert-service.pb) file 17 | 4. Copy [docker-compose](docker-compose.yml) file 18 | 5. Run the following commands from the folder the compose file: 19 | 20 | 21 | ```bash 22 | sudo -- sh -c -e "echo '127.0.0.1 mongo1 mongo2 mongo3' >> /etc/hosts" 23 | docker-compose up -d 24 | docker exec mongo1 mongo --eval 'rs.initiate({_id:"diia",version:1,members:[{_id:1,host:"mongo1:27017",priority:2},{_id:2,host:"mongo2:27017",priority:1},{_id:3,host:"mongo3:27017",priority:1}]}, { force: true })' 25 | ``` 26 | 27 | To run a particular service, see its README file. 28 | 29 | ## gRPC 30 | 31 | To build services, you need to install the Protocol Buffer Compiler. Follow the [steps](https://grpc.io/docs/protoc-installation/) for your platform. 32 | 33 | ## Mocked Services 34 | 35 | The `Address`, `Analytics` and `Crypto` services are currently unavailable, so you'll need to create mocks. We post [*-client](clients/) files for those three services to help you create their mocks. -------------------------------------------------------------------------------- /backend/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | services: 3 | envoy: 4 | image: envoyproxy/envoy:v1.29-latest 5 | volumes: 6 | - ./envoy.yaml:/etc/envoy/envoy.yaml 7 | - ./public-service-catalog.pb:/transcoders/public-service-catalog.pb 8 | - ./criminal-cert-service.pb:/transcoders/criminal-cert-service.pb 9 | extra_hosts: 10 | - 'auth-grpc:172.17.0.1' 11 | - 'criminal-cert-grpc:172.17.0.1' 12 | - 'public-service-catalog-grpc:172.17.0.1' 13 | ports: 14 | - 9090:9090 15 | redis: 16 | image: 'bitnami/redis:latest' 17 | environment: 18 | - ALLOW_EMPTY_PASSWORD=yes 19 | ports: 20 | - '6379:6379' 21 | rabbitmq: 22 | image: 'heidiks/rabbitmq-delayed-message-exchange' 23 | container_name: rabbitmq 24 | ports: 25 | - '5672:5672' 26 | - '15672:15672' 27 | mongo1: 28 | container_name: mongo1 29 | image: mongo:5 30 | networks: 31 | - mongo-network 32 | ports: 33 | - 27017:27017 34 | depends_on: 35 | - mongo2 36 | - mongo3 37 | links: 38 | - mongo2 39 | - mongo3 40 | restart: always 41 | entrypoint: 42 | [ 43 | "/usr/bin/mongod", 44 | "--bind_ip_all", 45 | "--replSet", 46 | "diia" 47 | ] 48 | mongo2: 49 | container_name: mongo2 50 | image: mongo:5 51 | networks: 52 | - mongo-network 53 | ports: 54 | - 27018:27017 55 | restart: always 56 | entrypoint: 57 | [ 58 | "/usr/bin/mongod", 59 | "--bind_ip_all", 60 | "--replSet", 61 | "diia" 62 | ] 63 | mongo3: 64 | container_name: mongo3 65 | image: mongo:5 66 | networks: 67 | - mongo-network 68 | ports: 69 | - 27019:27017 70 | restart: always 71 | entrypoint: 72 | [ 73 | "/usr/bin/mongod", 74 | "--bind_ip_all", 75 | "--replSet", 76 | "diia" 77 | ] 78 | 79 | networks: 80 | mongo-network: 81 | driver: bridge 82 | -------------------------------------------------------------------------------- /backend/LINKDEPS.md: -------------------------------------------------------------------------------- 1 | # **How to Manually Clone, Build, and Link Dependencies from `@diia-inhouse` Scope** 2 | 3 | ## **Reason** 4 | 5 | The scope of `@diia-inhouse/` is private and does not exist in the public npm registry. This means that we cannot install a package from the `@diia-inhouse/` scope by merely running `npm install`. Instead of installation, we have to clone each required package from the git repository, install its dependencies, and create an `npm link`. This will create a link to a local copy of that package, ready to be used as an npm dependency. 6 | 7 | ## **Nested Dependencies** 8 | 9 | Each package from `@diia-inhouse/` scope typically has another package from that scope as a dependency. 10 | 11 | This means that before linking packages, we have to define the correct order in which we clone, install, build, and link each package. 12 | 13 | To fully understand this issue, let's consider a simple chain of dependencies: 14 | 15 | `@diia-inhouse/db` -> `@diia-inhouse/crypto` -> `@diia-inhouse/errors` 16 | 17 | According to that chain, the linking order of dependencies is: 18 | 19 | 1. `@diia-inhouse/errors` 20 | 2. `@diia-inhouse/crypto` 21 | 3. `@diia-inhouse/db` 22 | 23 | When we consider linking a specific package, we must already have linked all packages from its `package.json`. 24 | 25 | ## **Linking Process** 26 | 27 | Let's go ahead and create an npm link for the `@diia-inhouse/errors` package. 28 | 29 | ### **1. Clone Code from Git Repository** 30 | 31 | ```bash 32 | $ git clone git@:diia-inhouse/pkg-errors.git 33 | ``` 34 | 35 | > **_NOTE:_** Packages that end with *-client are not listed as separate git repositories. You can find them prebuilt in the [clients](clients/) folder. 36 | 37 | ### **2. Install and Use Linked Packages** 38 | 39 | As we can see according to `package.json`, this package only has `devDependencies` to install and use: 40 | 41 | ```json 42 | "devDependencies": { 43 | "@diia-inhouse/configs": "1.7.1", 44 | "@diia-inhouse/eslint-config": "1.12.0", 45 | "@diia-inhouse/test": "2.3.0", 46 | "@diia-inhouse/types": "2.17.0" 47 | }, 48 | ``` 49 | 50 | ```bash 51 | $ cd ./pkg-errors 52 | $ npm link @diia-inhouse/configs @diia-inhouse/eslint-config @diia-inhouse/test @diia-inhouse/types 53 | ``` 54 | 55 | The command above will install and use already linked packages. 56 | 57 | **We assume that the linking process is already complete for each package from the list above.** 58 | 59 | ### **3. Build `@diia-inhouse/errors`** 60 | 61 | ```bash 62 | $ npm run build 63 | ``` 64 | 65 | ### **4. Create npm link for `@diia-inhouse/errors`** 66 | 67 | ```bash 68 | $ npm link 69 | ``` 70 | -------------------------------------------------------------------------------- /backend/envoy.yaml: -------------------------------------------------------------------------------- 1 | admin: 2 | access_log_path: /tmp/admin_access.log 3 | address: 4 | socket_address: {address: 0.0.0.0, port_value: 9901} 5 | 6 | static_resources: 7 | listeners: 8 | - name: grpc_json_listener 9 | address: 10 | socket_address: {address: 0.0.0.0, port_value: 9090} 11 | filter_chains: 12 | - name: Transcoder connection 13 | filters: 14 | - name: envoy.filters.network.http_connection_manager 15 | typed_config: 16 | "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager 17 | stat_prefix: grpc_json 18 | codec_type: AUTO 19 | route_config: 20 | name: grpc_json_route 21 | virtual_hosts: 22 | - name: grpc_json_service 23 | domains: ["*"] 24 | routes: 25 | - match: 26 | prefix: / 27 | grpc: {} 28 | headers: 29 | - name: "service-id" 30 | exact_match: "criminal-cert" 31 | route: {cluster: criminal-cert, timeout: 30s} 32 | - match: 33 | prefix: / 34 | headers: 35 | - name: "service-id" 36 | exact_match: "criminal-cert" 37 | route: {cluster: criminal-cert, timeout: 30s} 38 | # Specific convention, if we're going through http-grpc route then it must've been authorized higher on call chain 39 | # grpc-grpc connection on the other hand is untrusted and we need to check if it's valid 40 | # this config **disables** external auth filter 41 | typed_per_filter_config: 42 | envoy.filters.http.ext_authz: 43 | "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute 44 | disabled: true 45 | - match: 46 | prefix: / 47 | grpc: {} 48 | headers: 49 | - name: "service-id" 50 | exact_match: "public-service-catalog" 51 | route: {cluster: public-service-catalog, timeout: 30s} 52 | - match: 53 | prefix: / 54 | headers: 55 | - name: "service-id" 56 | exact_match: "public-service-catalog" 57 | route: {cluster: public-service-catalog, timeout: 30s} 58 | # Specific convention, if we're going through http-grpc route then it must've been authorized higher on call chain 59 | # grpc-grpc connection on the other hand is untrusted and we need to check if it's valid 60 | # this config **disables** external auth filter 61 | typed_per_filter_config: 62 | envoy.filters.http.ext_authz: 63 | "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute 64 | disabled: true 65 | http_filters: 66 | - name: envoy.filters.http.grpc_json_transcoder.criminal-cert 67 | typed_config: 68 | "@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder 69 | proto_descriptor: "/transcoders/criminal-cert-service.pb" 70 | services: ["ua.gov.diia.criminal_cert.CriminalCertService"] 71 | convert_grpc_status: true 72 | match_incoming_request_route: true 73 | print_options: 74 | add_whitespace: true 75 | always_print_primitive_fields: true 76 | always_print_enums_as_ints: false 77 | preserve_proto_field_names: false 78 | - name: envoy.filters.http.grpc_json_transcoder.public-service-catalog 79 | typed_config: 80 | "@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder 81 | proto_descriptor: "/transcoders/public-service-catalog.pb" 82 | services: ["ua.gov.diia.publicservicecatalog.PublicServiceCatalog"] 83 | convert_grpc_status: true 84 | match_incoming_request_route: true 85 | print_options: 86 | add_whitespace: true 87 | always_print_primitive_fields: true 88 | always_print_enums_as_ints: false 89 | preserve_proto_field_names: false 90 | - name: envoy.filters.http.router 91 | typed_config: 92 | "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router 93 | 94 | clusters: 95 | - name: auth 96 | type: STRICT_DNS 97 | lb_policy: ROUND_ROBIN 98 | dns_lookup_family: V4_PREFERRED 99 | connect_timeout: 5s 100 | typed_extension_protocol_options: 101 | envoy.extensions.upstreams.http.v3.HttpProtocolOptions: 102 | "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions 103 | explicit_http_config: 104 | http2_protocol_options: {} 105 | load_assignment: 106 | cluster_name: auth 107 | endpoints: 108 | - lb_endpoints: 109 | - endpoint: 110 | address: 111 | socket_address: 112 | address: auth-grpc 113 | port_value: 5441 114 | ipv4_compat: true 115 | - name: criminal-cert 116 | type: LOGICAL_DNS 117 | lb_policy: ROUND_ROBIN 118 | dns_lookup_family: V4_PREFERRED 119 | connect_timeout: 5s 120 | typed_extension_protocol_options: 121 | envoy.extensions.upstreams.http.v3.HttpProtocolOptions: 122 | "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions 123 | explicit_http_config: 124 | http2_protocol_options: {} 125 | load_assignment: 126 | cluster_name: criminal-cert 127 | endpoints: 128 | - lb_endpoints: 129 | - endpoint: 130 | address: 131 | socket_address: 132 | address: criminal-cert-grpc 133 | port_value: 5442 134 | ipv4_compat: true 135 | - name: public-service-catalog 136 | type: LOGICAL_DNS 137 | lb_policy: ROUND_ROBIN 138 | dns_lookup_family: V4_PREFERRED 139 | connect_timeout: 5s 140 | typed_extension_protocol_options: 141 | envoy.extensions.upstreams.http.v3.HttpProtocolOptions: 142 | "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions 143 | explicit_http_config: 144 | http2_protocol_options: {} 145 | load_assignment: 146 | cluster_name: public-service-catalog 147 | endpoints: 148 | - lb_endpoints: 149 | - endpoint: 150 | address: 151 | socket_address: 152 | address: public-service-catalog-grpc 153 | port_value: 5443 154 | ipv4_compat: true 155 | -------------------------------------------------------------------------------- /TESTING.md: -------------------------------------------------------------------------------- 1 | 2 | # Testing 3 | 4 | The table below holds information on test accounts for quick access. 5 | 6 | | Authentication method | Login info | Authentication session timeout | 7 | |-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------| 8 | | BankID / Банк НаДія | **Personal token:** DF8BC4DB62C3F5426C1549E301600 | 3 min 9 | | BankID / Банк НаДія | **Personal token:** B6378D50CD4EA09BECDFBA05606D9 | 3 min 10 | | BankID / Банк НаДія | **Personal token:** 8AE85537960B127536D2154275D58 | 3 min 11 | | BankID / Банк НаДія | **Personal token:** 610A7E4BCFC5B90F17FBACE5BF042 | 3 min 12 | | BankID / Банк НаДія | **Personal token:** F44596F4AF97AF8150CD04C638600 | 3 min 13 | | BankID / Банк НаДія | **Personal token:** C0B3F3E624031B6ADB7C2968A184F | 3 min 14 | | BankID / Банк НаДія | **Personal token:** 8E003B26CC9FBEE71B87DE609C587 | 3 min 15 | | BankID / Банк НаДія | **Personal token:** 608C0B7F12CAD1753A4862072F775 | 3 min 16 | | BankID / Банк НаДія | **Personal token:** C709822401C40EC5607E85EEBCADB | 3 min 17 | | BankID / Банк НаДія | **Personal token:** BF68F9B92E609DB3E5D421A405485 | 3 min 18 | | BankID / Банк НаДія | **Personal token:** 2C9F377D0D2A4C762A1DBA7C59409 | 3 min 19 | | BankID / Банк НаДія | **Personal token:** CB07E68B7E86785B8F478D7858994 | 3 min 20 | | BankID / Банк НаДія | **Personal token:** 8E74B2FB75328AE6B4E48475C226B | 3 min 21 | | BankID / Банк НаДія | **Personal token:** 9CDF6088C7B79700E91294CCD764E | 3 min 22 | | BankID / Банк НаДія | **Personal token:** 96BA440E470A04FF9321FD67D7173 | 3 min 23 | | BankID / Банк НаДія | **Personal token:** 47FC65C55329088B9CFD56B7FFF77 | 3 min 24 | | BankID / Банк НаДія | **Personal token:** 51175069B6C50E7F2CF2C859C3130 | 3 min 25 | | BankID / Банк НаДія | **Personal token:** 2F819109F7D173D7666B3D5A50563 | 3 min 26 | | BankID / Банк НаДія | **Personal token:** 8DED00808E9FD7F8C75305D88320F | 3 min 27 | | BankID / Банк НаДія | **Personal token:** 5B5F6E8246CE600155AB10160CBCD | 3 min 28 | | BankID / Банк НаДія | **Personal token:** 4F6934153AC2A43BB2C223F2A7FD2 | 3 min 29 | | BankID / Банк НаДія | **Personal token:** D75AEF4D7C0A52A91228DF278140A | 3 min 30 | | BankID / Банк НаДія | **Personal token:** 5611D1AA8F9AAF1B1531820A3C3AD | 3 min 31 | | BankID / Банк НаДія | **Personal token:** B322F2E0FB8181467AF63FFB879D5 | 3 min 32 | | BankID / Банк НаДія | **Personal token:** 1B3B3D3015A92E02EADE9671208D7 | 3 min 33 | | BankID / Банк НаДія | **Personal token:** C10871B93DCB53626108C9E872135 | 3 min 34 | | BankID / Банк НаДія | **Personal token:** 5C1B9A4A1E328AB05FD6A050E0F28 | 3 min 35 | | BankID / Банк НаДія | **Personal token:** 00066BDEE685CE180151EE993BC95 | 3 min 36 | | BankID / Банк НаДія | **Personal token:** B936F6C05F665D7DF8E2DE9C47599 | 3 min 37 | | BankID / Банк НаДія | **Personal token:** AC9C4C1468EAE672C85367A1E9AE2 | 3 min 38 | | BankID / Банк НаДія | **Personal token:** D420A1B6E05F1FD3FA2E7D3AFECB4 | 3 min 39 | | BankID / Банк НаДія | **Personal token:** 66F64786E20B8053F9C94C7C4E4FB | 3 min 40 | | BankID / Банк НаДія | **Personal token:** F0571FBF3FD94EE4E56DE58861126 | 3 min 41 | | BankID / Банк НаДія | **Personal token:** 3A678D1BC0408547D9B482F7DAFEB | 3 min 42 | | BankID / Банк НаДія | **Personal token:** F2E7DEC86798DFBD08A1065D2C197 | 3 min 43 | | BankID / Банк НаДія | **Personal token:** DBD1F789A4BE88C011EFBD5A6FA3A | 3 min 44 | | BankID / Банк НаДія | **Personal token:** B5248EF01780FE887C22B8AB712D7 | 3 min 45 | | BankID / Банк НаДія | **Personal token:** 4D56A8BAD00D145C75F3FC638E2AE | 3 min 46 | | BankID / Банк НаДія | **Personal token:** 5A82FFCF122EEF7046933DC1BBA75 | 3 min 47 | | BankID / Банк НаДія | **Personal token:** 34B32C51DEA387872FFDFCE3BC09C | 3 min 48 | | BankID / Банк НаДія | **Personal token:** 7396B15C3194D16508C6F1FFBC3EF | 3 min 49 | | BankID / Банк НаДія | **Personal token:** 69820539565D5637B1B037B7071F0 | 3 min 50 | | BankID / Банк НаДія | **Personal token:** 89E8E4C05E605B1C6BC66764DFE9D | 3 min 51 | | BankID / Банк НаДія | **Personal token:** C0D3910172E7C3D38A4EA3F9A598C | 3 min 52 | | BankID / Банк НаДія | **Personal token:** 47D0D900151D4CA651435E1A0196F | 3 min 53 | | BankID / Банк НаДія | **Personal token:** B34F05AA0E0807C517FDE0E095C2E | 3 min 54 | | BankID / Банк НаДія | **Personal token:** 553DBE0456E3F7D29D321069BCEFA | 3 min 55 | | BankID / Банк НаДія | **Personal token:** BA0DD473310DBAD5BBF7F1FA17AB3 | 3 min 56 | | BankID / Банк НаДія | **Personal token:** 1E010B5EADAB998AAC52886992D02 | 3 min 57 | | BankID / Банк НаДія | **Personal token:** 37BBE952EBFE3D87EE31E6471CE35 | 3 min 58 | | BankID / Банк НаДія | **Personal token:** FAEBF5448275519CD7CC7BABCEEF4 | 3 min 59 | | BankID / Банк НаДія | **Personal token:** 3DE89E58A3C8AEF1D7E738956560E | 3 min 60 | | BankID / Банк НаДія | **Personal token:** 49799896A56D7D1613246D7133162 | 3 min 61 | | BankID / Банк НаДія | **Personal token:** 6D7D734F485371874CDA6A495DAF2 | 3 min 62 | | BankID / Банк НаДія | **Personal token:** F864D476CFE25B9E0CB81F46B7887 | 3 min 63 | | BankID / Банк НаДія | **Personal token:** 13A81B60E106B5375256E7DB705BE | 3 min 64 | | BankID / Банк НаДія | **Personal token:** C22E483EB5A5E8AEC915DEA7EA8A4 | 3 min 65 | | BankID / Банк НаДія | **Personal token:** F89A23054450355A9A0EE6F57400E | 3 min 66 | | BankID / Банк НаДія | **Personal token:** 3610DD40F3335F838BAB7D62CCFCE | 3 min 67 | | BankID / Банк НаДія | **Personal token:** 535ED6BFB525EE8EF223E63E1837B | 3 min 68 | | BankID / Банк НаДія | **Personal token:** D85C358523C5860DF2A0BDDA4DEAE | 3 min 69 | | BankID / Банк НаДія | **Personal token:** 1EA9731ECFD2A68DFCFD6FFD8749A | 3 min 70 | | BankID / Банк НаДія | **Personal token:** 1E7605110CFA201E882B6F10114D9 | 3 min 71 | | BankID / Банк НаДія | **Personal token:** BD206975B11DD230355BCFC69F1AC | 3 min 72 | | BankID / Банк НаДія | **Personal token:** B58D5B0DD4F2DC5E4B14B6FC5CD3A | 3 min 73 | | BankID / Банк НаДія | **Personal token:** C75AE9342BEB458C1EF536678D318 | 3 min 74 | | BankID / Банк НаДія | **Personal token:** C72BA43C02322E597E816CC37F06D | 3 min 75 | | BankID / Банк НаДія | **Personal token:** F9899A23AF2ED1895EE279F764D3E | 3 min 76 | | BankID / Банк НаДія | **Personal token:** 81B00015D6C4AD66057BB4D9F4338 | 3 min 77 | | BankID / Банк НаДія | **Personal token:** F8986E94DC33A9A9DD742A5C4E4FF | 3 min 78 | | BankID / Банк НаДія | **Personal token:** 544ADBAC7A24F4D844ABFF738E69B | 3 min 79 | | BankID / Банк НаДія | **Personal token:** CD3A6976772733F60BCBD3A75B70A | 3 min 80 | | BankID / Банк НаДія | **Personal token:** BE3F27A87AF5F655247B3EFD34D98 | 3 min 81 | | BankID / Банк НаДія | **Personal token:** DF3BB7F91F789A05F5723433F4FB4 | 3 min 82 | | BankID / Банк НаДія | **Personal token:** CD690A847334FE0C96F4999406B96 | 3 min 83 | | BankID / Банк НаДія | **Personal token:** D0FC5858F401961FEBB436F8BD077 | 3 min 84 | | BankID / Банк НаДія | **Personal token:** E79131CAEFCC4AB4FA254572FA842 | 3 min 85 | | BankID / Банк НаДія | **Personal token:** EE4FA4DD12ADA2FF88B891872C417 | 3 min 86 | | BankID / Банк НаДія | **Personal token:** 690DD8A7AA8F47688C15964CEF2BC | 3 min 87 | | BankID / Банк НаДія | **Personal token:** EFE8F2DF11E8C80EEF922D0237831 | 3 min 88 | | BankID / Банк НаДія | **Personal token:** 5D539FB2BAC7DE8B25026D4F31DD8 | 3 min 89 | | BankID / Банк НаДія | **Personal token:** 7549579A263D27981B7D91F6DA944 | 3 min 90 | | BankID / Банк НаДія | **Personal token:** CBE0144850E16979FCF2CF5DAC923 | 3 min 91 | | BankID / Банк НаДія | **Personal token:** 2CF555C9ACBFB0416DC43EC5E34CC | 3 min 92 | | BankID / Банк НаДія | **Personal token:** 870FC76D0937CC6B0CF1EBE7EB5DE | 3 min 93 | | BankID / Банк НаДія | **Personal token:** 8DFDD97D7FA695E72754B87B26DDB | 3 min 94 | | BankID / Банк НаДія | **Personal token:** 6C9A5E8FF749A52B835E9B85CBF16 | 3 min 95 | | BankID / Банк НаДія | **Personal token:** 4ABBCD2EA805D6574665B8B9B6F57 | 3 min 96 | | BankID / Банк НаДія | **Personal token:** BEFF2B2F3332EC5BE905F088F4F84 | 3 min 97 | | BankID / Банк НаДія | **Personal token:** 72830742CC5EBDEC7E7CCCD3914BD | 3 min 98 | | BankID / Банк НаДія | **Personal token:** D36386C9CE3BC51F5C3E9741109FB | 3 min 99 | | BankID / Банк НаДія | **Personal token:** 53E4F9D75CF19C6DF7EDB24001C18 | 3 min 100 | | BankID / Банк НаДія | **Personal token:** 4CEB66F8FE71204E21C384A973669 | 3 min 101 | | BankID / Банк НаДія | **Personal token:** EAA93100B163668DD549C37836266 | 3 min 102 | | BankID / Банк НаДія | **Personal token:** 21C1CA04367FAAF52956C8C8C0BAA | 3 min 103 | | BankID / Банк НаДія | **Personal token:** E940559DF8EFC03CDA5EB7A79B0EC | 3 min 104 | | BankID / Банк НаДія | **Personal token:** 3E07252DD7490DBF4A9F636E539EB | 3 min 105 | | BankID / Банк НаДія | **Personal token:** A4E104E7660044F0261CA1E08A181 | 3 min 106 | | BankID / Банк НаДія | **Personal token:** 4DA8E56FC2A30F661B22FDD0AE436 | 3 min 107 | | BankID / Банк НаДія | **Personal token:** D194554A5086071C5E05B597C102F | 3 min 108 | --------------------------------------------------------------------------------